May 15, 2024, Wednesday, 135

C/Zadanie5 2017

From MJanik

Jump to: navigation, search

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.