C++ Array mit 20 Zahlen eingeben und überprüfen

avagoal

Newbie
Registriert
Nov. 2009
Beiträge
2
hallo leute,

ich hab ein kleiiiiines problem und zwar muss ich morgen für die uni eine bestimmte Praktikumsaufgabe lösen das einzige problem ist das ich in info nicht das grösste ass bin, info ist für mich einfach wie chinesich aber ich brauche es dennoch in den ersten 2 semestern. also bis jetzt kam ich gut zurecht nur mit arrays kann ich iwie gar nichts anfangen hab jetzt das programm von einem kommolitionen geholt aber iwie will es nicht wirklich richtig laufen.
also hier ist erstmal die aufgabenstellung:

Es ist ein Programm zu erstellen, welches zunächst ein Array von maximal 20 Zahlen einliest
(Tastatur oder Datei) und nach der Eingabe zur Kontrolle am Bildschirm in einer Zeile formatiert
ausgibt.
Danach soll, beginnend beim ersten bis zum vorletzten, jedes Element des Arrays überprüft werden,
ob es größer als das nächste Element ist. Trifft dies zu werden diese beiden Elemente vertauscht.
Die Anzahl der Vertauschungen soll gezählt werden.
Nach jedem Tausch sollen alle Elemente des Arrays am Bildschirm angezeigt werden inkl. der
Anzahl der bisher durchgeführten Vertauschungen
Beispiel:
Eingelesen: 3 4 2 1 5 3
1. Tausch : 3 2 4 1 5 3
2. Tausch : 3 2 1 4 5 3
3. Tausch : 3 2 1 4 3 5

so und das ist das prgramm was ich derzeit habe:

#include <iostream>
#include <cmath>
#include <iomanip>




using namespace std;


void main()
{
int x[20], p=0, n, y;

cin>>n;

while (n<20)
{ cout << "zu hoch "<<endl; cin>>n;}

for (int i=0; i<n; i++)
{ cin>>x;}

for (int b=0; b<n; b++)
{ cout<<x;}

for (int c=0; c<n-1; c++)
{if (x[c]>x[c+1])
{y=x[c];
x[c]=x[c+1];
x[c+1]=y;
p++;
cout<<p<<"tausch";
for (int o=0; o<n;o++)
{cout<<x[o];}
}
}
}


vllt könnt ihr mir helfen, ist sehr dringend da ich es wie gesagt morgen abgeben muss.
danke schonmal im vorraus
 
Kann es jetzt nicht auf die schnelle machen da ich auf Arbeit bin.
Aber gebe dir mal einen Tipp die Lösung nennt sich Bubble Sort!!

Google mal und du hast deine Lösung! Aber besser noch veruche dich selber dran! Denn nur wer versucht der wird es verstehen!

Hier hab mal schnell was gesucht sollte dir weiterhelfen.

// values: Zeiger auf zu sortierendes Array
// n: Länge des Arrays
void BubbleSort (int *values, int n)
{
int i, j; // Zählindizes
int tmp; // Hilfsvariable zum Vertauschen von Werten

// durch das ganze Feld gehen
for (i = 0; i < n; i++)
{
// am Ende beginnen das kleinste Element zu suchen
for (j = n - 1; j >= i; j--)
{
// prüfen ob das Element kleiner als der Vorgänger ist

if (values[j] < values[j - 1])
{
// Werte vertauschen

tmp = values[j];
values[j] = values[j - 1];
values[j - 1] = tmp;
}
}
}
}
 
Zuletzt bearbeitet:
Hi,

also ich bin mir nicht ganz sicher was ihr jetzt genau machen sollt. Sollt ihr das komplette Array richtig sortieren oder das Array nur einmal durchlaufen und jeweils die Zahlen drehen, falls die erste Zahl größer als die zweite ist?

Falls letzteres der Fall ist, sieht deine Lösung doch eigentlich gar nicht so schlecht aus. Du solltest allerdings bei deiner ersten while schleife nicht "n < 20" sondern "n > 20" schreiben, da du ja nicht willst, das man mehr als 20 zahlen eingeben kann.

Also im Endeffekt müsste es dann in etwas so aussehen:

Code:
#include <iostream>
using namespace std;

