ERLEDIGT
NEIN
NEIN
ANTWORTEN
0
0
ZUGRIFFE
630
630
EMPFEHLEN
-
Hallo!
Ich habe ein weiteres Problem bei meinem Programm.
Bisher kann ich mit dem Programm Filme anlegen, einzelne Filme löschen, alle Filme löschen und alle Filme speichern. Jetzt würde ich gerne durch eine binäre Suche, einzelne Filme in der Liste durch eine Suchfunktion, die bei mir Test erstmal heißt, finden lassen.
Die Funktion sieht folgender Maßen aus:
"Binäre Suche" 1:
test1(), die ich gerne nutzen würde, wird der Zeiger mid nur bei einer ungeraden Zahl an Listenelementen richtig berechnet, also ein Filmtitel angezeigt, und die Filme auch gefunden. Doch bei einer geraden zahl wird mir nicht mehr der Filmtitel angezeigt, sondern was zwischen den Beiden Filmen 2 und 3 ,wenn es 4Filme sind, angezeigt. Das war bei mir dann das Filmstudio des Filmes.
Code c:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
void test1(char *title, struct movie *start, struct movie *end){ struct movie *mid; if(!(strcmp(start->title, end->title) > 0)){ mid = (start + ((end -start) >> 1)); printf("Start->Title: %s, End->Title: %s\n", start->title, end->title); printf("Mid->Title: %s\n", mid->title); if(strcmp(title, mid->title) == 0) { printf("Film \"%s\" gefunden\n", mid->title); } else if(strcmp(title, mid->title) < 0) { end = mid->previous; test1(title, start, end); } else{ start = mid->next; test1(title, start, end); } } }
"Binäre Suche" 2:
Was mich nur an dieser Funktion test2() nervt, ist die Tatsache, dass der Zeiger mid immer wieder am Anfang startet und die ganze Liste durchläuft. Doch das ist die einzige Funktion bei der alle Filme gefunden werden. Ich habe auch schon probiert diese Funktion so zu ändern, dass mid dort startet wo der Zeiger stehengeblieben ist, doch dann wird durch left und right nicht die gesamte Liste durchsucht, da left zu früh kleiner right wird oder gleich 0.
Code c:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
void test2(char *title, int left, int right) { struct movie *mid; int i, middle; if( left < right) { mid = start; middle = (left+right) / 2; for(i = 0; i < middle; i++) mid = mid->next; printf("Mid->Title: %s\n", mid->title); if(strcmp(title, mid->title) == 0) printf("Film \"%s\" gefunden\n", mid->title); else if(strcmp(title, mid->title) < 0) { right = middle-1; test2(title, left, right); } else { left = middle+1; test2(title, left, right); } } else printf("Film wurde nicht gefunden!!\n\n"); }
Ich habe schon sehr viel rumprobiert, aber ich weiß nicht mehr weiter. Ich würde mich freuen, wenn mir jemand bei meinem Problem helfen könnte, denn ich möchte gerne diese Suchfunktion auch zum Einsetzen neuer Filme später nutzen, sofern das möglich ist.
Hier ist nochmal das Programm zum runterladen
------->>>>>>>Programm<<<<<<<<<<------------Geändert von xbugsx (20.11.07 um 17:07 Uhr) Grund: falsche url
Ähnliche Themen
-
Element in einer Liste abspeichern schlägt fehl
Von Cherrycoke im Forum C/C++Antworten: 11Letzter Beitrag: 25.02.10, 14:07 -
insert schlägt fehl
Von hikeda_ya im Forum PHPAntworten: 4Letzter Beitrag: 11.09.06, 15:03 -
SCardEstablishContext(..) schlägt fehl
Von apotechnik im Forum VisualStudio & MFCAntworten: 1Letzter Beitrag: 19.08.05, 11:02 -
Datenbankanbindung (mdb) schlägt fehl
Von totgereggt im Forum .NET ArchivAntworten: 1Letzter Beitrag: 15.07.04, 10:30 -
Netzwerkzugriff schlägt fehl
Von Dennis-S. im Forum Microsoft WindowsAntworten: 1Letzter Beitrag: 15.08.03, 22:37





Zitieren
Login





