Mein Programm will nicht so ganz
-
Hallo ihr alle da draußen,
habe ein recht nervendes Problem. Wir sollen das N-Queen (oder Damen) Problem schreiben. Bis jetzt hats ja auch alles so geklappt, wie ich wollte nur jetzt, bei Algorithmus macht er mir Probleme und ich schein irgendwie nicht mehr durchzuchecken. Hab mal meine ganzen Dateien hochgeladen, ihr findet sie hier:
http://www.***.de/N-Queen001.zip
Ich glaub ich hab mich tierisch bei den Ponitern und den Übergaben verhaspelt.Bin über jede Hilfe/Hinweis dankbar!
Danke für eure Mühe!
-
Ich glaub das die wenigsten sich jetzt die Mühe machen werden deine ZIP datei runterzuladen und jede Datei nach fehler zu durchsuchen.
Wenn dir geholfen werden soll, dann poste hier das stück Code mit genauer fehlerbeschreibung etc. was dir Sorgen bereitet
grüße
-
Ok, danke für den TIpp, dann probier ich's eben so,
also das ist erstmal der Teil zur Berechnung.Diese Werte sind die Startwerte:
control.iSize = 8; control.cKeyboard = '0';
Und die eigentliche Funktion ruf ich so auf:
control.iSolutions = 0; control.iRow = 0; control.iBoard[0] = 0; calc(&control,'0');
#include "header.h" void calc(struct queen *control,char cKeyboard) { int i = 0; if ((*control).iRow == (*control).iSize) { (*control).iSolutions++; return; } for (i = 0; i < (*control).iSize; i++) { (*control).iBoard[(*control).iRow] = i; if (! isbeating(control)) { (*control).iRow++; calc(&control,'0'); } } }
Und das die Überprüfung
int isbeating (struct queen *control) { int i = 0; int temp = 0; for(i = 0; i < (*control).iRow; i++) { temp = (*control).iBoard[i] - (*control).iBoard[(*control).iRow]; if (temp == 0 || temp == i - (*control).iRow || temp == (*control).iRow - i) { return 1; } } return 0; }
Und jetzt gibts da anscheinend eine Endlosschleife oder auf jeden Fall stürzt das Programm gleich ab!
Hoffe, so ist es jetzt besser.Danke
-
Bei einer Endlosschleife stürzt das Programm ja nicht ab (außer der Speicher läuft voll natürlich), was sagt denn der Debugger an welcher Stelle er abstürzt?
-
Keine Ahnung wie das geht, ich hab das Projekt mal kompiliert und die Fehlersuche benutzt. Zeigt folgendes an:
In function 'calc':
[Warning] passing arg 1 of 'calc' from imcompatible pointer typeMeintest du das?
-
Und in welcher Zeile? Zufälligerweise Zeile 18? Dort ist nämlich der Adress-Operator überflüssig (control ist bereits ein "Zeiger auf queen", wenn du dessen Adresse bildest, bekommst du einen "Zeiger auf queen*").
-
Oh, das kann sein,
habs jetzt geändert in
calc(control,'0');
und jetzt gehts mehr oder weniger. Das Programm stürzt nicht ab aber ein Ergebnis liefert er mir nicht. Hab wohl noch nen logischen Fehler drin.
-
Hi, kleiner Tipp:
Wenn du Zeiger auf Strukturen verwendest und auf die Elemente zugreifst, dann benutz lieber den Pfeiloperator ( -> )! Ist viel Übersichtlicher find ich :-)!
Zum Beispiel:
Anstatt(*control).iRow
nimmst du einfach
control->iRow
Grüße
-
Cool, danke, werds gleich ändern!