November 1, 2024, Friday, 305

C/Zadanie5 2017

From MJanik

(Difference between revisions)
Jump to: navigation, search
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(int* tab, int n, const char* nazwa_pliku)</b>.
 +
Przykladowy plik: [http://www.if.pw.edu.pl/~lgraczyk/PP2016/lab05/wzrost.txt plik].

Revision as of 12:46, 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 int* tab, int n). (0.5 pkt)
  • Napisać funkcję wypełniającą tablicę losowymi liczbami z zakresu 1-50 void losuj(int* tab, int n) (1 pkt)
  • Npisać funkcję obliczającą i wypisującą na ekran wartość średnią wczytanej próbki danych: void srednia(const int* tab, int n) (1 p.)
  • Napisać funkcję zwracającą odchylenie standardowe wartości średniej (jak policzyć odchylenie standardowe – patrz Uwaga 1 poniżej) :

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

  • Funkcja sortująca tablicę void sortuj(int *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(int* tab, int n, const char* nazwa_pliku).

Przykladowy plik: plik.