May 15, 2024, Wednesday, 135

C/Zadanie5 2015

From MJanik

Jump to: navigation, search

Na laboratoriach pojawią się funkcje (wykład 6). Powrócimy również do pracy na tablicach (wykład 5) oraz ominiętej uprzednio struktury switch-case (wykład 3, slajd 11).



Napisać program umożliwiający różnorakie działania na ciągu liczb: wyszukiwanie najmniejszej i największej wartości, sortowanie. Wartości ciągu powinny być a) ustawiane z klawiatury, b) losowane. Ilość liczb w ciągu powinna być podawana na początku działania programu (liczba N).


Kolejne działania powinny być wykonywane na żądanie użytkownika. Naciśnięcie "0" powinno umożliwić wyjście z programu.

  • Stworzyć alokowaną dynamicznie tablicę tablica (ilość elementów w tablicy powinna zostać pobrana z klawiatury). Tablica powinna zostać w całości zainicjowana wartością 0.
  • Pętla while, w której pobierany jest pojedynczy znak z klawiatury. Naciśnięcie "0" powinno umożliwić wyjście z programu.
  • Funkcja void print() wypisująca instrukcję użytkowania programu na ekran.
  • Pętla switch-case pobierająca numer instrukcji.
  • Funkcja wypisująca tablicę void wypisz(const int* tab, int n).
  • Funkcja wpisująca dane z klawiatury do tablicy void wpisz(int* tab, int n).
  • Funkcja znajdująca największy element w ciągu i zwracająca ją void max(const int* tab, int n). Liczba powinna zostać wypisana na ekran we wnętrzu funkcji.
  • Funkcja znajdująca najmniejszy element w ciągu i zwracająca ją int min(const int* tab, int n). Liczba powinna zostać wypisana w funkcji głównej main.

Powyższa część: 5 pkt.


  • Funkcja wypełniająca tablicę losowymi liczbami. (1 pkt)

Należy dołączyć biblioteki:

 #include <stdlib.h>
 #include <time.h>

W funkcji głównej main na początku należy dopisać:

 srand(time(NULL)); //ustawienie ziarna z zegara systemowego by uzyskać losowość ("wartości początkowej" dla generatora liczb losowych)

Wylosowanie pojedynczej liczby z zakresu 0-99:

 int losowa = rand()%100;


Obowiązkowo:

  • Zrozumienie, analiza treści, projekt programu + poprawność i estetyka kodu.
  • Należy pamiętać o zwalnianiu pamięci dla dynamicznie zaalokowanej tablicy.
  • Wszystkie operacje w pętli switch-case powinny być wykonywane przez odpowiednie funkcje.


Dodatkowe:

  • Funkcja sortująca tablicę. Należy użyć sortowania przez wstawianie. (dodatkowe 0.5 pkt)

Sortowanie przez wstawianie (ang. Insert Sort, Insertion Sort) - jeden z najprostszych algorytmów sortowania, którego zasada działania odzwierciedla sposób w jaki ludzie ustawiają karty - kolejne elementy wejściowe są ustawiane na odpowiednie miejsca docelowe.

Schemat działania algorytmu (za wikipedia)

1. Utwórz zbiór elementów posortowanych i przenieś do niego dowolny element ze zbioru nieposortowanego.
2. Weź dowolny element ze zbioru nieposortowanego.
3. Wyciągnięty element porównuj z kolejnymi elementami zbioru posortowanego póki nie napotkasz elementu równego lub elementu większego (jeśli chcemy otrzymać ciąg niemalejący) lub nie znajdziemy się na początku/końcu zbioru uporządkowanego.
4. Wyciągnięty element wstaw w miejsce gdzie skończyłeś porównywać.
5. Jeśli zbiór elementów nieuporządkowanych jest niepusty wróć do punkt 2.

Pseudokod sortowania przez wstawianie sortujący tablicę A:

for i = 1 to length(A) - 1
   x = A[i]
   j = i
   while j > 0 and A[j-1] > x
       A[j] = A[j-1]
       j = j - 1
   end while
   A[j] = x[3]
end for