"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

zwei gleiche Zahlen => Schleife verlassen (c++)

HeuJi 02.11.2003 - 12:22 834 8
Posts

HeuJi

OC Addicted
Avatar
Registered: Jul 2001
Location: Vienna
Posts: 7379
Code:
#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. :rolleyes:
Könnte mir jemand einen Denkansatz geben?

moidaschl

Vollzeit-Hackler
Avatar
Registered: Aug 2002
Location: 1210, ABK-D/L
Posts: 4029
/*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 :rolleyes:

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
Avatar
Registered: Jul 2001
Location: Vienna
Posts: 7379
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
Avatar
Registered: Oct 2001
Location: New New York
Posts: 2503
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
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
In schönem C++ würde man das z.B. so machen:

Code:
#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!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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
Avatar
Registered: Mar 2002
Location: On the inside
Posts: 324
Ich schätze, was du suchst ist:

Code:
#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
Avatar
Registered: Jul 2001
Location: Vienna
Posts: 7379
Zitat von M.I.P.S.
Ich schätze, was du suchst ist:

Code:
#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
Avatar
Registered: Mar 2002
Location: On the inside
Posts: 324
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 :rolleyes:
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz