C++

Neue Frage »

Auf diesen Beitrag antworten »
info C++

Meine Frage:
Hallo leute ich bin im moment wieder beim üben von informatik und brauche paar tips von euch:

1) Erstellen Sie einen Testplan für ein Programm (bzw. Funktion), zur Lösung folgender Aufgabe :
Es sind mehrere Zahlen einzulesen und sortiert auszugeben ( nicht nur 3 wie in Teil 2).
Die Anzahl der Zahlen wird vom Anwender vorgegeben.
Fehlerhafte Eingaben müssen nicht geplant werden.
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.


Kann mir jemand erklären wie ich die Zahlen sortieren kann?

Meine Ideen:
keine
 
Auf diesen Beitrag antworten »
eulerscheZahl

Der primitivste Sortieralgorithmus ist Bubblesort: du vergleichst zwei Elemente und vertauscht sie gegebenenfalls, genauer erklärt in der wikipedia.
Nachteil: vor allem bei größeren Listen langsam, Laufzeit steig quadratisch mit der Größe.

Alternative ist der quicksort, in C qsort genannt. Codebeispiel hier.
Auf diesen Beitrag antworten »
info

Hallo leute mein programm sieht so aus:

#include <iostream>
#include <stdlib.h>
using namespace std;

int Zahl[] = { 5, 8 , 10 , 12 , 14 ,20 };
int compare (const void * a, const void * b)

{
return ( *(int*)a - *(int*)b );
}

int main() {
std::cout << " Geben sie beliebige Zahlen ein !" << std::endl;






return 0;
}

Ich hab mir die seite durchgelesen aber verstehe da was nicht.

Was passiert hiermit?

int compare (const void * a, const void * b)
Werden hiermit nur zwei variablem vertauscht oder mehrere ?

Das verstehe ich überhaupt nicht.
Auf diesen Beitrag antworten »
Karlito

Zitat:
Original von info
Was passiert hiermit?


Es wird nur die Ausgabe " Geben sie beliebige Zahlen ein !" erzeugt.

Zitat:
Original von info
int compare (const void * a, const void * b)
Werden hiermit nur zwei variablem vertauscht oder mehrere ?


Es wird gar nichts vertauscht. Compare heißt vergleichen und nicht tauschen!

Die Funktion nimmt 2 Zeiger auf Integer-Werte entgegen und gibt die Differenz zwischen den beiden Zahlen, auf die gezeigt wird zurück. Vergleich heißt das deswegen, weil man im folgenden nur noch den Rückgabewert auf 2 oder 3 Fälle prüfen muss:
- Ist der Rückgabewert negativ, so ist a < b
- Ist der Rückgabewert 0, so ist a==b
- Ist der Rückgabewert positiv, so ist a > b

Bei Sortierungen interessiert meist nur, ob eine Zahl größer oder kleiner als eine Andere ist. Somit würde Beispielhaft folgendes reichen:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
int *x, *y;

//sensible code

if(compare(x,y)<0){
 swap(x,y);
}


Damit würde x und y getauscht, wenn der Wert an der Adresse von Zeiger x kleiner ist als der Wert an der Adresse von Zeiger y ist...

VG,

Karlito
 
Auf diesen Beitrag antworten »
info

Ich will ja in meinem Programm mehrere Zahlen sortieren , müsste dann der Anfang so aussehen ?

#include <iostream>
#include <stdlib.h>
using namespace std;

int Zahl[6];



int main() {

int a;
int b;
int c;
int d;
int e;

std::cout<< " Geben sie beliebige Zahlen ein1" << std::endl;
cin>> a >> b >> c >> d >> e;

int *a, *b, *c, *d, *e;







return 0;
}

Oder müsste ichnur das schreiben z.B

int *a, *b;

Weil das ist mir noch nicht ganz klar.
Auf diesen Beitrag antworten »
Karlito

Hallo,

Einlesen von Zahlen:
- Vorlesungsfolien Kapitel 4 Folie 36

Verwendung von Arrays:
- Vorlesungsfolien Kapitel 5

