October 31, 2024, Thursday, 304

C/Zadanie5 2017

From MJanik

(Difference between revisions)
Jump to: navigation, search
 
(2 intermediate revisions not shown)
Line 3: Line 3:
* Stworzyć alokowaną dynamicznie tablicę <i>tablica</i> (ilość elementów w tablicy powinna zostać pobrana z klawiatury). Tablica powinna zostać w całości zainicjowana wartością 0.  
* Stworzyć alokowaną dynamicznie tablicę <i>tablica</i> (ilość elementów w tablicy powinna zostać pobrana z klawiatury). Tablica powinna zostać w całości zainicjowana wartością 0.  
* Napisać funkcję <b>void hello()</b> wypisująca na ekranie napis "Program prezentujący działania na ciągu liczb!". (0.5 pkt)
* Napisać funkcję <b>void hello()</b> wypisująca na ekranie napis "Program prezentujący działania na ciągu liczb!". (0.5 pkt)
-
* Napisać funkcję wypisującą tablicę <b>void wypisz(const int* tab, int n)</b>. (0.5 pkt)
+
* Napisać funkcję wypisującą tablicę <b>void wypisz(const float* tab, int n)</b>. (0.5 pkt)
-
* Napisać funkcję wypełniającą tablicę losowymi liczbami z zakresu 1-50 <b>void losuj(int* tab, int n)</b> (1 pkt)
+
* Napisać funkcję wypełniającą tablicę losowymi liczbami z zakresu 1-50 <b>void losuj(float* tab, int n)</b> (1 pkt)
-
* Npisać funkcję obliczającą i wypisującą na ekran wartość średnią wczytanej próbki danych: <b>void srednia(const int* tab, int n)</b> (1 p.)
+
* Npisać funkcję obliczającą i '''zwracającą''' wartość średnią wczytanej próbki danych: <b>float srednia(const float* tab, int n)</b> (1 p.)
-
* Napisać funkcję '''zwracającą''' odchylenie standardowe wartości średniej (jak policzyć odchylenie standardowe – patrz '''Uwaga 1''' poniżej) :
+
* Napisać funkcję wypisujaca na ekran odchylenie standardowe wartości średniej (jak policzyć odchylenie standardowe – patrz '''Uwaga 1''' poniżej) :
-
<code>float odchStd(const int* tab, int n)</code>  (1 pkt)
+
<code>void odchStd(const float* tab, int n)</code>  (1 pkt)
-
* Funkcja sortująca tablicę <b>void sortuj(int *tab, int n)</b>. Należy użyć sortowania przez wstawianie.  (1 pkt)
+
* Funkcja sortująca tablicę <b>void sortuj(float *tab, int n)</b>. Należy użyć sortowania przez wstawianie.  (1 pkt)
Sortowanie przez wstawianie (ang. <i>Insert Sort, Insertion Sort</i>) - 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.
Sortowanie przez wstawianie (ang. <i>Insert Sort, Insertion Sort</i>) - 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.
Line 58: Line 58:
<b>Dodatkowe:</b>
<b>Dodatkowe:</b>
-
* Naciśnięcie 7 - funkcja wpisująca dane z pliku do tablicy <b>void wpisz(int* tab, int n, const char* nazwa_pliku)</b>.
+
* Funkcja wpisująca dane z pliku do tablicy <b>void wpisz(float* tab, int n, const char* nazwa_pliku)</b>.
 +
Przykladowy plik: [http://www.if.pw.edu.pl/~lgraczyk/PP2016/lab05/wzrost.txt plik].

Latest revision as of 13:35, 11 April 2017

Napisać program umożliwiający różnorakie działania na ciągu liczb: obliczenie średniej, odchylenia standardowego, sortowanie. Wartości ciągu powinny być losowane. Ilość liczb w ciągu powinna być podawana na początku działania programu (liczba N).

  • 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.
  • Napisać funkcję void hello() wypisująca na ekranie napis "Program prezentujący działania na ciągu liczb!". (0.5 pkt)
  • Napisać funkcję wypisującą tablicę void wypisz(const float* tab, int n). (0.5 pkt)
  • Napisać funkcję wypełniającą tablicę losowymi liczbami z zakresu 1-50 void losuj(float* tab, int n) (1 pkt)
  • Npisać funkcję obliczającą i zwracającą wartość średnią wczytanej próbki danych: float srednia(const float* tab, int n) (1 p.)
  • Napisać funkcję wypisujaca na ekran odchylenie standardowe wartości średniej (jak policzyć odchylenie standardowe – patrz Uwaga 1 poniżej) :

void odchStd(const float* tab, int n) (1 pkt)

  • Funkcja sortująca tablicę void sortuj(float *tab, int n). Należy użyć sortowania przez wstawianie. (1 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

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;


Uwaga 1! Odchylenie standardowe wartości średniej:
wzór
Aby policzyć pierwiastek z liczby używamy funkcji sqrt (dla typu double; lub jej wariantu sqrtf dla typu <code?float</code>):
double sqrt (double x);
float sqrtf (float x);
Należy dołączyć bibliotekę: math.h
Do polecenia gcc dokladamy dodatkowo flagę -lm


Obowiązkowo:

  • Zrozumienie, analiza treści, projekt programu + poprawność i estetyka kodu.
  • Należy pamiętać o zwalnianiu pamięci dla dynamicznie zaalokowanej tablicy.


Dodatkowe:

  • Funkcja wpisująca dane z pliku do tablicy void wpisz(float* tab, int n, const char* nazwa_pliku).

Przykladowy plik: plik.