Delphi Projekt von Karsten Schwalbe im Schuljahr 2003/2004 | ![]() |
![]() |
Letztmalig dran rumgefummelt: 26.03.04 15:26:02 |
Grundprinzip: Mit den bekannten Programmstrukturen sowie einer gewissen Verfügbarkeit der Variablen- und Konstantenmodelle soll eine kleine Steuerungsaufgabe für einen Prozeß aus Deiner Umwelt gestaltet werden.
![]() |
1. Aufgabe, Lösungsprinzip und Hinweise 2. Die Dokumentation und Systembeschreibung 3. Compilierte .EXE-Datei, Units und Formulare 4. Copyrights |
1. Aufgabe, Lösungsprinzip und Hinweise | ![]() |
![]() |
![]() |
Aufgabe war es das 8-Damen-Problem zu lösen, d. h. alle Möglichkeiten zu finden,
wie man 8 Damen auf einem Schachbrett anordnet ohne das sie sich bedrohen, also
in einer Spalte, Reihe oder Diagonale stehen. Aus der Lösungen kann man eine Teilmenge der echten Lösungen
herausfiltern. In dieser Menge ergibt sich kein Element durch Spiegelung oder Drehung eines anderen Elements. Außerdem sollte
die Möglichkeit geschaffen werden, den 'Gedankengang' des Computers graphisch
darzustellen.
|
Achtung - bitte
beachten Sie folgende Hinweise.
![]() |
Um die graphische Darstellung einer Damenaufstellung zu sehen, klickt man einfach auf den entsprechenden Listeneintrag. |
![]() |
Die Buttons erklären sich selbst. Die Buttons mit Kreuz stellen Damen dar. |
![]() |
Lösungsprinzip: Durch systematisches Probieren und Feststellen von Widersprüchen werden die Damenstellungen festgelegt. |
2. Die Dokumentation und Systembeschreibung | ![]() |
![]() |
![]() |
![]() |
Um alle Lösungen herauszubekommen werden in den verschachtelten for-Schleifen
die Kombinationen der 8 verschieden y-Koordinaten der Damen durchprobiert.
Da 2 Damen nicht die gleiche x-Koordinate haben dürfen, gilt ohne Beschränkung der Allgemeinheit, dass die erste Dame in der ersten Spalte ist, die zweite in der zweiten, usw..
Steht eine der y-Koordinaten im Widerspruch zu den anderen Koordinaten (if-Anweisung) wird eine neue y-Koordinate dieser Dame ausprobiert. Zum Widerspruch kommt es, wenn die y-Koordinate der Dame einer y-Koordinate der vorigen Damen entspricht
(gleiche Zeile) oder wenn der Betrag der Differenz zweier y-Koordinaten dem Betrag der Differenz zweier entsprechender x-Koordinaten
entspricht (Diagonale). Da ich nicht wusste wie man den Betrag realisiert, habe ich das beide Beträge quadriert, was zu einer äquivalenten Aussage führt. Da die x-Koordinaten
bekannt sind, kann man für das Quadrat der Beträge der Differenzen der x-Koordinaten konkrete Zahlen angeben. Führen alle 8 y-Koordinaten zu keinem Widerspruch (die x-Koordinaten führen ja sowieso zu keinem Wiederspruch), werden sie in Schachschreibweise in einem Listeneintrag
gespeichert. Mit Hilfe der 2 Koordinaten kann die Dame nun die gleiche Position wie das aus der Liste gefolgerte Schachfeld annehmen. |
![]() |
Um die Darstellung Lösungen herauszubekommen, verläuft das Ganze im wesentlichen wie
oben beschrieben, nur dass nach der Auswahl der y-Koordinate einer Dame, diese Wahl durch das Verschieben der Dame graphisch dargestellt wird. Die nachfolgenden Damen werden zu ihrer Ausgangsstellung zurückgebracht. Durch 'Refresh' wird die Grafik aktualisiert und durch "Sleep" wird eine Verzögerung eingebaut. |
![]() |
Um die "echten" Lösungen herauszufiltern wird ein Listeneintrag als Original angesehen. Die nachfolgenden Listeneintrag werden untersucht, ob sie mit einem Abbild des Originals (durch mathematische Gleichungen) übereinstimmt. Wenn ja, wird dieser Eintrag gelöscht. Danach wird der 2. Eintrag als Original gesehen und die Routine wiederholt sich. Dies wiederholt sich, bis der letzte Eintrag Original ist . |
3. Compilierte EXE-Datei, Units und Formulare | ![]() |
![]() |
![]() |
![]() |
|
||
![]() |
Der Screenshot enthält nur einen Teil des Quelltextes, da dieser wesentlich größer als ein Fenster ist. | ||
![]() |
|
4. Copyrights | ![]() |
![]() |
![]() |
![]() |
© die Urheberrechte liegen bei: Karsten Schwalbe |
![]() |
die Arbeit wurde im Rahmen des Unterrichts Informatik Klasse 10 im Schuljahr 2003/2004 angefertigt |
![]() |
die Aufgabe wurde durch J.Gik entwickelt |
![]() |
Bearbeitungszeit: 3 Wochen |