Einlesen von Zahlen in ein Array:
- Vorlesungsfolien Kapitel 8 Folie 28 (cin >> ptr_a[i])

Ich fühl mich ein wenig veräppelt...

VG,

Karlito
Auf diesen Beitrag antworten »
info

Welche vorlesungsfolien meinst du?
Auf diesen Beitrag antworten »
Karlito

Die, die man erhält, wenn man nach der Aufgabenstellung googelt...

Vorlesung Infromatik für EIT von Dr. Spangler an der Hochschule Darmstadt Wintersemester 2012/13.

VG,

Karlito
Auf diesen Beitrag antworten »
info

Zitat:
Original von info
Ich will ja in meinem Programm mehrere Zahlen sortieren , müsste dann der Anfang so aussehen ?

#include <iostream>
#include <stdlib.h>
using namespace std;

int Zahl[6];



int main() {

int a;
int b;
int c;
int d;
int e;

std::cout<< " Geben sie beliebige Zahlen ein1" << std::endl;
cin>> a >> b >> c >> d >> e;

int *a, *b, *c, *d, *e;







return 0;
}

Oder müsste ichnur das schreiben z.B

int *a, *b;

Weil das ist mir noch nicht ganz klar.


Aber kannst du trotzdem wenigstens noch meine frage beantworten ?
Auf diesen Beitrag antworten »
Karlito

Ich muss ehrlich gestehen, dass mir dafür ein wenig die Geduld fehlt. Offensichtlich hast Du aus den vorrangegangenen Threads nicht viel mitgenommen.

Beispiele: Die Deklaration
code:
1:
2:
3:
4:
5:
6:
7:
int a;
int b;
int c;
int d;
int e;
ist evtl soweit OK. Die erneute Deklaration
code:
1:
2:
3:
int *a, *b, *c, *d, *e;

dafür überhaupt nicht.

code:
1:
2:
3:
cin>> a >> b >> c >> d >> e;


Funktioniert so überhaupt gar nicht.

Weiterhin ist es so, dass der Nutzer sagen können soll, wie viele Zahlen sortiert werden sollen. Wie viele Variablen willst du dafür denn deklarieren. Rein vom logischen Standpunkt kann das so nicht funktionieren. Es muss folglich andere Mittel geben um soetwas zu realisieren.

Weiterhin stelle ich mir immer wieder die Frage, wie du solche Aufgaben erhältst und so wenig Ahnung hast... Das passt irgendwie nicht zusammen. Es ist auch für einen Nachholer (wenn Du den Stoff nachbereiten musst) die initiative, die ich ein wenig vermisse. Ich sehe, dass euler Dir in vielen Seiten versucht hat viel zu erklären und schlussendlich stammt fast der gesamte Quelltext von ihm. Das ist nicht das was ich unter Hilfe zur Selbsthilfe verstehe.

Ich habe euler mal gefragt, ob er bereit ist, deine Frage weiter zu verfolgen. Ich bin nur teilweise dazu bereit. Oben ist ein Anfang. Wenn mir die Antwort gefällt bin ich auch gern bereit dir weiter zu helfen.

VG,

Karlito
Auf diesen Beitrag antworten »
info

Soll ich nur 4 variablen einlesen oder wie?

Ich wollte 6 einlesen daher hatte ich das so gemacht.
Auf diesen Beitrag antworten »
eulerscheZahl

Zitat:
Ich wollte 6 einlesen daher hatte ich das so gemacht.

a,b,c,d,e sind aber nur 5 Variablen.
Aber den Ansatz solltest du wieder verwerfen, da:
-viel zu unflexibel
-qsort() ein Array braucht

Mit int Zahl[6]; definierst du dir ein Array (sowas lässt sich auch dynamisch anlegen, aber lassen wir das erst mal).
Lies die Zahlen mit einer Schleife ein und schreibe sie dann in das Array.
Auf diesen Beitrag antworten »
info

Kann man das so machen?

#include <iostream>

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 mehr elemente verfügbar" << endl;

}
cout<<" Elemente eingeben ";
for (int i=0;i<n;i++)//Eingabe der Arrayelemente
cin>>zahl[i];







}







