From MJanik
Na laboratoriach pojawią się funkcje (wykład 6). Powrócimy również do pracy na tablicach (wykład 5) oraz struktury switch-case (wykład 3, slajd 11).
<1--
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
-->