May 1, 2025, Thursday, 120

C/Zad5 2016

From MJanik

(Difference between revisions)
Jump to: navigation, search
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).