witam mam taki program do wykonania:
ZADANIE: Napisz w języku C program, który pobiera od użytkownika 20 liczb zapisując je do tablicy.
Następnie jedną połowę tablicy przekazuje do posortowania jednej procedurze, potem drugą połowę – drugiej
procedurze (w rzeczywistości może to być ta sama procedura dla obu połówek tablicy – trzeba jedynie
pamiętać o odpowiednich parametrach przekazywanych do procedury podczas jej wywołania). Po
posortowaniu dowolną metodą połówek tablicy wyświetl je i przekaż do ostatniej procedury, która dokona
scalenia tablicy w jedną, posortowaną całość. Wyświetl rezultat końcowy.
Wskazówki:
Ostatni etap sortowania opisany powyżej występuje w informatyce pod nazwą „scalanie” lub „merge”. W
związku z tym, że obie połówki mogą być sortowane niezależnie, powyższy problem nadaje się idealnie do
zrównoleglenia (co będzie tematem kolejnych zajęć laboratoryjnych). Do sortowania obu połówek można
wykorzystać dowolną z metod, np. QuickSort, InsertionSort, BubbleSort, itp..
i mam taki oto kod programu:
#include
int sortowanie (int tablica[], int pocz, int kon)
{
int i,a,tmp;
for ( i = pocz; i < kon; i++ )
for ( a = pocz; a < kon; a++ )
if ( tablica[a] > tablica[a+1] )
{
tmp = tablica[a];
tablica[a] = tablica[a+1];
tablica[a+1] = tmp;
}
}
int wyswietl (int tablica[], int pocz, int kon)
{
int a;
for (a = pocz; a < kon; a++)
{
printf("%d, ", tablica[a]);
}
printf("\n");
}
int main()
{
int tablica[20], a, i;
printf("Podaj dwadzieścia różnych liczb\n\n");
for (a = 0; a < 20; a++)
{
printf("Podaj liczbę numer %d :", a);
scanf("%d", &i);
tablica[a] = i;
system("cls");
}
printf("Wprowadzono dwadzieścia liczb\n\n");
printf("\nLiczby przed sortowaniem to :\n\n");
wyswietl (tablica, 0, 20);
printf("\n");
sortowanie (tablica, 0, (0+20)/2);
sortowanie (tablica, ((0+20)/2)+1, 20);
printf("Liczby po sortowaniu to :\n\n");
printf("Pierwsza połówka tablicy to :\n\n");
wyswietl (tablica, 0, (0+20)/2);
printf("\n");
printf("\nDruga połówka tablicy to :\n\n");
wyswietl (tablica, ((0+20)/2)+1, 20);
system("PAUSE");
return 0;
}
i teraz sedno sprawy jak wywołać funkcję sortuj dla najpierw jednej połówki tablicy 20 elementów, a potem wywołać tą samą funkcję dla drugiej połówki tablicy?
bo jak robię tak jak napisałem to sortuje mi najpierw 11 liczb z pierwszej połówki a w drugiej sortuje mi pozostałe 9 liczb z drugiej połówki
i teraz czy ja to dobrze robię ?
czy da się to zrobić bez dzielenia tablicy na dwie pomocnicze?
daję jeszcze screen jak wygląda wynik działania programu:
bardzo proszę o pomoc
już naprawione naprawdę głupi był to błąd :oops: