Język C udostępnia zbiór podstawowych funkcji zawartych w tzw. bibliotece standardowej.
Oto kilka przydatnych plików nagłówkowych dostępnych w każdej wersji języka C:
sin()
, cos()
, sqrt()
, potęga pow()
log()
, logarytm dziesiętny log10()
, funkcja wykładnicza exp()
isupper()
sprawdza, czy znak jest mała literą, toupper()
zamienia mała literę na dużąrand()
generator liczb losowych exit()
zamknięcie programu system()
uruchomienie polecenia systemowegostrcmp()
porównanie kolejności alfabetycznej dwóch napisówstrcpy()
skopiowanie napisuclock()
czas wykonywania programutime()
czas, który upłynął od dnia 1 stycznia 1970 roku
Chcąc skorzystać z funkcji z biblioteki należy na początku pliku włączyć odpowiedni plik nagłówkowy za pomocą dyrektywy #define
.
Przykładowo, funkcja obliczająca pierwiastek kwadratowy sqrt()
jest dostępna w bibliotece math.h
.
Poniższy przykład demonstruje sposób użycia tej funkcji:
#include<math.h> #include<stdio.h> int main() { float x, y; scanf("%f", &x); y = sqrt(x); printf("Pierwiastek z %f wynosi %f\n", x, y); }
Zapoznaj się z funkcjami matematycznymi dostępnymi w bibliotece math.h a następnie zaimplementuj jedną z poniższych funkcji:
sigmoida()
, która dla danej wartości rzeczywistej $x$ zwraca wartość funkcji sigmoidalnej (logistycznej) danej wzorem \[ f(x) = \frac{1}{1+e^{-x}}\] fx()
, która dla danej wartości rzeczywistej $x$ zwraca wartość \[ f(x) = \frac{x^{2.7} + \log_{10}(x)}{1+ \sqrt{\cos^2(x) + 1}} \]gauss()
, która wyznacza wartość funkcji Gaussa podanej wzorem: \[ f(x) = \frac{1}{\sigma\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} \] gauss()
będzie posiadała trzy argumenty ($x$, $\mu$, $\sigma$), które są wartościami rzeczywistymi. Parametr $\mu$ określa centrum funkcji, zaś parametr $\sigma$ określa „szerokość” funkcji. W pliku math.h
może brakować definicji stałej $\pi$, wówczas przyjmij przybliżenie $\pi \approx 3,1415$Napisz program, który tablicuje wartości jednej z powyższych funkcji $f(x)$ w przedziale $[a,b]$. Program wypisuje w kolejnych liniach $n$ wartości $x$ z przedziału od $a$ do $b$ ze stałym krokiem oraz odpowiadające wartości funkcji $f(X)$ tak jak na poniższym przykładzie.
Dane wejściowe programu:
Dane wyjściowe prigramu:
Przykład działania programu:
Zakładając, że w programie zaimplementowano funkcję sigmoid()
przykładowy wynik działania programu może wyglądać tak:
Wartosc minimalna: -5 Wartośc maksymalna: +5 Ile krokow: 10 x f(x) ---------------------- -5.000000 0.006693 -4.000000 0.017986 -3.000000 0.047426 -2.000000 0.119203 -1.000000 0.268941 0.000000 0.500000 1.000000 0.731059 2.000000 0.880797 3.000000 0.952574 4.000000 0.982014 5.000000 0.993307
Argumentem funkcji może być również tablica, wówczas definicja funkcji wygląda w następujący sposób:
void funkcja(int tablica[]) { int x; x = tablica[2]; }
Zwróć uwagę, że tablica deklarowana w argumencie (int tablica[]
) nie zawiera informacji o rozmiarze.
Wewnątrz funkcji nie ma informacji o tym jak dużo elementów mieści tablica.
W przypadku funkcji, które mają działać dla dowolnie dużych tablic, informacja o rozmiarze musi być przekazana wartością drugiego argumentu.
Przykład definicji funkcji, która liczy sumę n
elementów tablicy tab
:
float suma(float tab[], int n) { float s = 0; int i = 0; while( i < n ) { s = s + tab[i]; i = i + 1; } return s; }
Wywołanie funkcji, której argumentem jest tablica nie różni się niczym od wywołania funkcji, której argumentami są zmienne typów prostych. W argumencie funkcji podajemy nazwę tablicy.
Przykład:
int main() { float t[100], x; t[0] = 5; t[1] = 2; x = suma(t, 2); }
Tablica, która jest argumentem funkcji, nie jest kopiowana do funkcji, tj. funkcja działa na oryginalnej tablicy i może zmodyfikować jej zawartość.
#include <stdio.h> #define MAX 100 void wczytaj(float t[], int n) { int i; printf("\nPodaaj kolejne liczby:\n"); for(i=0;i<n;i++) { printf("tab[%d]=",i); scanf("%f",&t[i]); } } float suma(float tab[], int n) { float s = 0; int i; for(i=0; i < n; i++) s = s + tab[i]; return s; } int main() { int n; float tablica[MAX], x; printf("Podaj rozmiar tablicy: "); scanf("%d", &n); wczytaj(tablica, n); x = suma(tablica, n); printf("Suma liczb wynosi %f\n", x); return 0; }
Zdefiniuj funkcję o nazwie wymieszaj()
, która przestawi w sposób losowy pozycję liczb znajdujących się w tablicy.
Argumenty funkcji:
n
określająca ilość liczb znajdujących się w tablicy Wartość zwracana:
Algorytm mieszania liczb ciągu $n$ liczb: dla każdego elementu ciągu $x_i$ o indeksie $i=0, 1, 2, \ldots, n-1$ wylosuj wartość całkowitą $k$ z zakresu od 0 do $n-1$ i zamień wartości elementu $i$-tego $x_i$ z elementem $k$-tym $x_k$.
Do losowania liczb całkowitych wykorzystaj funkcję rand()
z biblioteki stdlib.h
.
int rand(void);
Funkcja ta przy każdym uruchomieniu zwraca liczbę całkowitą pseudolosową z zakresu od 0 do wartości określonej przez RAND_MAX
. Generator liczb losowych można zainicjować za pomocą funkcji srand()
void srand(int seed);
Chcąc uzyskać za każdym razem inny ciąg liczb najwygodniej jest zainicjować generator wartością związaną z aktualnym czasem: funkcja time()
z biblioteki time.h
zwraca liczbę sekund, które upłynęły od dnia 1 stycznia 1970 roku godziny 0:00:00 czasu uniwersalnego.
Napisz program, który korzystając z funkcji wymieszaj()
przeprowadzi losowanie lotto, tj. wypisze 6 losowych wartości z zakresu od 1 do 49.
1. wypełnij bęben losujący kulami ponumerowanymi od 1 do 49
2. dokonaj losowania (wymieszanie zawartości bębna losującego)
3. wypisz numery 6 kul znajdujących się na początku
Zdefiniuj dwie funkcje o nazwie srednia()
oraz odchylenie()
zgodnie z poniższa specyfikacją.
Funkcja srednia()
wyznacza średnią arytmetyczną n
liczb rzeczywistych umieszczonych w tablicy.
Argumenty funkcji:
n
określająca ilość liczb znajdujących się w tablicy Wartość zwracana:
\[ \bar{x}=\frac{1}{n}\sum_{i=1}^n x_i\]
Funkcja odchylenie()
wyznacza wartość odchylenia standardowego liczb zawartych w tablicy.
Odchylenie standardowe dla $n$ wartości $x_1, x_2, \ldots, x_n$ wyznacz ze wzoru: \[ s=\sqrt{\frac{1}{n-1}\sum_{i=1}^n\left(x_i - \bar{x}\right)^2} \] gdzie $\bar{x}$ oznacza wartość średnią.
Argumenty funkcji:
n
określająca ilość liczb znajdujących się w tablicy Wartość zwracana:
Napisz program, który korzystając z funkcji srednia
i odchylenie
wyznaczy i wyświetli wartość średnią oraz wartość odchylenia standardowego n
podanych przez użytkownika liczb rzeczywistych. Zakładamy, że liczb nie będzie więcej niż 1000. Wartość n
oraz ciąg n
liczb podaje użytkownik na początku działania programu.
Przykład:
Ile elementow ? n = 5 Wprowadz liczby t[0] = 5.3 t[1] = 2.3 t[2] = -5.4 t[3] = 3.14 t[4] = 32 Srednia = 7.468000 Odchylenie = 12.787060