C++ |
info unregistriert
|
|
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 |
|
|
|
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 |
|
|
info unregistriert
|
|
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
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
Nö
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 |
|
|
info unregistriert
|
|
Oh nein jetzt habe ich auch keine Ahnung .
Was mache ich jetzt?
|
|
18.03.2013 22:08 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
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 |
|
|
info unregistriert
|
|
In zeile 28 müsste das stehen oder:
for(int i = 0; i < n-1; i++)
Richtig?
|
|
20.03.2013 22:37 |
|
|
|
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 |
|
|
info unregistriert
|
|
|
21.03.2013 20:24 |
|
|
|
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 |
|
|
info unregistriert
|
|
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 |
|
|
|
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 |
|
|
info unregistriert
|
|
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
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
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
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
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 |
|
|
|