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 4Und 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 seinIch 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 anzahlvoid 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