Spis treści

Funkcje c.d.

Biblioteka standardowa

Język C udostępnia zbiór wielu podstawowych funkcji zawartych w tzw. bibliotece standardowej.
Oto kilka przydatnych plików nagłówkowych dostępnych w każdej wersji języka C:

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:

pierwiastek.c
#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);
}

Zadanie: funkcje matematyczne

Zapoznaj się z funkcjami matematycznymi dostępnymi w bibliotece math.h a następnie zaimplementuj jedną z poniższych funkcji:

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: lista zawierająca $n$ kolejnych wartości $x$ oraz odpowiadających wartości $f(x)$, gdzie $x$ określone jest na odcinku od $a$ do $b$ ze stałym krokiem.

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

Tablica jako argument funkcji

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. Funkcje, 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);
}

Przykład: funkcja wczytująca liczby do tablicy

tab_suma.c
#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;
}

Źródło: tab_suma.c

Zadanie: Statystyki

Do powyższego przykładu prezentującego użycie tablicy jako argumentu funkcji dodaj:

Napisz program, który wczyta n liczb rzeczywistych podanych przez użytkownika a następnie wyświetli wartość średnią oraz wartość odchylenia standardowego podanych liczb. Zakładamy, że liczb nie będzie więcej niż 1000.

Przykład:

Ile elementow ?
n = 5
t[0] = 5.3
t[1] = 2.3
t[2] = -5.4
t[3] = 3.14
t[4] = 32
Suma = 37.340000
Srednia = 7.468000
Odchylenie = 12.787060

Zadanie: Sortowanie przez wybieranie

Do powyższego przykładu programu, który zawiera funkcję wczytaj() dodaj następujące funkcje:

Napisz program, który posortuje n liczb rzeczywistych podanych przez użytkownika korzystając z powyższych funkcji.

Przykład:

Ile elementow ?
n = 5
t[0] = 5.3
t[1] = 2.3
t[2] = -5.4
t[3] = 3.14
t[4] = 32
Posortowane elementy tablicy:
t[0] = -5.400000
t[1] = 2.300000
t[2] = 3.140000
t[3] = 5.300000
t[4] = 32.000000