Sortowanie w postaci funkcji w języku C.

0

Witam wszystkich użytkowników, mam problem z zadaniem z informatyki. Przerabiamy teraz funkcje w języku C i od dłuższego czasu siedzę nad jednym zadaniem z zestawu od nauczyciela.
W zadaniu mam polecenie aby zaimplementować w postaci funkcji jeden z algorytmów sortowania w kodzie programu podanym przez nauczyciela. Wygląda on następująco:

#include <stdio.h>
int main()


{
int tablica[100], n, c, d, zamien;
printf("Podaj liczbe elementow tablicy\n");
scanf("%d", &n);
printf("Podaj %d elementy\n", n);
for (c = 0; c < n; c++)
scanf("%d", &tablica[c]);
for (c = 0 ; c < n - 1; c++)
{
for (d = 0 ; d < n - c - 1; d++)
{
if (tablica[d] > tablica[d+1])
{
zamien = tablica[d];
tablica[d] = tablica[d+1];
tablica[d+1] = zamien;
}
}
}
printf("Tablica posortowana rosnaco:\n");
for (c = 0; c < n; c++)
printf("%d\n", tablica[c]);
return 0;
}

Bardzo proszę o pomoc bo brakuje mi już pomysłów jak to wykonać, pozdrawiam.

3
marco04 napisał(a):

Witam wszystkich użytkowników, mam problem z zadaniem z informatyki. Przerabiamy teraz funkcje w języku C i od dłuższego czasu siedzę nad jednym zadaniem z zestawu od nauczyciela.

W zadaniu mam polecenie aby zaimplementować w postaci funkcji jeden z algorytmów sortowania w kodzie programu podanym przez nauczyciela. Wygląda on następująco:

No to zacznij od zdefiniowania prototypu funkcji sortowania, bo nie masz nawet tego (wszystko siedzi ci w main).

5

Bardzo proszę o pomoc bo brakuje mi już pomysłów jak to wykonać

  1. Napisz funkcję np. void sort( int* tablica, int n )
  2. Przenieś do niej część kodu odpowiedzialnego za sortowanie
  3. Wywołaj funkcję z main
0

Zrobiłem to w taki sposób:

#include <stdio.h>
int sort( int *tablica, int n, int c )
{
	
for (c = 0; c < n; c++)

return tablica[c];
}

int main()

{
int tablica[100], n, c, d, zamien;
printf("Podaj liczbe elementow tablicy\n");
scanf("%d", &n);
printf("Podaj %d elementy\n", n);
for (c = 0; c < n; c++)
scanf("%d", &tablica[c]);
for (c = 0 ; c < n - 1; c++)
{
for (d = 0 ; d < n - c - 1; d++)
{
if (tablica[d] > tablica[d+1])
{
zamien = tablica[d];
tablica[d] = tablica[d+1];
tablica[d+1] = zamien;
}
}
}
int s=sort(tablica,n,c); 
printf("Tablica posortowana rosnaco:\n %d\n",s);
return 0;

}

Jednak zamiast posortowanej tablicy wyświetla mi tylko jej najmniejszą liczbę. Nie wiem gdzie dalej robię błąd.

1

No nie działa ci bo ten kod

int sort(int * tablica, int n, int c) {

  for (c = 0; c < n; c++)

    return tablica[c];
}

to nie jest poprawny kod sortujący tablicę :(
Coś za dużo wyciąłeś przy refaktorze

0

Próbowałem już zrobić to na różne sposoby, ale ciągle wychodzą mi jakieś błędy przy kompilowaniu. Najgorsze jest to, że nie ma mi kto tego wytłumaczyć bo nauczyciela więcej na lekcjach nie ma niż jest, już o tym co mamy na zdalnych lekcjach to nie wspomnę. Nie chcę wycinać i wklejać tego kodu metodą prób i błędów, ale nigdzie nie mogę znaleźć nawet wskazówek jak to zrobić dobrze. Program do sortowania tablicy był już napisany w zadaniu, na lekcjach też się tego za dobrze nie nauczyliśmy.

0

Jest to jeden ze sposobów posortowania tablicy. Napisałem ci praktycznie cały kod teraz jedynie przeanalizuj jak on działa (rozrysuj sobie spokojnie w notatniku czym jest tab[i] oraz tab[j] i działanie pętli for). Dodam tylko, że zmienna bufor jest do przetrzymania liczby aby nie uciekła ona podczas zamiany miejscami w tabeli. Takie małe wyzwanie dla ciebie.

void sort( int *tab, int n)
{
    int i,j;
    int bufor;
    for(i = 0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(tab[i] < tab[j])
            {
                //Dokoncz 
            }

        }

    }
    for(i = 0; i<n;i++)
    {
        printf("%d, ",tab[i]);
    }

}
1
marco04 napisał(a):

Zrobiłem to w taki sposób:

#include <stdio.h>
int sort( int *tablica, int n, int c )
{
	
for (c = 0; c < n; c++)

return tablica[c];
}
....

Jednak zamiast posortowanej tablicy wyświetla mi tylko jej najmniejszą liczbę. Nie wiem gdzie dalej robię błąd.

  1. czemu gubisz wcięcia w kodzie?
  2. w pierwotnym kodzie sortowanie było bardziej złożone, za mało przenisłeś z main do sort dlatego nie działa.
  3. w kodzie wyjściowym masz w zasadzie wszystko, jedynie trzeba dostrzec gdzie są początki i końce wczytywania wypisywani i sortowania. Następnie wszystko odpowiednio podzielić na funkcje. To jest tylo cut-paste + uzupełnienie zmiennych, które były współdzielone (mają być skopiowane do kilku miejsc).

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