Lineare Suche gibt nur einen Treffer aus - auch wenn der ...
-
Vielleicht das else in Zeile 6 weglassen.
-
nwp3 schrieb:
Vielleicht das else in Zeile 6 weglassen.
Hallo nwp3,
habe ich schon probiert, der compiler sagt nichts, aber das Programm wird nicht richtig ausgegeben..oder bleibt ohne reaktion.. no
...
-
suchen muss in jedem Fall inkrementiert werden, auch wenn etwas gefunden wurde.
-
#include <iostream> #include <ctime> using namespace std; int main() { //die maximale Anzahl der Werte const int MAX = 100; //ein Feld für die Werte int werte[MAX]; //wurde schon ein Wert gefunden? bool gefunden = false; //für die Suche int suchen = 0; int kriterium = 0; //den Zufallsgenerator initialisieren srand(time(NULL)); cout << "Lineare Suche" << endl; //die Werte setzen, benutzt werden zufällige Zahlen bis 200 for (int index = 0; index < MAX; index++) { werte[index] = rand() % 200; } //zur Kontrolle ausgeben cout << "Die Werte sind: " << endl; for (int index = 0; index < MAX; index++) cout << werte[index] << ' '; cout << endl; //Abfrage des Suchkriteriums cout << "Wonach soll gesucht werden? "; cin >> kriterium; //und jetzt suchen, bis das Ende erreicht wurde oder die Zahl gefunden wird for (int index = 0; index < MAX; index++) { if (werte[index] == kriterium) { cout << "Der Wert " << kriterium << " befindet sich an der Position " << index + 1 << endl; gefunden = true; } } if (gefunden != true) cout << "Der Wert " << kriterium << " wurde nicht gefunden. " << endl; return 0; }
-
Off-Topic: Es wäre um einiges angenehmer, wenn du bei deinem Code unnötige Leerzeilen herauslöschen würdest. Ist viel besser.
Beim vorherigen Lösungsvorschlag müsste
suchennoch inkrementiert werden, sonst wird die Variable umsonst deklariert.
-
#include <iostream> #include <ctime> // Hast du vergessen, einzubinden using namespace std; int main() { srand(time(NULL)); // Macht man ganz am Anfang. const int MAX = 100; int werte[MAX]; cout << "Lineare Suche" << endl; for (int index = 0; index < MAX; index++) { werte[index] = rand() % 200; // Liefert Werte von 0 bis 199. } cout << "Die Werte sind: " << endl; for (int index = 0; index < MAX; index++) { cout << index << " == " << werte[index] << endl; } cout << endl; int kriterium = 0; cout << "Wonach soll gesucht werden? "; cin >> kriterium; // kriterium brauchst du doch erst hier. Was hat die Definition da ganz oben verloren? int suchen = 0; bool gefunden = false; while( suchen < MAX && !gefunden) // <= ist falsch. false==false oder true==true ist auch doppelt gemoppelt. { if (werte[suchen++] == kriterium) gefunden = true; } if(gefunden) cout << "Der Wert " << kriterium << " befindet sich an der Position " << suchen-1 << endl; // NIcht +1 sondern -1. else cout << "Der Wert " << kriterium << " wurde nicht gefunden. " << endl; // return 0 darfst du in der main (nur in der main) weglasse, da es automatisch gemacht wird. }
-
Auch das klappt nicht so gut, leider Zeigt das Programm nur einmal den Wert obwohl er mehrmals / zweimal auftaucht..

Lineare Suche
Die Werte sind:
0 == 87
1 == 193
2 == 193
3 == 160
4 == 11
5 == 179
6 == 116
7 == 194
8 == 35
9 == 143
10 == 86
11 == 2
12 == 46
13 == 125
14 == 58
15 == 131
16 == 5
17 == 178
18 == 106
19 == 26
20 == 156
21 == 181
22 == 174
23 == 21
24 == 45
25 == 44
26 == 195
27 == 100
28 == 70
29 == 179
30 == 88
31 == 143
32 == 129
33 == 181
34 == 30
35 == 57
36 == 70
37 == 37
38 == 150
39 == 107
40 == 108
41 == 159
42 == 103
43 == 148
44 == 13
45 == 187
46 == 32
47 == 40
48 == 59
49 == 58
50 == 27
51 == 62
52 == 13
53 == 188
54 == 66
55 == 182
56 == 167
57 == 33
58 == 102
59 == 130
60 == 17
61 == 158
62 == 46
63 == 29
64 == 70
65 == 51
66 == 37
67 == 66
68 == 175
69 == 130
70 == 15
71 == 150
72 == 89
73 == 179
74 == 85
75 == 72
76 == 53
77 == 134
78 == 23
79 == 24
80 == 103
81 == 184
82 == 50
83 == 198
84 == 17
85 == 41
86 == 114
87 == 180
88 == 41
89 == 109
90 == 186
91 == 143
92 == 8
93 == 51
94 == 1
95 == 98
96 == 140
97 == 162
98 == 55
99 == 131Wonach soll gesucht werden? 41
Der Wert 41 befindet sich an der Position 85Process returned 0 (0x0) execution time : 6.170 s
Press any key to continue.
-
anakhha schrieb:
Auch das klappt nicht so gut, leider Zeigt das Programm nur einmal den Wert obwohl er mehrmals / zweimal auftaucht..

Worauf bezieht sich denn "auch das"? Der Code von out ist bloß eine Korrektur deines Originalcodes und du musst schon noch selber einbauen, dass mehrere Werte gesucht werden. Lies dir mal die anderen Antworten hier im thread gründlich durch und versuch die verschiedenen Beispielcodes nachzuvollziehen.
-
Der Code von jkljkljkl macht das, was du willst. In den anderen Code-Beispielen (einschließlich deinem) wird in der Schleifenbedingung noch die Variable "gefunden" überprüft und daher die Schleife abgebrochen, sobald der Wert gefunden wurde. Und statt <= muss es < heißen, wie schon erwähnt wurde.
edit: Das == true kann man sich auch sparen, wie schon gesagt wurde, aber vor allem würde ich dir raten, die Variablen erst dann zu deklarieren, wenn du sie brauchst, das macht den Code wesentlich lesbarer.
-
Wer lesen kann, ist klar im Vorteil..

Extra Danke für alle und natürlich Danke auch an jkljkljkl
