C++ |
info unregistriert
|
|
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
|
|
17.02.2013 12:48 |
|
|
|
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.
__________________ Syntax Highlighting fürs Board (Link)
|
|
17.02.2013 15:38 |
|
|
info unregistriert
|
|
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.
|
|
19.02.2013 22:09 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
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
|
|
19.02.2013 23:12 |
|
|
info unregistriert
|
|
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.
|
|
20.02.2013 10:18 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
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
|
|
20.02.2013 11:11 |
|
|
info unregistriert
|
|
Welche vorlesungsfolien meinst du?
|
|
20.02.2013 11:35 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
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
|
|
20.02.2013 12:30 |
|
|
info unregistriert
|
|
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 ?
|
|
21.02.2013 22:44 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
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
|
|
21.02.2013 23:56 |
|
|
info unregistriert
|
|
Soll ich nur 4 variablen einlesen oder wie?
Ich wollte 6 einlesen daher hatte ich das so gemacht.
|
|
22.02.2013 02:25 |
|
|
|
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.
__________________ Syntax Highlighting fürs Board (Link)
|
|
22.02.2013 14:15 |
|
|
info unregistriert
|
|
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;
}
|
|
22.02.2013 23:43 |
|
|
|
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];
} |
|
__________________ Syntax Highlighting fürs Board (Link)
|
|
23.02.2013 07:47 |
|
|
info unregistriert
|
|
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?
|
|
25.02.2013 19:37 |
|
|
|