Jak podzielić tabelę na dwie części w C


(klonmarcin) #1

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:

schowek04o.th.jpg

bardzo proszę o pomoc

:slight_smile:

już naprawione naprawdę głupi był to błąd :oops: