| Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann. |
Diskussion: Schach -- Läufer im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige Hi, ich hab wieder eine Aufgabe: Das Programm bekommt ein X/Y Koardinatenpaar (zufällig oder vom User). Dabei gilt: Code: ...
![]() |
| | #1 (permalink) |
| Anzeige Hi, ich hab wieder eine Aufgabe: Das Programm bekommt ein X/Y Koardinatenpaar (zufällig oder vom User). Dabei gilt: Code: X/Y < 9; X/Y > 0; Jetzt muss das Programm alle Felder berechnen auf die man kommen könnte wenn auf X/Y ein Läufer steht.(Läufer dürfen nur diagonal bewegt werden) Happy Coding | |
| | |
| | #2 (permalink) |
| Senior Member Registriert seit: 26.03.06 ![]() Likes: 16 | stehen da noch andere Figuren auf dem Schachbrett? |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Senior Member | Wieso orientierst du dich bei deiner Arbeit nicht an die eigentlichen Schachkoordinaten. So hast du es viel einfach die Züge zu berechnen. Nehmen wir als Beispiel, folgender Koordinatenaufbau eine Schachbrettes: A8 / B8 / C8 / D8 / E8 / F8 / G8 / H8 A7 / B7 / C7 / D7 / E7 / F7 / G7 / H7 A6 / B6 / C6 / D6 / E6 / F6 / G6 / H6 A5 / B5 / C5 / D5 / E5 / F5 / G5 / H5 A4 / B4 / C4 / D4 / E4 / F4 / G4 / H4 A3 / B3 / C3 / D3 / E3 / F3 / G3 / H3 A2 / B2 / C2 / D2 / E2 / F2 / G2 / H2 A1 / B1 / C1 / D1 / E1 / F1 / G1 / H1 Weiß steht auf den Linien 1 und 2 - Läufer auf C1 und F1. Nehmen wir den Läufer auf C1 und der Bauer auf D2 macht ihm Platz. Egal wie er nun zu H6 vorrückt, es ändern sich die Buchstaben in alphabetischer Reihenfolge C/D/E/F/G/H und die Zahlen 1/2/3/4/5/6. Die Zahlen oder Buchstaben werden also gleichermaßen erhöht, oder heruntergesetzt. Außer bei folgenden Beispiel: Schwarzer Läufer auf C8 möchte bei freier Bahn auf H3 ziehen. Die Zahlen werden heruntergesetzt 8/7/6 ..., aber die Buchstaben alphabetisch hochgezählt. Im Prinzip in zwei gegengesetzte Richtungen. Mit dieser Ansicht kannst du Programmiertechnisch auch viel anfangen, denn du würdest damit sicher gut hinkommen, wenn du die Zähler in der Programmierung nutzt. Ich weiß zwar nicht, was für eine Programmiersprache du nutzt, aber bei C++ könnte ein Teil so aussehen: Hier zählst du z.B. den weißen Läufer von C1, dessen Zug auf H6, mittels Zähler zur auf 6. Z ist in dem Fall der Zähler und h das Ziel, also die 6. Code: for(z=1; z<h; z++); |
| | |
| | #4 (permalink) |
| Themenstarter | @Serow : Nein. @Prometheus : Du siehst schon das das im Forum Programmieraufgaben steht,oder? Ich bin durchaus in der Lage das zu lösen,aber darum gehts halt nicht ;-) Xalon |
| | |
| | #5 (permalink) |
| Registriert seit: 25.10.06 ![]() Likes: 0 | Hi, ich habe zwar erst vor kurzem mit C++ angefangen, habe jedoch eine Lösung für die Aufgabe schreiben können. Da ich mich noch nicht so gut auskenne, ist es gut möglich, dass der Quellcode ein bisschen länger ist als nötig^^ Schach -- Läuferl Ich bin für konstruktive Kritik immer offen und kann sie mit sicherheit gebrauchen =) |
| | |
| | #6 (permalink) |
| Registriert seit: 01.11.03 ![]() Likes: 0 | Wie wäres mit code-tags (und falls es noch nicht eingerückt, das nachholen, es ist sehr schwer den Code so zu lesen, bei derart vielen Klammern...) ![]() Ansonsten sieht deine Eingabeprüfung etwas komisch aus... wann wird check gesetzt? Worauf? (Was passiert, wenn du einen falschen y-wert eingibst und danach richtige?) Da die Aufgabenstellung es nicht explizit gesagt hat, muss man nicht nach rechts-oben etc unterscheiden. Daher ist dein Code schon ziemlich lang... |
| | |
| | #7 (permalink) | |||
| Registriert seit: 25.10.06 ![]() Likes: 0 | Hi, erstmal danke ich dir für den "Tipp" mit den Code-Tags^^ Jetzt sind auch meine Einrückungen automatisch übernommen worden ![]() Zum Programm: Zitat:
![]() Zitat:
Zitat:
![]() MfG Pendran | |||
| | |
| | #8 (permalink) |
| Registriert seit: 08.12.04 ![]() Likes: 0 | Verbesserungsvorschläge Das würde die Sache sehr verkürzen. ![]() MfG freak |
| | |
| | #9 (permalink) | |
| Senior Member | Zitat:
Oh, Sorry. Jetzt verstehe ich es. Das ist ein Thread um den Programmieranfängern eine kleine Aufgabe zu geben, diese sie mittels Programmcode, den sie dann hier posten, lösen können. Ich dachte nur das du gerade ein Schachprogramm bastelst und nicht weißt wie du den Läufer einbringen kannst. Da habe ich mich wohl geirrt. Zwar bin ich mir auch bewusst, wie ich den Programmcode hierfür basteln würde, denoch finde ich mal so eine kleine Aufgabe sehr schöhn. Diese Aufgabe hat mich auch wieder zum nachdenken gebracht und daher war dein Thread schonmal nicht schlecht, auch wenn ich ihn nicht richtig verstanden habe - Die Frage bzw. Aufgabe habe ich schon verstanden. Aber ich lasse jetzt lieber den Aufgabenlöser oder den Anfängern den Vortritt. | |
| | |
| | #10 (permalink) |
| Registriert seit: 25.10.06 ![]() Likes: 0 | So, ich hab das Programm nochmal überarbeitet mithilfe der Tipps von freak4fun. (also ich glaube zumindestens das er das so meinte ![]() -ich habe eine Funktion für das Überprüfen der Eingabe geschrieben -ich habe eine Funktion für das Berechnen der Felder geschrieben -ich hab die "by = by + 1" durch "by++" ersetzt ![]() Dadurch hab ich das Programm immerhin von 135 auf 98 Zeilen verkleinert: Schach -- Läufer mit Funktionen: MfG Pendran |
| | |
| | #11 (permalink) |
| Registriert seit: 01.11.03 ![]() Likes: 0 | Dann hier auch mal meine Lösung... C++ |
| | |
| | #12 (permalink) |
| Registriert seit: 12.01.07 ![]() Likes: 0 | Hi, hier meine Lösung in Groovy. Checkt alle 4 Diagonal-Richtungen hintereinander. Code: def printMoves(x, y)
{
printDiagonal(x, y, 1, 9, 1, 9) // NE
printDiagonal(x, y, -1, 0, 1, 9) // NW
printDiagonal(x, y, -1, 0, -1, 0) // SW
printDiagonal(x, y, 1, 9, -1, 0) // SE
}
def printDiagonal(x, y, incX, stopX, incY, stopY)
{
while (((x += incX) != stopX) && ((y += incY) != stopY))
print "($x|$y) "
}
printMoves(3, 7) // (4|8) (2|8) (2|6) (1|5) (4|6) (5|5) (6|4) (7|3) (8|2) Habe vorher versucht mit dem Modulo-Operator die Grenzen zu überspringen und nur zwei statt vier durchläufe zu machen, hat aber nicht geklappt weil die Koordinaten als 1..8 und nicht als 0..7 gegeben waren. Viele Grüße, Ivan Dolvich |
| | |
| | #13 (permalink) |
| Registriert seit: 02.01.07 ![]() Likes: 0 | Hmm... also wenn das jemanden interessiert, der auch Dark Basic benutzt: Ich hab mal ein ganzes Schachspiel in DBPro geproggt. Mit Rochade, En Passant, Nicht überspringen von figuren, korrekt abschmeißen etc... Wenn jemand Interesse daran hat, soll er sich melden, aber das Thema is ja schon n Monat alt. -.-° |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Schach Spielverlauf visualisieren | ivegotmail | Programmieraufgaben | 0 | 17.06.07 14:10 |
| Wer hat lust mit mir Schach zu spielen? | frostimicha | Umfragen | 2 | 10.05.04 23:37 |
| Endliche Anzahl an möglichen Schach-Partien? | Indi | Off topic-Zone | 40 | 05.05.02 16:02 |