Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Informatik in der Schule » C++ » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (4): [1] 2 3 nächste » ... letzte » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen C++
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
info
unregistriert
C++ Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
info
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
info
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
info
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Welche vorlesungsfolien meinst du?
20.02.2013 11:35
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
info
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
info
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Soll ich nur 4 variablen einlesen oder wie?

Ich wollte 6 einlesen daher hatte ich das so gemacht.
22.02.2013 02:25
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
info
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
info
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
Seiten (4): [1] 2 3 nächste » ... letzte » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Informatik in der Schule » C++