Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Informatik in der Schule » C++ » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (4): « vorherige 1 2 [3] 4 nächste » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen C++
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
info
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Diese Zeile wirkt auf mich irgendwie komisch:
for(int i = 0; i < n-1; i++)
{
for(int j = 0; j < n-1; j++)
{

Warum ist da einmal j und einmal i ???
18.03.2013 13:12
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das hängt mit der Funktionsweise des Bubblesort zusammen:
In einem Durchgang wird eine Zahl immer nur mit einem Nachbarn vertauscht:
Bsp.:
Zahlen sind 1, 4, 3, 2 -> geordnet: 1, 2, 3, 4.
Aber der Algorthmus schiebt die 4 nicht direkt ans Ende, weil immer nur mit den Nachbarn vergleichen wird:
1 < 4, es wird also nicht getauscht
4 > 3 -> tauschen: 1, 3, 4, 2
4 > 2 -> tauschen: 1, 3, 2, 4

so sieht die Zahlenfolge nach einem Durchlauf aus, es muss nochmal sortiert werden. Dafür die äußere Schleife.

Zitat:
Warum ist da einmal j und einmal i

Die Frage ist vorallem: WO i und WO j?
Da habe ich nämlich auch einen Fehler eingebaut.

__________________
Syntax Highlighting fürs Board (Link)
18.03.2013 15:58 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
info
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Stimmts so?

[ code]
#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
int n;
int zahl[5];
cout << "Anzahl der einzulesenden Elemente: ";
cin >> n;
if (n > 5)//Plausibilitaetskontrolle
{
cout << "Es sind nicht genug Elemente verfügbar" << endl;
}
else
{
cout<<"Elemente eingeben\n";
for (int i = 0; i < n; i++)//Eingabe der Arrayelemente
{
cout << i+1 << ". Zahl: ";
cin >> zahl[i];
}

//Bubblesort
//größtes nach oben
for(int i = 0; j < n-1; j++)
{
for(int i = 0; i < n-1; i++)
{
if(zahl[i] > zahl[i+1])
{//tauschen
int tmp = zahl[i];
zahl[i] = zahl[i+1];
zahl[i+1] = tmp;
}
}
}
cout << "\nsortiert:" << endl;
for(int i = 0; i < n; i++)
{
cout << zahl[i]<< endl;
}
}
system("PAUSE");
return 0;
} [ /code]
18.03.2013 17:49
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen



code:
1:
2:
3:
4:
5:
g++ narf.c 
narf.c: In Funktion »int main()«:
narf.c:28:18: Fehler: »j« wurde in diesem Gültigkeitsbereich nicht definiert


Editg: Schau dir die äußere Schleife noch einmal an!
18.03.2013 18:02 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
info
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Oh nein jetzt habe ich auch keine Ahnung .

Was mache ich jetzt?
18.03.2013 22:08
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Schau dir die Zeile 28 noch mal genau an. Was stimmt da nicht? Danach stimmt glaube alles (habe nicht komplett getestet und nachvollzogen)

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
	int n;
	int zahl[5];
	cout << "Anzahl der einzulesenden Elemente: ";
	cin >> n;
	if (n > 5)//Plausibilitaetskontrolle
	{
		cout << "Es sind nicht genug Elemente verfügbar" << endl;
	}
	else
	{
		cout<<"Elemente eingeben\n";
		for (int i = 0; i < n; i++)//Eingabe der Arrayelemente
		{
			cout << i+1 << ". Zahl: ";
			cin >> zahl[i];
		}

		//Bubblesort
		//größtes nach oben
		for(int i = 0; j < n-1; j++)
		{
			for(int i = 0; i < n-1; i++)
			{
				if(zahl[i] > zahl[i+1])
				{//tauschen
					int tmp = zahl[i];
					zahl[i] = zahl[i+1];
					zahl[i+1] = tmp;
				}
			}
		}
		cout << "\nsortiert:" << endl;
		for(int i = 0; i < n; i++)
		{
			cout << zahl[i]<< endl;
		}
	}
	system("PAUSE");
	return 0;
}
18.03.2013 22:51 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
info
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

In zeile 28 müsste das stehen oder:

