tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
0
ZUGRIFFE
630
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    xbugsx xbugsx ist offline Mitglied
    Registriert seit
    Mar 2004
    Beiträge
    11
    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

  1. Element in einer Liste abspeichern schlägt fehl
    Von Cherrycoke im Forum C/C++
    Antworten: 11
    Letzter Beitrag: 25.02.10, 14:07
  2. insert schlägt fehl
    Von hikeda_ya im Forum PHP
    Antworten: 4
    Letzter Beitrag: 11.09.06, 15:03
  3. SCardEstablishContext(..) schlägt fehl
    Von apotechnik im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 19.08.05, 11:02
  4. Datenbankanbindung (mdb) schlägt fehl
    Von totgereggt im Forum .NET Archiv
    Antworten: 1
    Letzter Beitrag: 15.07.04, 10:30
  5. Netzwerkzugriff schlägt fehl
    Von Dennis-S. im Forum Microsoft Windows
    Antworten: 1
    Letzter Beitrag: 15.08.03, 22:37