logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Sortowanie trójtablicowe w C: zachowanie oryginalnej tablicy, indeksy w trzeciej

rysiudrummer 15 Gru 2015 10:02 1167 4
REKLAMA
  • #1 15242348
    rysiudrummer
    Poziom 2  
    Posty: 4
    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: C#
    Zaloguj się, aby zobaczyć kod


    Wykonuje całą procedurę, ale mam problem z prawidłowym zapętleniem.
    Będę wdzięczny za wszelką pomoc.
    Pozdrawiam.
  • REKLAMA
  • Pomocny post
    #2 15242465
    -psiak-
    Poziom 32  
    Posty: 1185
    Pomógł: 259
    Ocena: 107
    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 / C++
    Zaloguj się, aby zobaczyć kod
    wywołanie:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #3 15242795
    rysiudrummer
    Poziom 2  
    Posty: 4
    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: C#
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #4 15242858
    -psiak-
    Poziom 32  
    Posty: 1185
    Pomógł: 259
    Ocena: 107
    Z tego co widzę zrozumiałeś tylko pkt 1.
    Dla zrozumienia reszty brakuje ci podstaw z podstaw.
    Weź przeczytaj jakiś najkrótszy kurs C.
  • #5 15247408
    penknife
    Poziom 21  
    Posty: 294
    Pomógł: 47
    Ocena: 58
    Ja sugeruję coś w tym stylu:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    P.S. Do testowania C używam Tiny C Compiler

    W załączniku wersja trochę bardziej dynamiczna ;)
    Załączniki:
    • tabs.c (1.18 KB) Musisz być zalogowany, aby pobrać ten załącznik.
REKLAMA