SOISK - SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE
Tomasz Puchała

Zadaniepobieranie

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..




#include <stdio.h>


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 liczbnn");
for (a = 0; a < 20; a++)
{
printf("Podaj liczbę numer %d :", a);
scanf("%d", &i);
tablica[a] = i;
system("cls");
}



printf("Wprowadzono dwadzieścia liczbnn");
printf("nLiczby przed sortowaniem to :nn");

wyswietl (tablica, 0, 20);

printf("n");

sortowanie (tablica, 0, (0+20)/2);
sortowanie (tablica, ((0+20)/2)+1, 20);

printf("Liczby po sortowaniu to :nn");
printf("Pierwsza połówka tablicy to :nn");

wyswietl (tablica, 0, (0+20)/2);
printf("n");
printf("nDruga połówka tablicy to :nn");
wyswietl (tablica, ((0+20)/2)+1, 20);

system("PAUSE");
return 0;
}