return 0;
}
Auf diesen Beitrag antworten »
eulerscheZahl

Im Ansatz nicht schlecht, aber:
- es gibt einmal mehr } als {, ich finde das solltest du auch selbst merken.
- bei n>5 Elementen wird zwar mitgeteilt, dass es nicht genug Speicher gibt, dann aber trotzdem in den nicht vorhandenen Speicher eingelesen. Abhilfe kann das Wort else verscahffen.

Das Einlesen könnte man noch benutzerfreundlicher gestalten:
code:
1:
2:
3:
4:
5:
for (int i=0;i<n;i++)//Eingabe der Arrayelemente
{
	cout << i+1 <<". Element: ";
	cin >> zahl[i];
}
Auf diesen Beitrag antworten »
info

Mein programm sieht so aus:


using namespace std;
int n;
int Zahl[i];

int main()
{

for (int i=0;i<n;i++)//Eingabe der Arrayelemente
{
cout << i+1 <<". Element: ";
cin >> zahl[i];
}

}

C:\C++\Zahlen einlesen\main.cpp|5|error: 'i' was not declared in this scope|
C:\C++\Zahlen einlesen\main.cpp||In function 'int main()':|
C:\C++\Zahlen einlesen\main.cpp|13|error: 'zahl' was not declared in this scope|
||=== Build finished: 2 errors, 0 warnings (0 minutes, 0 seconds) ===|

Kannst du mir helfen diese FEHLER ZU BESEITIGEN?
Auf diesen Beitrag antworten »
info

Ich habe einen fehler erkannt , aber es funzt immer noch nicht.

#include <iostream>

using namespace std;

int i[5];


int main()
{

for (int i=0;i<n;i++)//Eingabe der Arrayelemente
{
cout << i+1 <<". Element: ";
cin >> zahl[i];
}

}

Das verstehe ich nicht
Auf diesen Beitrag antworten »
info

Hallo leute ich habe einen ganz neuen weg genommen aber es funktioniert:

#include <iostream>

using namespace std;

int i[5];


int main()
{

for (int Zahl=0;Zahl<5;Zahl++)//Eingabe der Arrayelemente
{
cout << Zahl+1 <<". Element: ";
cin >> i[Zahl];
}

}


Kann ich es so machen ?

Aber wie gehe ich weiter vor?
Auf diesen Beitrag antworten »
eulerscheZahl

Wir waren doch schon weiter: das Einlesen der Zahlen war einigermaßen flexibel, nicht zwingend 5 Zahlen.

Zitat:
using namespace std;
int n;
int Zahl[i];

int main()
{

for (int i=0;i<n;i++)//Eingabe der Arrayelemente
{
cout << i+1 <<". Element: ";
cin >> zahl[i];
}

}

C:\C++\Zahlen einlesen\main.cpp|5|error: 'i' was not declared in this scope|
C:\C++\Zahlen einlesen\main.cpp||In function 'int main()':|
C:\C++\Zahlen einlesen\main.cpp|13|error: 'zahl' was not declared in this scope|
||=== Build finished: 2 errors, 0 warnings (0 minutes, 0 seconds) ===|

Du hast keinen Fehler erkannt, sondern geraten. Dabei hilft es doch zu lesen:
In Zeile 5 ist i unbekannt -> Zahl[5]
In Zeile 13 ist zahl unbekannt -> weil du es oben groß geschrieben hast.

Es ist so etwas wie ein ungeschriebenes Gesetz, dass i für Laufvariablen, also in Schleifen verwendet wird, nicht als Array.

Da es sowieso wieder darauf hinauslaufen würde, dass ich dir die Lösung verrate, beschleunige ich das.
Aber nochmals mein Ratschlag: hole dir Hilfe im persönlichen Umfeld, mit einem Forum kannst du dir zwar konkrete Fragen beantworten lassen, aber du scheitest schon bei den Grundlagen, die sitzen sollten, wenn ich mir anschaue, was sonst von dir gefordert wird.
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:
#include <iostream>
using namespace std;

int vergleich(const void*a, const void *b)
{
	return *(int*)a - *(int*)b;
}

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;
		system("PAUSE");
		return 0;
	}
	else
	{
		cout<<" Elemente eingeben:\n";
		for (int i=0;i<n;i++)
		{
			cout << i+1 <<". Element: ";
			cin >> zahl[i];
		}
	}
	qsort(zahl,n,sizeof(zahl[0]),vergleich);
	cout << "\n";
	for(int i=0;i<n;i++)
		cout << zahl[i] << "  ";
	system("PAUSE");
	return 0;
} 
Auf diesen Beitrag antworten »
info

