Wieso geht das nicht
-
Anfänger 7 schrieb:
Hab ich nicht std:: schon includiert mit using namespace std?
doch
-
Also, wie ihr vielleicht gemerkt habt, sollte das kleine Programm bücher, die man eingibt, nach Autoren alphabetisch (A-Z) sortieren, mit Bubblesort.
Hab das jetzt mal so gemacht:
#include <string> #include <iostream> using namespace std; struct buch{ int id; char autor[30], titel[30], verlag[30]; float preis; }; int main() { int x=1,i=0,t1,t2; buch n[100],h; while (x==1) {n[i].id=i+1; cout<<"Titel: "<<endl; cin>>n[i].titel; //scanf("%s",n[i].titel); cout<<"Autor: "<<endl; cin>>n[i].autor; cout<<"Verlag: "<<endl; cin>>n[i].verlag; cout<<"Preis: "<<endl; cin>>n[i].preis; cout<<"Noch einen Datensatz hinzufügen? 0 = Nein , 1= Ja"<<endl; cin>>x; if (x==1) {i++; //system("CLEAR"); } } cout<<endl; cout<<"Unsortiert"<<endl; for (int a=0;a<=i;a++){ cout<<n[a].id<<'\t'<<n[a].titel<<'\t'<<n[a].autor<<'\t'<<n[a].verlag<<'\t'<<n[a].preis<<endl; } cout<<endl; cout<<"Sortiert"<<endl; int z=0; for (int k=i;k>0;k--) { for (int j=0;j>k;j++) {z=j+1; if (n[j].autor<n[z].autor) { h=n[z]; n[z]=n[j]; n[j]=h; cout<<"--------"<<endl; cout<<n[z].autor<<endl; cout<<n[j].autor<<endl; }//IF } } for (int d=0;d<=i;d++) { cout<<n[d].id<<'\t'<<n[d].titel<<'\t'<<n[d].autor<<'\t'<<n[d].verlag<<'\t'<<n[d].preis<<endl; } system("PAUSE"); return 0; }
Es sortiert immer noch Falsch. Könnte mir da einer ein bisschen Helfen?
Danke
-
pseudo for ( i = n-1; i > 0; i-- ) for ( k = 0; k < i; k++ ) if ( daten [k] > daten [k+1] ) swap(daten[k], daten[k+1]);
sollte funktionieren
-
Hab das jetzt mal so gemacht, geht aber immer noch nicht richtig:
cout<<"Sortiert"<<endl; int z=0; for (int k=i-1;k>0;k--) { for (int j=0;j<k;j++) {if (n[j].autor<n[j+1].autor) { swap (n[j],n[j+1]); /* h=n[j+1]; n[j+1]=n[j]; n[j]=h; cout<<"--------"<<endl; cout<<n[z].autor<<endl; cout<<n[j].autor<<endl; */ }//IF } }
-
ist die Anzahl der Elemente sicher richtig??
also in deinem Fall die Variable "i"
-
Ja, i= die Zählvariabel di beim ersten schleifen durchlauf mit läuft:
while (x==1) {n[i].id=i+1; cout<<"Titel: "<<endl; cin>>n[i].titel; //scanf("%s",n[i].titel); cout<<"Autor: "<<endl; cin>>n[i].autor; cout<<"Verlag: "<<endl; cin>>n[i].verlag; cout<<"Preis: "<<endl; cin>>n[i].preis; cout<<"Noch einen Datensatz hinzufügen? 0 = Nein , 1= Ja"<<endl; cin>>x; if (x==1) {i++; //system("CLEAR"); } }
-
if (n[j].autor<n[z].autor)
hast du schon überlegt, was genau du hier vergleichst?
-
Dachte das bedeutet folgendes:
Wenn n[j].autor alphabetisch nach n[j+1].autor kommt.
Stimmt das nicht?
Aber wenn ich das ">" schreibe gehts auch nicht richtig...
-
du vergleichst 2 variablen des typs const char*, also 2 adressen.
mach dich mal über strcmp(...) schlau!
-
Ja du hast recht ist mir jetzt auch aufgefallen.
Habs jetzt so umgeändert:struct buch{ int id; string autor, titel, verlag; float preis; };
Geht aber immer noch nicht.
-
for (int k=i-1;k>0;k--) { for (int j=0;j<k;j++) {
die zweite schleife wird nie betretten...
-
das stimmt nicht ganz,
irgendwie sortiert er da schon was.
Wie würde das richtig kommen?
-
die zwei Schleifen sind richtig,
aber wie chirgi schon sagte das vergleichen der Objekte stimmt nicht
habe das leider nicht gesehen hab etwas ueberhastet daruebergelesendu musst die Objekte mit strcmp vergleichen bzw wenn du die std::string Klasse verwendest kannst du einfach denn Operator verwenden
und das austauschen muss natuerlich dann auch anders gemacht werden
bei cstrings zb: mit strcpy o memcpyok?
-
hatte nicht gemerkt, dass die schleifen bereits korrigiert wurden... (und dabei habe ich die bereits korrigierte version gequotet!
)
-
Was bedeutet std::???
-
Kann mier mal jemand die Bedeutung von
"using namespace std;" erklären?
-
Was bedeutet std::???
Gier schrieb:
Kann mier mal jemand die Bedeutung von
"using namespace std;" erklären?mfg