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])
          {
               ...             }
          }
       }
    }
    


Anmelden zum Antworten