zwei gleiche Zahlen => Schleife verlassen (c++)
HeuJi 02.11.2003 - 12:22 834 8
HeuJi
OC Addicted
|
#include <iostream.h>
int main()
{
int nr[90];
int i, j;
do{
for(j=0, i=0; j<=90; j++)
{
cin>>nr[j];
cin>>nr[i];
}
}while(nr[j]!=nr[i]);
}
Es werden beliebig viele Zahlen (in diesem Fall 90) in Arrays gespeichert. Also ich schaff's irgendwie ned, wenn zwei gleiche Zahlen vorkommen, egal in welcher Reihenfolge, soll die Schleife verlassen werden, aber es funkt nicht. z.B: 123 3332 2111 123 nr bereits vorhanden. Bitte ned schimpfen, bin noch blutiger Programmieranfänger. Könnte mir jemand einen Denkansatz geben?
|
moidaschl
Vollzeit-Hackler
|
/*laut deiner angabe hast du ja nur ein array geschaffen und bei cin>> belegst du ja nur eine andre stelle im array ! des muss so ausschaun nr_1[90] nr_2[90] weist was ich mein? und bei der eingabe machst hald dann einfach if nr_1[i] == nr_2[i] break; des is eigentlich ganz falsch. des j kanst dir dann eigentlich schenken!*/ ausgeklammert edit: asoo du willst ja nur ein array vergleichen .. edit2: machs einfach so: hau nach der eingabe einer zahl eine for schleife rein, wo checked wird wo die eingegebene verglichen wird mit allen zahlen ( also for die hald raufzählt) und wenn true dann break;
Bearbeitet von moidaschl am 02.11.2003, 12:29
|
HeuJi
OC Addicted
|
Naja ich weiss nicht... Hab jetz herausgefunden dass das mit dem Arrayvergleich keine gute Idee ist.... Was wenn in demselben Array 2 gleiche Zahlen eingetragen werden? Das wär irgendwie nicht gut. Kommt man also mit einem Array aus?
|
Frys_Assassin
information keeper
|
also, so wie ich die aufgabenstellung verstanden hab brauchst du eh nur 1 array wo du in der for schleife eine zahl einträgst. unklar is mir jedoch warum du in der schleife eine variable i hast die immer 0 bleibt. nimm die raus, und bau in der schleife eine 2te forschleife ein die halt das array vom anfang bis zur aktuellen position durchgeht und überprüft. dann mach die halt noch eine check variable die du 1 setzt wenn du was gleiches gefunden hast und dann in der "obersten" schleife ein "if (check) break;"
|
Ringding
Pilot
|
In schönem C++ würde man das z.B. so machen: #include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> schonda;
int nr[90];
for (int i=0; i<90; i++) {
cin >> nr[i];
if (schonda.find(nr[i]) != schonda.end())
break;
schonda.insert(nr[i]);
}
return 0;
}
Hilft dir vielleicht jetzt nicht viel weiter, aber es zeigt, wie einfach manche Dinge in C++ zu erreichen sind.
|
atrox
in fairy dust... I trust!
|
wenn ich nicht die reihenfolge der eingabe brauche, sondern nur die zahlen selber, dann kann ich ja mit dem std::set alleine arbeiten.
|
M.I.P.S.
Big d00d
|
Ich schätze, was du suchst ist: #include <iostream.h>
int main()
{
int nr[90];
for (int i = 0; i < 90; i++)
{
cin>>nr[i];
for (int j = 0; j < i; j++)
{
if (nr[i] == nr[j])
{
return 0;
//oder mach sonstwas
}
}
}
}
Bearbeitet von M.I.P.S. am 06.11.2003, 14:54
|
HeuJi
OC Addicted
|
Ich schätze, was du suchst ist:
#include <iostream.h>
int main()
{
int nr[90];
for (int i = 0; i <= 90; i++)
{
cin>>nr[i];
for (int j = 0; j < i; j++)
{
if (nr[i] == nr[j])
{
return 0;
//oder mach sonstwas
}
}
}
}
Jo herzlichen Dank! Sagtmal, wie kommt man auf solche Schleifen? Wenn man sie nachvollziehen kann ist es zwar logisch, aber die Schwierigkeit liegt eben beim Draufkommen. @ringding Ich hab deinen Code gar nicht verstanden, stoffmäßig (set, insert?) sind wir auch noch nicht so weit.
|
M.I.P.S.
Big d00d
|
Eigentlich kommt man recht einfach drauf (k, wenn mans kann ist alles trivial daher üben, üben, üben ): Wenn du eine Sache immer wieder machst => Schleife Also: Du willst bis zu 90 Zahlen einlesen => Schleife mit Einlesefunktion und Zähler i damit im i-ten Arrayplatz der Wert gespeichert wird. Du willst vergleichen, ob der Wert schon da war => Schleife, die vom 0-ten bis zum aktuellen (i-ten) Wert läuft und vergleicht. Versuch die Aufgabe immer in kleinere Aufgabenbereiche aufzuteilen anstatt das Problem auf einmal als ganzes zu lösen. Den Fehler macht man als Anfänger oft. P.S.: Oops, hab nen Fehler drin. Es muß i < 90 heißen sonst kriegt man das C++ Äquivalent zu einer ArrayIndexOutOfBoundsException
|