Sortowanie, zapamiętywanie numeru elementu.

0

Program służy do pobrania z pliku struktur i posortowaniu ich według salda. Sortowanie idzie bez problemu, tylko nie potrafię połączyć wartości salda z resztą struktury.

 #include<stdio.h>


struct state {
   char nazwisko[50];
   char imie[50];
   char pesel[50];
   char nr[27];
   float liczba;
} st[500];


int main()
{
    int h[500];
    float w[500];
    int x[500];

    int i, n;
    printf("Ile wynikow:");
    scanf("%d", &n);
    for (i = 0; i < n; i++)
        {
        FILE *plik;
        plik = fopen("I5X3S1_j.txt","r");

        if( plik == NULL)
            printf("Nie moge znalezc bazy :(");

        else
            {
            printf("Baza wczytana pomyslnie!\n\n");
            for (i=0; i<n; i++)
                {
                fscanf(plik,"%s %s %s %s %f",st[i].nazwisko, st[i].imie, st[i].pesel, &st[i].nr, &st[i].liczba);
                w[i]= st[i].liczba;
                }
            fclose(plik);
            }

        for (i=0; i<n; i++)
            {
                printf("Nazwisko: %s\nImie: %s\nPESEL: %s\nNr konta: %s\nSaldo: %f\n\n",st[i].nazwisko, st[i].imie, st[i].pesel, st[i].nr, st[i].liczba);
            }

    {
         int c, d, position, swap;

         for(c=0 ; c< (n-1) ; c++)
         {
            for ( c = 0 ; c < ( n - 1 ) ; c++ )
            {
            position = c;
            for ( d = c + 1 ; d < n ; d++ )
            {
            if ( w[position] > w[d] )
            position = d;
            }
            if ( position != c )
            {
            swap = w[c];
            w[c] = w[position];
            w[position] = swap;

            }
            }

         }

   printf("Posortowane:\n");

   for ( c = 0 ; c < n ; c++ )
      printf("%f\n", w[c]);
}
        }
    return (0);
}
0

Przykładowe dane

Wilgus Maur 04981186731 70489090562632936832254505 11226.46
Bagilas Just 41477392876 69088698368341179525267187 29950.83
Seremak Liberiusz 03836852216 04863607131314173363575874 74025.63
Mitryäska Nikodem 98146430117 92236449488960712681503405 62361.39
Serewis Kasandra 94585937219 39863883520274013205458645 66490.62
Sido Apolinary 38438314291 01138699605810103177316088 119198.59
Siander Klaudiusz 54378780535 16803993151749999110014014 99134.91
Datkun Egon 13963579129 32693025420127658081597336 56087.78
Wiernik Daniela 93054525508 37454621875001878358983076 4433.45
Sewczyn Remigiusz 51437088511 84898359814674272810882569 35664.23
Seropa Ewald 10528959644 66362665991955522358351268 20649.86
Mizakowska Faust 35873217557 88334097049040785896779034 117273.10
Alker Felicja 67137349357 06259246372561826069746167 16817.43
Aganian Alicjana 71766898450 74838325165700075019292370 89822.81
Wi©ski Chrystian 11578455173 12511331670002994369368638 55023.01
Wilcke witold 98337433933 38350981160718318696769979 34031.83
Sgraja Jarek 32502788067 82253887655488901035396856 101654.00
S©por J˘zefa 92898723768 41880196917813908760356888 33705.35
Siech Ludomi 36725007922 72886806880186595188837487 103393.99
Serwetnicki Czarek 72417246782 21980365657723969000753372 8573.81
Daton Ryszard 80321278110 27577082718398540647658706 63203.56
Wilgos Slawomiar 52401808049 67556422772435857936046932 33423.39

1

Uprawianie programowania faronowego* jest złe - nikt nie będzie patrzył na ten kod.
Wydziel w nim funkcje i wróć.

* programowanie faraonowe występuje wtedy, gdy Twój program składa się z jednego, ogromnego maina :P

0

Wg mnie ta liczba na końcu to i jest to saldo.

0

To może inaczej. Problem jest tutaj. Do pętli sortowania wchodzi tablica w[] ułożona w sposób [1],[2],[3] itd. a wychodzi w postaci np. [47],[23],[89] posortowana. Ta [47] jest wypisywana jako inna tablica z indeksem [0], jak zapamiętać, że ona miała wcześniej indeks [47]?

 
         int c, d, position, swap;

         for(c=0 ; c< (n-1) ; c++)
         {
            for ( c = 0 ; c < ( n - 1 ) ; c++ )
            {
            position = c;
            for ( d = c + 1 ; d < n ; d++ )
            {
            if ( w[position] > w[d] )
            position = d;
            }
            if ( position != c )
            {
            swap = w[c];
            w[c] = w[position];
            w[position] = swap;

            }
            }

         }
1

To może inaczej: dopóty nikt w ogóle nie spojrzy sensownie na ten kod, dopóki go nie wydzielisz na części oraz sensownie nie nazwiesz zmiennych.
Zrozum - to fajnie, że Ty się orientujesz w tym programie, ale już tak kolorowo nie jest, gdy patrzy nań ktoś inny.

Nawet w tym fragmencie nie wiadomo tak w sumie co się dzieje i można jedynie przypuszczać, że to jakieś sortowanie (pętle + swap, które dają złudzenie jakiegoś bubblesorta czy kij wie co), bo:

  1. Masz beznadziejne nazwy zmiennych (c? d? swap? może od razu ponazywaj je zmienna_1 i zmienna_2)
  2. Nie wydzieliłeś tego do osobnej funkcji
  3. Ten kod jest kijowo sformatowany.
0
  1. Formatowanie: http://4programmers.net/Forum/998482
  2. inkrementacja: http://4programmers.net/Forum/1101404
  3. Polskie nazewnictwo: http://4programmers.net/Forum/1208091
  4. Albo dodać do struktury pole -> unsigned poprzedni_numer_wiersza; Albo nie sortować tej tablicy zaś zrobić tablicę size_t order[500]; wypełnić indeksami 0..n-1 porównywać: st[order[i]].liczba <-> st[order[k]].liczba wymieniać order[i] <-> order[k]

1 użytkowników online, w tym zalogowanych: 0, gości: 1