Ich hab ja im moment dieses Programm .

#include <iostream>

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 mehr elemente verfügbar" << endl;

}
cout<<" Elemente eingeben ";
for (int i=0;i<n;i++)//Eingabe der Arrayelemente
cin>>zahl[i];










}







return 0;
}

Kannst du mir sagen wenn ich das array jetzt mit der if bedingung sortieren will, und den ersten eingabewert mit dem zweiten wert vergleichen will , wie mache ich das so:

if( wie heisst erste zahl und wie die zweite???


Ich versuche es irgendwie mit einem anderen weg.
Auf diesen Beitrag antworten »
eulerscheZahl

Wie ich schon am 23.02.2013 um 7:47 Uhr schrieb, scheitert das schon daran, dass es einmal mehr '{' als '}' gibt.
Auch dass du eventuell in nicht reservierten Speicher schreibst habe ich dir verraten.

Eine if-Bedingung sortiert auch kein Array.
Lies dir meine früheren Antworten durch, versuche sie zu verstehen und melde dich wieder, wenn du konkrete Fragen hast, so drehen wir uns im Kreis.

Ich habe dir sogar einen Lösungsvorschlag gemacht, besser bekommst du die Sortierung nicht hin, auch weiß ich nicht, was genau du vorhast. Hast du überhaupt eine Vorstellung, wie du das Array sortieren willst? Solange du das nicht weißt, brauchst du auch nicht versuchen, es umzusetzen.
Auf diesen Beitrag antworten »
info

Hallo eulersche Zahl ich hab mal wieder was probiert :


#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 mehr elemente verfügbar" << endl;

}
cout<<" Elemente eingeben ";
for (int i=0;i<n;i++)//Eingabe der Arrayelemente
cin>>zahl[i];






for(int i = 0; i< 5 ; ++i)
{

if(zahl[i] > zahl[i+1])
{
int swap = zahl[i+1];
zahl[i+1] = zahl[i];
zahl[i] = swap;



}


}



cout << "sortiert" << endl;
for(int i = 0;i< 5 ; ++i) {

cout << zahl[i] << " Bye " << endl;
}









}



ABer ich verstehe nicht so ganz was ich machen soll damit die eingelesenen Dateien richtig sortiert werden.

Ich hoffe mein ansatz ist nicht ganz blöd.



return 0;
}
Auf diesen Beitrag antworten »
Karlito

Hallo,

der Ansatz ist nicht blöd, aber:
  • Du gehst nicht auf unsere Antworten ein
  • Dein Quelltext enthält immernoch eine Klammer zu viel (nach mehreren Hinweise darauf)
  • In deiner for-Schleife greifst Du über die Grenze des Arrays hinaus. Du hast also nicht nachvollzogen was die Schleife macht
  • Du schreibst Fließtext in deinen Quelltext
  • Anhand deiner Beiträge und der Schlampigkeit mit der sie verfasst sind, kann ich nicht darauf schließen, dass du das hier wirklich ernst meinst und ich fühle mich weiterhin verarscht!


Du legst nicht dar, was Du erreichen willst und machst einfach weiter mit den selben Fehlern wie vorher und einem Mini-Schritt, der vorgibt, dass du dir Gedanken gemacht hast. Für mich sieht es aus wie rumprobieren! Glaub mir, ich schreibe gerne hier und ich helfe auch gerne, aber was Du hier ablässt verstehe ich nicht!

Mein EIndruck ist, dass du versuchst irgendwo mit Minimalaufwand zu bestehen. Du ziehst uns so lange kleine Schrittchen aus der Nase, bis du es begreifst ohne selbst viel Arbeit und Gedanken investieren zu müssen.

