Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Ganz leichtes Programm

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.04.2005, 11:24 Uhr
~Anfänger22
Gast


Hallo an jeden der sich die Mühe macht das durchzulesen!

Könnt ihr mir den Fehler im unten stehenden Programm nennen??

anzahl_ ist die Anzahl der Elemente in meinem Array array_

Die Zahlen werden eingelesen, dann sortiert (das funzt alles) und jetzt will ich
nach einer vom Anwender zu bestimmenden Zahl x in meinem Array suchen.

Was mache ich falsch?

Bitte wenn möglich einfache Tipps geben... stehe noch ziemlich am Anfang vom C++-Programmieren...
Danke für eure Mühe im voraus!


C++:
void sorted::suchen(int x)
{
        cout << "Bitte geben Sie die zu suchende Zahl ein" << endl;
        cin >> x;
        

        int first=0;
        int last=anzahl_-1;
        int mid;
            
        mid=(first+last)/2;
            
        if (array_[mid] != x)
        {
            mid = (first+last)/2;
                
                
            if (array_[mid] < x)                 //sucht nach oben
            {
                first = mid;
            }
            else if (array_[mid] > x)    //sucht nach unten
            {
                last = mid;
            }
            else if (first >= mid)    
            {
                         mid = (first+last)/2;
            }
            else
            {
            cout << "Die gesuchte Zahl ist nicht vorhanden!" << endl;
                                      }
        }
        else
        {
            cout << "Die gesuchte Zahl ist vorhanden!" << endl;
        }
            
    }


Dieser Post wurde am 28.04.2005 um 11:49 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.04.2005, 12:29 Uhr
doppler



Was mir erstmal auffällt ist, dass du nur einmal abfragst, ob array_[mid]!=x ist. Das sollte wohl in eine Schleife:

C++:
while (array_[mid] != x) {

}



Weiterhin wird mid nie verändert, weil das else if (first>=mid) nie betreten wird. Der Grund ist, dass du innerhalb von if (array_[mid]!=x) bist und die Fälle array_[mid]>x und array_[mid]<x schon behandelt hast. Da gibt es keine andere Möglichkeit mehr. Statt else if (first >= mid) sollte es also besser if (first >= mid) heißen.

Mir ist auch nicht klar, warum man überhaupt abfragen muss, ob first >= mid ist. Ich dachte, dass man mid immer aktualisiert.

Ansonsten gibt es für soetwas auch schon fertige Algorithmen in der STL (find() oder find_if()). Siehe z.B.
www.math.uni-wuppertal.de/~axel/skripte/oop/oop20_7.html

Dieser Post wurde am 28.04.2005 um 14:16 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.04.2005, 10:09 Uhr
~Anfänger
Gast


Merci Doppler,

hab das Problem nach einfügen und a bißerl ummodeln gelöst!

Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: