Array durchsurchen



  • Hallo. Habe eine Aufgabe in der Schule bekommen, die ich nach dem Lösungsvorschlag programmiert habe, den mein Lehrer mir gegeben hat:

    # include <iostream>
    using namespace std;
    
    void array_such(double[],double,double);
    int main(){
        double array[]={4,56,34,23,56,12,17,11,4,4};
        double suchzahl, groesse;    
        cout << "Bitte geben Sie die zu suchende Zahl ein: ";
        cin >> suchzahl;
        groesse = sizeof(array)/sizeof(array[0]);
    
        array_such(array,groesse,suchzahl);
    
        cin.get();
        cin.get();
    
        return(0);
    }
    
    void array_such(double array[],double groesse,double suchzahl)
    {
         int z;
         for(z=0;z<groesse && array[z]!=suchzahl;z++)
         {
             if(z==groesse)
                cout << "Leider nichts gefunden!";    
             else 
                cout << z;
         }
    }
    

    Jedoch tut es leider nicht das was es soll 😕 Kann mir vielleicht jemand bei meinem Problem helfen??

    Die Aufgabenstellung:
    Schreiben Sie eine Funktion
    void array_such( ??????)

    Die Funktion hat die Aufgabe, ein übergebenes double-Array nach einem ebenfalls übergebenen double-Wert zu durchsuchen.

    Wird die Suchzahl gefunden, soll am Bildschirm die Meldung erscheinen:
    Suchzahl xxx an Pos yyy gefunden.

    Weiter suchen (j/n)
    Die vg. Aufforderung ((j/n) soll unterbleiben, wenn die Suchzahl im letzten Element gefunden wird (Frage ist dann sinnlos)

    Wird das Element nicht gefunden, soll am Ende des Programms die Meldung
    Suchzahl xxx nicht gefunden.

    Ansonsten soll die Meldung erscheinen
    Suchzahl xxx wurde yyy mal gefunden.

    Schreiben Sie ein Hauptprogramm mit folgenden Zahlen im Array
    4 56 34 23 56 12 17 11 4 4

    Und rufen Sie aus diesem die o. a. Funktion auf.



  • if(z==groesse)
        cout << "Leider nichts gefunden!";    
    else
        cout << z;
    

    der if muss hinter der schleife sein...



  • Für das weitersuchen würd ich ein goto verwenden und in die schleife springen. Weiß nicht was dein lehrer davon hält, ist eigentlich kein so toller programmierstiel

    Das beispiel sieht aber schon ganz gut aus.
    Wenn er beim arrayende aufhören soll musst du einfach überprüfen ob der das Zeichen am ende im array steht das dürfte nicht schwer sein

    Ich denke das waren ein paar gute anregungen. Den Rest schaffst du acuh selbst

    Übung macht den meister. Das ist schleißlich der sinn von Hausaufgaben



  • Hoffe das hilft, wie gesagt nur kopieren bringt nichts, aber es ist relativ einfach da kann man nicht viel erklären.

    void array_such(double *array, int groesse, double suchzahl) // für groesse nur int oder noch besser size_t, aber int reicht mal
    {
         // Die deklaration besser hinein und erst mal jedes Element durchgehen. Abbrechen kann man die Schleife immer noch.
         for(int z=0; z < groesse; z++)
         {
             // wenn die richtige zahl ausgeben
             if(array[z] == suchzahl) 
             {
                 cout << "was auch immer... noch mal?";
                 // nun fragen ob man weiter suchen will
                 char eingabe;
                 cin >> eingabe;
                 if(eingabe == 'j' || eingabe == 'J') continue; // schleife neu durchlaufen
                 else return; // ansonsten funktion verlassen  
             } 
         }
    }
    

    Gruß



  • Man kann (oder auf jeden Fall sollte man nicht) double-Variablen mit == vergleichen, weil durch die interne Speicherung im Binärsystem Rundungsfehler entstehen.

    Was noch als Möglichkeit bleibt ist so in etwa:

    const double Precision = 0.001;
    double Wert1 = 1.0;
    double Wert2;
    cin >> Wert2;
    if((Wert1 - Precision < Wert2) && (Wert1 + Precision > Wert2))
    {
        //Sie sind gleich
    }
    else
    {
        //Sie sind nicht gleich
    }
    

    Wer mir nicht glaubt, kanns ja mal probieren 😃

    PhoemueX



  • mh.. ich würd noch nen paar sachen verändern..nur so als schönheitskorrektur 😉

    1. würd ich das array per referenz übergeben, da sich das mit dem pointer als kompliziert rausstellen könnte
    3. fehlt ja noch die abfrage ob das an letzter stelle steht
    4. fehlt auch noch die zählvarriable anzahl

    void array_such(double& array, int groesse, double suchzahl) // für groesse nur int oder noch besser size_t, aber int reicht mal
    {
         // Die deklaration besser hinein und erst mal jedes Element durchgehen. Abbrechen kann man die Schleife immer noch.
         int anzahl = 0; //zählvarriable
         char eingabe; //besser hierhin, da sonst immer neu deklariert
         for(int z=0; z < groesse; z++)
         {
             // wenn die richtige zahl ausgeben
             if(array[z] == suchzahl)
             {
                 cout << "Suchzahl "<< suchzahl <<" an Pos "<< z <<" gefunden\n";
                 ++anzahl;
                 // nun fragen ob man weiter suchen will, aber nur wenn z != groesse-1
                 if (z != (groesse-1))
                 {
                    cout << "Weiter suchen?? (j/n)";
                    cin >> eingabe;
                    cout << "\n";
                    if(eingabe != 'j' || eingabe != 'J') break; // nur wenn nicht j oder J eingegeben for-schleife abbrechen..
                 }
             }
         }
         if (anzahl != 0)
             cout << "Suchzahl "<<suchzahl <<" wurde "<< anzahl <<" mal gefunden\n";
         else
            cout << "Suchzahl "<< suchzahl <<" nicht gefunden\n";
    }
    


  • mist.. muss natürlich heißen

    if ( eingabe =! 'j')
    

    oder

    if(eingabe == 'j' || eingabe == 'J') continue; // schleife neu durchlaufen
    else break;
    

    da er sonst definiotiv abbricht


Anmelden zum Antworten