Linerae Suche findet kein Ergebnis
-
Hallo zusammen,
habe eine Lineare Suche geschrieben, doch irgendwie findet Sie kein Ergebnis und meldet immer das das gesuchte Kriterium nicht vorhanden ist. Doch ich finde keinen Fehler.
Vielleicht seht ihr beim drüüberschauen etwas.
/*########################################### Lineare Suche ###########################################*/ #include<iostream> using namespace std; int main() { const int MAX = 100; int werte[MAX]; bool gefunden = false; int suchen = 0; int kriterium = 0; srand(time(NULL)); cout << "Lineare Suche" << endl; for (int index = 0; index < MAX; index++) { werte[index] = rand() % 200; } cout << "Die Werte sind: " << endl; for (int index = 0; index < MAX; index++) cout << werte[index] << ' '; cout << endl; cout << "Wonach soll gesucht werden? "; cin >> kriterium; while ((suchen <= MAX) && (gefunden == true)) { if (werte[suchen] == kriterium) gefunden = true; else suchen++; } if (gefunden == true) cout << "Der Wert " << kriterium << " befindet sich an der Position " << suchen + 1 << endl; else cout << "Der Wert " << kriterium << " wurde nicht gefunden. " << endl; return 0; }Das das Programm nach dem ersten Treffer abricht ist momentan noch gewollt, muss ich aber noch ändern, falls es mehrfach Treffer geben sollte.
Danke
-
Guck dir das Kriterium deiner while Schleife mal genau an und schreibe uns, unter welchen Bedingungen es erfüllt ist.
-
Schau dir mal die while-Schleife in Zeile 32 an.
-
Hi Leute,
super Sache, klar muss ja (gefunde == false) heißen
Dann kann ich jetzt das Ganze abändern das es alle Ergebnisse sucht und nicht nach einem Treffer abbricht.
Danke
-
Verwende boolsche Ausdrücke und operator!
== true und == false ist für Noobs.
-
Scriptlaie schrieb:
Dann kann ich jetzt das Ganze abändern das es alle Ergebnisse sucht und nicht nach einem Treffer abbricht.
Dann nimm eine for-Schleife und schreibe die Treffer in einen eigenen Array. So bricht die Kiste beim 1. Treffer ab.
Das ganze ist reines C, kein C++
-
So bricht die Kiste beim 1. Treffer ab.
Du meinst wohl das es dann nicht mehr abbricht nach dem 1. Treffer.
Habe es auch ein wenig versucht aber das will nicht klappen ich glaube ich steh auf dem Schlauch. Ich muss doch nur die bisherige if Schleife mit der Auswertung in eine for-Schleife abändern? Oder liege ich da so falsch????
-
Scriptlaie schrieb:
Habe es auch ein wenig versucht aber das will nicht klappen ich glaube ich steh auf dem Schlauch. Ich muss doch nur die bisherige if Schleife mit der Auswertung in eine for-Schleife abändern? Oder liege ich da so falsch????
Wenn du alle durchgehen willst, mach aus der while ne for-Schleife und pack die Ergebnisse in einen Array/vector.
Es ist übrigens eine If-Abfrage, keine If-Schleife..
-
stimmt es handelt sich um eine if anweisung.
aber wie bekomme ich dann eine Auswertung hin für die Ausgabe. Denn das was ich momentan verwende gefunden == true geht ja dann nicht mehr.
könnt ja dann irgendwie so aussehen:
for (suchen = 0; suchen <= MAX; suchen ++) { ergebnis = werte[suchen] == kriterium; Treffer[anzahl] = ergebnis; anzahl++; } if (Treffer[anzahl] == 0) cout << "Wert wurde nicht gefunden"; else cout << "Wert " << kriterium << " wurde gefunden und befindet sich an den Positionen" << Treffer[anzahl] +1;
-
for (suchen = 0; suchen <= MAX; suchen ++) { if (werte[suchen] == kriterium) anzahl++; }anzahl ist dann die Anzahl der Treffer
greetz KN4CK3R
-
ich bin mir gerade nicht ganz sicher, was du möchtest. Stimmt das so:
Du hast ein Array fixer Länge (warum eigentlich fix?). In diesem Array sind Zufallszahlen. Du möchtest jetzt alle Positionen einer bestimmten Zahl x finden.
In diesem Fall solltest du das folgendermaßen machen:
Iteriere über das Arry, wie in deinem Vorschlag. Vergleiche in jedem Durchlauf den aktuellen Wert mit deinem Vergleichswert x. Wenn die Werte gleich sind, speicherst du den Index in einem std::vector.
-

vector<int> positionen; for(int suchen=0; suchen<MAX; ++suchen) // NICHT <= { if( werte[suchen]==kriterium ) { positionen.push_back( suchen ); } } if( positionen.size()==0 ) { cout << "Wert wurde nicht gefunden."; } else { cout << "Wert " << kriterium << " wurde gefunden und befindet sich an den Positionen: "; for(int i=0; i<positionen.size(); ++i) { cout << positionen[i] << ", "; } }