Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Informatik in der Schule (http://www.informatikerboard.de/board/board.php?boardid=21)
--- C++ (http://www.informatikerboard.de/board/thread.php?threadid=1388)


Geschrieben von info am 17.02.2013 um 12:48:

  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



Geschrieben von eulerscheZahl am 17.02.2013 um 15:38:

 

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.



Geschrieben von info am 19.02.2013 um 22:09:

 

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.



Geschrieben von Karlito am 19.02.2013 um 23:12:

 

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



Geschrieben von info am 20.02.2013 um 10:18:

 

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.



Geschrieben von Karlito am 20.02.2013 um 11:11:

 

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



Geschrieben von info am 20.02.2013 um 11:35:

 

Welche vorlesungsfolien meinst du?



Geschrieben von Karlito am 20.02.2013 um 12:30:

 

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



Geschrieben von info am 21.02.2013 um 22:44:

 

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 ?



Geschrieben von Karlito am 21.02.2013 um 23:56:

 

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



Geschrieben von info am 22.02.2013 um 02:25:

 

Soll ich nur 4 variablen einlesen oder wie?

Ich wollte 6 einlesen daher hatte ich das so gemacht.



Geschrieben von eulerscheZahl am 22.02.2013 um 14:15:

 

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.



Geschrieben von info am 22.02.2013 um 23:43:

 

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;
}



Geschrieben von eulerscheZahl am 23.02.2013 um 07:47:

 

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];
}



Geschrieben von info am 25.02.2013 um 19:37:

 

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?


Forensoftware: Burning Board, entwickelt von WoltLab GmbH