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.

Język C:: - Program sortujący trójtablicowy

rysiudrummer 15 Gru 2015 10:02 771 4
  • #1 15 Gru 2015 10:02
    rysiudrummer
    Poziom 2  

    Witam Serdecznie forumowiczów!
    Chciałbym napisać program w języku C, który na podstawie tablicy dziewięcioelementowej (tab[9]) wykonuje sortowanie i zapisuje wyniki w drugiej tablicy (posort[9]). Po posortowaniu pierwsza tablica pozostaje bez zmian, zaś druga zawiera posortowane wartości pierwszej w kolejności od najmniejszej do największej.
    Problem polega na tym, że indeksy kolejnych najmniejszych wartości mają być zaznaczane w wartościach tablicy trzeciej (id[9]) kolejno jako 1. Wszystkie kroki programu mają być później wyświetlone na ekranie. Wyniki miałyby wyglądać przykładowo tak:

    tab[5 8 23 446 223 554 11 2 99]
    id[0 0 0 0 0 0 0 0 0]
    posort[0 0 0 0 0 0 0 0 0]

    tab[5 8 23 446 223 554 11 2 99]
    id[0 0 0 0 0 0 0 1 0]
    posort[2 0 0 0 0 0 0 0 0]

    tab[5 8 23 446 223 554 11 2 99]
    id[1 0 0 0 0 0 0 1 0]
    posort[2 5 0 0 0 0 0 0 0]

    tab[5 8 23 446 223 554 11 2 99]
    id[1 1 0 0 0 0 0 1 0]
    posort[2 5 8 0 0 0 0 0 0]

    tab[5 8 23 446 223 554 11 2 99]
    id[1 1 0 0 0 0 1 1 0]
    posort[2 5 8 11 0 0 0 0 0]

    tab[5 8 23 446 223 554 11 2 99]
    id[1 1 1 0 0 0 1 1 0]
    posort[2 5 8 11 23 0 0 0 0]

    tab[5 8 23 446 223 554 11 2 99]
    id[1 1 1 0 0 0 1 1 1]
    posort[2 5 8 11 23 99 0 0 0]

    tab[5 8 23 446 223 554 11 2 99]
    id[1 1 1 0 0 0 1 1 1]
    posort[2 5 8 11 23 99 0 0 0]

    tab[5 8 23 446 223 554 11 2 99]
    id[1 1 1 0 1 0 1 1 1]
    posort[2 5 8 11 23 99 223 0 0]

    tab[5 8 23 446 223 554 11 2 99]
    id[1 1 1 1 1 0 1 1 1]
    posort[2 5 8 11 23 99 223 446 0]

    tab[5 8 23 446 223 554 11 2 99]
    id[1 1 1 1 1 1 1 1 1]
    posort[2 5 8 11 23 99 223 446 554]

    Program, który udało mi się naskrobać wygląda tak:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Wykonuje całą procedurę, ale mam problem z prawidłowym zapętleniem.
    Będę wdzięczny za wszelką pomoc.
    Pozdrawiam.

    0 4
  • Pomocny post
    #2 15 Gru 2015 10:51
    -psiak-
    Poziom 32  

    1. Inicjalizacja tablicy: int tab[]={15,2,4565,444,55,6666,88,33,99};
    2. Wypełniasz id[] kolejnymi indeksami: for(i=0;i<9;++i) id[i]=i;
    3. Sortujesz w sposób dowolny porównując: tab[id[a]] z tab[id[b]] a wymieniając wartości id[a] z id[b]
    4. Wypełniasz ten posort[] wg id[]: for(i=0;i<9;++i) posort[i]=tab[id[i]];
    5. Zamiast tworzyć wyświetlenie metodą Kopiego Pejsta napisz funkcję:

    Kod: c
    Zaloguj się, aby zobaczyć kod
    wywołanie:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #3 15 Gru 2015 13:50
    rysiudrummer
    Poziom 2  

    Punkty 1 i 5 zrozumiałem i poprawiłem w programie, ale reszty nie mogę ogarnąć. Mógłbym prosić o jakiś przykład, bądź dodatkowe wytłumaczenie?

    Aktualna wersja programu:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • #4 15 Gru 2015 14:24
    -psiak-
    Poziom 32  

    Z tego co widzę zrozumiałeś tylko pkt 1.
    Dla zrozumienia reszty brakuje ci podstaw z podstaw.
    Weź przeczytaj jakiś najkrótszy kurs C.

    0