Bubblesort
-
Hey leute,
in dem Folgenden Programm sollen Namen und Alter sortiert werden anhand der Bubblesortmethode.
#include <condefs.h> #include <iostream.h> #include <conio.h> #include <windows.h> #include <iomanip.h> #include <stdlib.h> int x,y,var, Feld[3], merker[3] ; float summe, summe1; char Felds[3], merkers[3]; void einlesen(); void ausgabe(); void Alter(); void name(); void ausgabe2(); void main() { do { clrscr(); cout<<"Menue"; cout<<endl; cout<<endl; cout<<"1 - Eingabe von Alter und Namen"<<endl; cout<<"2 - Ausgabe von Alter und Namen"<<endl; cout<<"3 - Sortierung von Alter"<<endl; cout<<"4 - Sortierung von Namen"<<endl; cout<<"5 - Ausgabe des Durchschnittsalters"<<endl; cout<<"0 - Ende"; cout<<endl; cout<<endl; cout<<"Auswahl: "; cin>>x; switch(x) { case 1:{ einlesen(); getch(); break; } case 2:{ ausgabe(); getch(); break; } case 3:{ Alter(); getch(); break; } case 4:{ name(); break; } case 5:{ ausgabe2(); break; } } } while(x != 0); } void einlesen() { for (int x=0; x<3; x++) { clrscr(); cout<<"Geben Sie ihr Alter ein: "; cin>>Feld[x]; cout<<endl; cout<<"Geben Sie ihren Namen ein: "; cin>>Felds[x]; cout<<endl; } } void ausgabe() { clrscr(); for (int x=0; x<3; x++) { cout<<"Alter"<<" Name"<<endl; cout<<" "<<Feld[x]<<" "<<" "<<Felds[x]; cout<<endl; } } void Alter() { for(int x = 0; x < 3; x++) { for(int y = 0; y <3; y++) { if(Feld[x] > Feld[x+1]) { merker[x]=Feld[x]; Feld[x]=Feld[x+1]; Feld[x+1]=merker[x]; } } } for(int x=0;x<3;x++) { cout<<Feld[x]; } getch(); } void name() { for(char x = 0; x < 3; x++) { for(char y = 0; y <3; y++) { if(Felds[x] > Felds[x+1]) { merkers[x] = Felds[x]; Felds[x] = Felds[x+1]; Felds[x+1] = merkers[x]; } } } for(char x=0;x<3;x++) { cout<<Felds[x]; } getch(); } void ausgabe2() { clrscr(); for(int x=0;x<3;x++) { summe=summe+Feld[x]; summe1=(Feld[x]/3); } cout<<summe1; getch(); }
Allerdings funzt genau dies nicht wäre über Hilfe dankbar.
-
Folgende Fehler habe ich beim überfliegen gefunden.
1. char Felds[3] ist ein Array of Chars; ein Char ist ein einzelnes Zeichen. In dem Array kannst du also exakt drei Zeichen speichern (zwei Buchstaben und das abschließende Null-Byte) und nicht wie du willst, drei lange Namen.
2/3.
for(int x = 0; x < 3; x++) { for(int y = 0; y <3; y++) { if(Feld[x] > Feld[x+1]) { ... } } } }
Das 'if' wird hintereinander dreimal mit dem gleichen x-Wert durchlaufen. Nach dem ersten Durchlauf wird sich da nicht viel ändern. Du musst den Wert y für den Index benutzen. Außerdem kann x (oder y) die Werte 0-2 einnehmen. Mit Feld[x+1] greifst du auf ein Element zu (Feld[3]) das gar nicht existiert. Das Ganze sollte vielleicht so aussehen:
for(int x = 0; x < 3; x++) { for(int y = 0; y<2; y++) { if(Feld[y] > Feld[y+1]) { ... } } } }