for(int i = 0; i < n-1; i++)

Richtig?
20.03.2013 22:37
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Du sollst hier nicht wild drauflosraten, sondern logisch überlegen und das Resultat dieser Überlegungen testen, statt hier zu fragen - dann musst du auch keine 17 Stunden auf eine Antwort warten.

Nein, das ist so nicht richtig.
Bei dem, was Karlito dir zusammengefasst hat, musst du nur noch einen Buchstaben ändern.

__________________
Syntax Highlighting fürs Board (Link)
21.03.2013 15:56 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
info
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Äh int j = 0. oder?
21.03.2013 20:24
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Aus dem Fragezeichen schließe ich, dass du das Programm wieder nicht getestet hast.
Aber ja, so funktioniert es.

Was müsstest du ändern, damit genau anders herum sortiert wird, also die größte Zahl zuerst?

__________________
Syntax Highlighting fürs Board (Link)
22.03.2013 06:57 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
info
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ok auf zum letzten Teil der Aufgabe:

2) Es ist ein Programm zu erstellen, in welchem genau drei Zahlen in drei Variable (z.B. a,b,c)
eingelesen werden. Diese drei Werte sollen so in drei neue Variable (z.B. x,y,z) umgespeichert
werden, dass diese sortiert sind. Für die neuen Variablem muss also gelten: x<=y<=z .
Danach sind diese drei Zahlen sortiert auszugeben.
Dieses Programm ist damit ein Spezialfall der Aufgabe aus 1).
Achten Sie in dem Programm auf
ausreichend Kommentare
einrücken bei den Abfragen
gefällige Ausgabe unter Verwendung von Manipulatoren.

Es ist ein Programm zu erstellen, in welchem genau drei Zahlen in drei Variable (z.B. a,b,c)
eingelesen werden. Diese drei Werte sollen so in drei neue Variable (z.B. x,y,z) umgespeichert



Kann man das nicht so machen:

int a;

int b;

int c;


int a = x;

int b = y;

int c = z ;

Würde das umspeichern so gehen ?
25.03.2013 18:18
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Mein Compiler sagt: der Bezeichner "x" ist nicht definiert.
Das ist auch nicht verwunderlich, es müsst schließlich heißen int x=a;

Sortiert ist damit aber immer noch nichts.
Wenn in der Variablen x der kleinste Wert stehen soll, geht das am einfachsten mit
int x = min(a, min(b, c)); //davor #include <cmath>

__________________
Syntax Highlighting fürs Board (Link)
25.03.2013 20:09 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
info
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

OK dann mache ich das wohl so oder:

int x = a;

int y = b;

int z = c;


Kann ich nicht zum sortieren auch die if schleife benutzen oder while?
26.03.2013 08:29
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,

du kannst testen ob das richtig ist, indem du zuerst a, b und c einliest und nachdem du umgespeichert hast, x y und z ausgibst. Die Sortierung würde ich mit If-Abfragen realisieren. Es gibt keine if-schleifen!

VG,

Karlito
26.03.2013 08:58 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Falls Du keine Lust hast ist hier ein Programm, was die Aufgabe löst:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char **argv){
	int r = 0;
	int a, b, c, x, y, z;

	cout << "Bitte Zahlen eingeben!" << endl;
	cout << "Zahl 1: ";
	cin >> a;
	cout << "Zahl 2: ";
	cin >> b;
	cout << "Zahl 3: ";
	cin >> c;

	r = (a<b)<<2|(a<c)<<1|(b<c);

	x = ((r==0x7)|(r==0x6))*a|((r==0x3)|(r==0x1))*b|((r==0x4)|(r==0x0))*c;
	y = ((r==0x3)|(r==0x4))*a|((r==0x7)|(r==0x0))*b|((r==0x6)|(r==0x1))*c;
	z = ((r==0x1)|(r==0x0))*a|((r==0x6)|(r==0x4))*b|((r==0x7)|(r==0x3))*c;

	cout << x << "," << y << "," << z << endl;

}


VG,

Karlito
26.03.2013 13:30 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Seiten (4): « vorherige 1 2 [3] 4 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Informatik in der Schule » C++