Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Sortowanie babelkowe

Maly-207 17 Lis 2008 13:20 1748 6
  • #1 17 Lis 2008 13:20
    Maly-207
    Poziom 10  

    Witam,

    Napisalem program, ktory ma wczytywac dane z pliku i sortowac babelkowe jednak, jak to widac na obrazku nic z tego. Moj jakze fajny program pokazuje ponizej. Pomozecie w wytyczeniu moich bledow oraz pokazaniu jak to trzeba poprawnie zrobic. Wszelkie info potrzebne i dzieki

    Code:
    #include<stdio.h>
    
    #include<io.h>
    void sortuj();
    int tab[100];
    int i,j,ile;
    int x;
    int main(){
           FILE *dane;
           dane=fopen("1.txt","r");
           printf("Tablica zaladowana:\n");
           ile=0;
           while(!feof(dane))
           {
            fscanf(dane,"%d",&x);
            i=0;
            tab[i]=x;
            printf("%d",tab[i]);
            printf(", ");
            ile++;
            i=i+1;
           }
           printf("\n");
           printf("\nTablica posortowana:\n");
    // sortuj();
           for(i=0;i<ile;i++)
           
           {
                           
            printf("%d",tab[i]);
            printf(", ");
             
            }
           printf("\n\n");
           getchar();
           getchar();
           return(0);
           
           }
    /*
    void sortuj(){
         int temp;
         for(i=1;i<ile;i++)
          for(j=0;j<=ile-1;j++)
           if(tab[j-1]>tab[j]){
            temp=tab[j-1];
            tab[j-1]=tab[j];
            tab[j]=temp;}
         }
    */


    A tak dla ulatwienia zamieszcze jeszcze screena z kompilacji i wygladu.

    0 6
  • #2 17 Lis 2008 14:13
    BoskiDialer
    Poziom 34  

    Code:
    for(j=0;j<=ile-1;j++) 
    
      if(tab[j-1]>tab[j])
    // [...]

    Dopuszczasz j równe zero a potem liczysz j-1 (które będzie równe -1).

    Sortowanie bąbelkowe o ile pamiętam, robi się z dwóch stron - pierwszą pętlą idziesz w dół, drugą do góry (jakoś tak):
    Code:
    void sortuj(){ 
    
      for(i=ile; i>2; i--)
        for(j=1; j<i; j++)
          if(tab[j-1]>tab[j])
          {
            int temp = tab[j-1];
            tab[j-1] = tab[j];
            tab[j] = temp;
          }
    }

    Kolejny błąd: wszystkie liczby wczytujesz do jednego elementu tablicy (i zerowane przy każdym przebiegu pętli):
    Code:
    i=0;
    
    tab[i]=x;

    Więcej mi się nie chce szukać.

    0
  • #3 17 Lis 2008 14:17
    jakubw
    Poziom 18  

    No ja nie wiem kto Ci to pisał ...
    funkcje sortującą wyciąłeś ,,, ( to ta na końcu ) - więc nie ma prawa działać

    plus błędy wyszczególnione przez kolegę wyżej ... zwłaszcza ciągłe zerowanie

    wynik -- niekoniecznie ostateczny ale działający

    Code:

    #include<stdio.h>
    #include<io.h>

    void sortuj();
    int tab[100];
    int i,j,ile;
    int x;

    int main()
    {
    FILE *dane;
    dane=fopen("1.txt","r");
    ile=0;
    printf("\nTablica zaladowana:\n");
    while(!feof(dane))
                      {
                      fscanf(dane,"%d",&x);                 
                      tab[i]=x;
                      printf("%d",tab[i]);
                      printf(", ");
                      ile++;
                      i=i+1;
                      }
    sortuj();
    }

    void sortuj()
    {
    int temp;
    for(i=1;i<ile;i++)
    for(j=0;j<=ile-1;j++)
    if(tab[j-1]>tab[j])
                       {
                       temp=tab[j-1];
                       tab[j-1]=tab[j];
                       tab[j]=temp;
                       }
    printf("\n\n");
    printf("\nTablica posortowana:\n");
    for(i=0;i<ile;i++)
                      {
                      printf("%d",tab[i]);
                      printf(", ");
                      }
    getchar();
    getchar();
    }


    Na zdrowie

    -1
  • #4 17 Lis 2008 14:21
    Maly-207
    Poziom 10  

    Dzieki wielkie,

    Teraz juz wiem ze trzeba bedzie sie troche przylozyc do programowania. Dzieki jeszcze raz wielkie dla was Jestem wam winny chyba skrzyne piwa

    0
  • #5 17 Lis 2008 14:22
    BoskiDialer
    Poziom 34  

    jakubw: "działający" to ten kod nie jest.. brak zerowania zmiennej "i" ujdzie (zmienna globalna w sekcji bss), ale przeniesienie wypisywania tablicy do funkcji sortującej nie zrozumiem (mimo że to nie jest błąd powodujący zły wynik). Nie wiem jak ten kod może działać, jak nadal pojawiają się odwołania to elementów o indeksach ujemnych...

    0
  • #6 17 Lis 2008 14:30
    jakubw
    Poziom 18  

    Też nie wiem jak to możliwe, ale w związku z tym, ze działa
    dlatego pozostawiłem go takim jakim jest.
    W końcu nie jest problemem podnieść indeksy o 1 i nic nie zejdzie poniżej zera.
    Ale to już problem naszego kolegi specjalisty, który funkcje sortującą
    umieszcza w komentarzach

    Pozdrawiam

    0
  • #7 17 Lis 2008 14:45
    Maly-207
    Poziom 10  

    Oki
    Poprawiam juz. Dzieki i uwagi

    Pozdrawiam

    0