From MJanik
(Difference between revisions)
|
|
Line 2: |
Line 2: |
| | | |
| <hr> | | <hr> |
- | <!--
| + | |
- | Napisać program umożliwiający różnorakie działania na ciągu liczb: wyszukiwanie największej wartości, wyszukiwanie najmniejszej wartości oraz sortowanie. Wartości ciągu powinny być a) wczytywane z pliku, b) losowane. Ilość liczb w ciągu powinna być podawana na początku działania programu (liczba <b>N</b>). | + | Napisać program umożliwiający różnorakie działania na ciągu liczb: wyszukiwanie największej wartości, wyszukiwanie najmniejszej wartości oraz sortowanie. Wartości ciągu powinny być a) wczytywane z klawiatury, b) losowane. Ilość liczb w ciągu powinna być podawana na początku działania programu (liczba <b>N</b>). |
| | | |
| Kolejne działania powinny być wykonywane na żądanie użytkownika. Naciśnięcie "0" powinno umożliwić wyjście z programu. | | Kolejne działania powinny być wykonywane na żądanie użytkownika. Naciśnięcie "0" powinno umożliwić wyjście z programu. |
Line 11: |
Line 11: |
| * Funkcja <b>void print()</b> wypisująca instrukcję użytkowania programu na ekran. | | * Funkcja <b>void print()</b> wypisująca instrukcję użytkowania programu na ekran. |
| * Naciśnięcie 1 - funkcja wypisująca tablicę <b>void wypisz(const int* tab, int n)</b>. | | * Naciśnięcie 1 - funkcja wypisująca tablicę <b>void wypisz(const int* tab, int n)</b>. |
- | <!-- * Naciśnięcie 2 - funkcja wpisująca dane z pliku do tablicy <b>void wpisz(int* tab, int n, const char* nazwa_pliku)</b>. -->
| + | |
- | <!--
| + | |
| * Naciśnięcie 2 - funkcja wpisująca dane z klawiatury do tablicy <b>void wpisz(int* tab, int n)</b>. | | * Naciśnięcie 2 - funkcja wpisująca dane z klawiatury do tablicy <b>void wpisz(int* tab, int n)</b>. |
| * Naciśnięcie 3 - funkcja znajdująca największy element w ciągu i zwracająca ją <b>void max(const int* tab, int n)</b>. Liczba powinna zostać wypisana na ekran we wnętrzu funkcji. | | * Naciśnięcie 3 - funkcja znajdująca największy element w ciągu i zwracająca ją <b>void max(const int* tab, int n)</b>. Liczba powinna zostać wypisana na ekran we wnętrzu funkcji. |
Line 57: |
Line 56: |
| j = j - 1 | | j = j - 1 |
| end while | | end while |
- | A[j] = x[3] | + | A[j] = x |
| end for | | end for |
| | | |
| | | |
- | | + | * Naciśnięcie 7 - funkcja wpisująca dane z pliku do tablicy <b>void wpisz(int* tab, int n, const char* nazwa_pliku)</b>. |
- | | + | |
- | -->
| + | |
Revision as of 14:16, 13 April 2016
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).
Napisać program umożliwiający różnorakie działania na ciągu liczb: wyszukiwanie największej wartości, wyszukiwanie najmniejszej wartości oraz sortowanie. Wartości ciągu powinny być a) wczytywane 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 oraz pętla switch-case pobierająca numer instrukcji. Naciśnięcie "0" powinno umożliwić wyjście z programu. Naciśnęcie dowolnego klawisza wyświetla instrukcję.
- Funkcja void print() wypisująca instrukcję użytkowania programu na ekran.
- Naciśnięcie 1 - funkcja wypisująca tablicę void wypisz(const int* tab, int n).
- Naciśnięcie 2 - funkcja wpisująca dane z klawiatury do tablicy void wpisz(int* tab, int n).
- Naciśnięcie 3 - 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.
- Naciśnięcie 4 - 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.
- Naciśnięcie 5 - funkcja wypełniająca tablicę losowymi liczbami z zakresu 1-50 void losuj(int* tab, int n) (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:
- Naciśnięcie 6 - unkcja sortująca tablicę void sort(int *tab, int n). 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
end for
- Naciśnięcie 7 - funkcja wpisująca dane z pliku do tablicy void wpisz(int* tab, int n, const char* nazwa_pliku).