void main()
{
	int x[20], p=0, n, y;

	cout << "Wieviele Zahlen moechten Sie einlesen? (max. 20)" << endl;
	cin >> n;

	while ( n > 20 )	// n größer 20
	{ 
		cout << "zu hoch " << endl; 
		cin >> n;
	}

	cout << "Geben Sie nun die Zahlen ein: ";
	for (int i=0; i < n; i++)
	{ 
		cin >> x[i];
	}

	cout << endl;

	for (int b = 0; b < n; b++)
	{ 
		cout << x[b] << " ";
	}

	cout << endl;

	for (int c = 0; c < n-1; c++)
	{
		if (x[c] > x[c+1])
		{
			y = x[c];
			x[c] = x[c+1];
			x[c+1] = y;
			p++;
			cout << p << " tausch" << endl;
			
			for (int o = 0; o < n; o++)
			{
				cout << x[o] << " ";
			}
			cout << endl;
		}
	}
	cout << endl;
	cout << "Insgesamt wurde " << p << "x getauscht!" << endl;
}

Gruß cinzio
 
Zuletzt bearbeitet:
Also in dem von deinem Kommilitonen geposteten Code sind so viele kleine Fehler oder Problemchen drinnen, dass es sich gar nicht lohnt, darüber zu diskutieren. Schmeiß das mal wech und mach es selbst.

Damit du noch was lernen kannst, hier ein paar Anregungen:
Zum Einlesen der Werte nimmst du entweder eine for-Schleife, nachdem du vorher die Anzahl einzugebener Zahlen abgefragt hast (Bitte nicht wie dein Kollege zweimal mit '<' arbeiten, sonst werden es nur 18 Werte). Oder du nimmst eine while-Schleife und brichst diese nach Eingabe von 20 Zahlen oder z.B. eines Buchstabens ab.
Dann gibst du mit einer for Schleife alle Zahlen aus. Am besten mit einem Leerzeichen dazwischen.
Nun benötigst du wiederum eine for-Schleife, die n-1 Durchläufe hat, wobei n die Anzahl an Werten im Array ist. Prüfst dabei mit einer if-Verzweigung ob du tauschen musst und zählst in einer Variablen die Tauschvorgänge.
Am Ende gibst du alles aus.
Gerne kann man dazu auch ein wenig Taxt verwenden, damit der Benutzer auch weiß, was er tun muss.

Ein Array ist im Übrigen nichts anderes als eine Tabelle mit einer Spalte für Werte und einer für die Spaltennummer. (Wie Excel mit einem Tabellenblatt auf dem nur eine Spalte zu sehen ist.

Die Aufgabe ist im Übrigen wirklich sehr leicht und lässt sich mit großem Lerneffekt gut selbst erarbeiten. Alles was du brauchst ist hier schon geschrieben.

Lösungsvorschläge von dir kommentier ich gerne, aber die komplette Antwort gebe ich ungern.

@kaktus: Das Problem an deinem Vorschlag ist, dass die Aufgabe somit nicht gelöst wäre, weil der Algorithmus anders funktioniert, als in der Aufgabe erwünscht.

@blitzmerker: Ändert nix daran, dass der Code unschön ist. Keine 20 Werte können eingegeben werden, für jede for ne eigene Variable, etc.

@cinzio: €dit: Upps selbst verguckt...alles gut sorry :) Dann aber trotzdem bitte n>=20 in der while und der ersten for, sonst werden es nur 18 Werte...
 
Zuletzt bearbeitet:
@CHaos.Gentle:
Also soweit ich das sehe müssten da schon 20 Werte bei raus kommen. Wenn ich in der while schleife n >= 20 eingeben würde, müsste man ja schließlich mindestens 21 eingeben um diese Schleife zu umgehen.

Und die for Schleife passt hier ebenfalls dazu, wenn ich vorher eingebe, das ich 20 zahlen eingeben möchte zählt meine for Schleife ja schließlich von 0 - 19 was dem entsprechen würde.

Gruß cinzio
 
also ich bin schon seit 3 stunden dran und ich hasssssee immer mehr diese arrays. Ich mein den Zusammenhang verstehe ich ja mittlerweile und die vorlage von cinzio is ja super aber laut aufgabe soll die anzahl der vertauschungen gezählt werden und nach jedem tausch sollen alle elemente des arrays aufgeführt werden auch die anzahl der davorigen vertauschungen, also wie im beispiel angezeigt ist. und das problem ist dann das wenn ich jetzt z.b. 17 zahlen wähle und diese 17 eingebe, das programm endet ohne die vertauschungen aufzuführen... und @chaos ich versuche es aber das ist das erste mal das ich mit arrays arbeite und habe programmieren erst seit einem monat und wenn man es vorher noch nie gemacht hat ist es wirklich nicht leicht.
Ergänzung ()

ahhhhh ich hab grad mein fehler entdeckt. mit system(" pause ") kann ich ja den bildschirm stoppen >.<, super es klappt alles genau wie es sollte.

danke leute!
 
Zuletzt bearbeitet:
Zurück
Oben