--
Karlito
Auf diesen Beitrag antworten »
info

Kann mir jemand anderer helfen ?
Auf diesen Beitrag antworten »
Karlito

Die Vertauschung ist soweit richtig. Du musst das solange wiederholen, bis nicht mehr getauscht werden muss.

Packe die Tauschoperation in eine do-while-Schleife. Merke dir in einer Variable, die du bei jedem Durchlauf zurücksetzt, ob ein Tausch stattgefunden hat. Ist dies nicht der Fall, so ist dein Array sortiert.

Das beantwortet auch deine Frage mit dem bereits sortierten Array. Liegt es bereits sortiert vor, wird die Sortierung geprüft und es kommt nie zu einem Tausch -> Abbruchbedingung.

VG,

Karlito
Auf diesen Beitrag antworten »
info

#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 mehr elemente verfügbar" << endl;

}
cout<<" Elemente eingeben ";
for (int i=0;i<n;i++){//Eingabe der Arrayelemente
cin>>zahl[i];






for(int i = 0; i< 5 ; ++i)
{
do
{
int swap = zahl[i+1];
zahl[i+1] = zahl[i];
zahl[i] = swap;



}


while{

if(zahl[i] > zahl[i+1])
}
}






cout << "sortiert" << endl;
for(int i = 0;i< 5 ; ++i) {

cout << zahl[i]<< endl;
}









}







return 0;
}


Ich hab jetzt ein wenig versucht die Schleife einzubauen aber es funktioniert immer noch nicht.

Für hilfe wäre ich dankbar.
Auf diesen Beitrag antworten »
eulerscheZahl

Deine Schleife (ich kann nicht erkennen, ob es while oder do...while werden sollte) funktioniert so nicht, da die Syntax nicht stimmt.
Zum Rest sage ich mal nichts, da ich es sowieso schon getan habe.

Versuchen wir es mal anders:
Das ist ein lauffähiges Programm (syntaktisch korrekt), allerdings funktioniert das Sortieren nicht, weil ich ein paar Fehler eingebaut habe.
Viel Spaß beim Suchen.
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:
#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; i < n-1; i++)
		{
			for(int j = 0; j < n-1; j++)
			{
				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;
}


Und eine Bitte für die Zukunft:
Umschließe deinen Code mit [ code] ... [ /code] (Leerzeichen weglassen), damit der Quelltext eingerückt bleibt.
Auf diesen Beitrag antworten »
info

Danke eulersche zahl.

Nur damit du weisst dass ich es ein wenig verstanden hab.

Hier das korrigierte programm:
[ 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; i < n-1; i++)
{
for(int j = 0; j < n-1; j++)
{
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]
Auf diesen Beitrag antworten »
eulerscheZahl

Einen Fehler hast du zwar gefunden, aber wie ein Probelauf zeigt, werden die Zahlen immer noch nicht richtig sortiert.
Auf diesen Beitrag antworten »
info

Wo liegt den der andere Fehler?

Den erkenne ich gar nicht.
Auf diesen Beitrag antworten »
eulerscheZahl

Dann musst du den Code wohl zeilenweise debuggen.

Falls du noch Code::Blocks verwendest, ist hier ein Video, das dir zeigt, wie du das machst.
Auf diesen Beitrag antworten »
info

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 ???
Auf diesen Beitrag antworten »
eulerscheZahl

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.
Auf diesen Beitrag antworten »
info

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]
Auf diesen Beitrag antworten »
Karlito



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!
Auf diesen Beitrag antworten »
info

Oh nein jetzt habe ich auch keine Ahnung .

Was mache ich jetzt?
Auf diesen Beitrag antworten »
Karlito

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;
}
Auf diesen Beitrag antworten »
info

In zeile 28 müsste das stehen oder:

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

Richtig?
Auf diesen Beitrag antworten »
eulerscheZahl

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.
Auf diesen Beitrag antworten »
info

Äh int j = 0. oder?
Auf diesen Beitrag antworten »
eulerscheZahl

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?
 
Neue Frage »
Antworten »


Verwandte Themen