Funkcje oraz sortowanie

Dzisiaj uczymy się używać funkcji. Funkcje służą opakowaniu czynności które powtarzamy w różnych kontekstach. Np. funkcje zamiany znaku na liczbę i na odwrót. Zamiast powtarzać ten kawałek kodu, piszemy go raz przed funkcją main w 'pudełku' zwanym funkcją, a potem wykorzystujemy odwołując się do nazwy naszej funkcji zmieniając tylko argument w zależności od kontekstu.

nazwa_typu_zwracanego nazwa_funkcji(typ_argumentu1 argument1){
/* tutaj jest ciało funkcji */
nazwa_typu_zwracanego zmienna;
.
.
.
return zmienna; /* tu zwracamy wartość funkcji */
}

Na przykład:

char wez_litere(void){ // ta funkcja nie ma argumentu
char litera;
scanf("%c",&litera);
return litera; // zwraca wartość litery pobranej z klawiatury
}

Teraz zamiast tradycyjnego scanf, z ampersantem itp itd, możemy używać funkcji wez_litere w taki sposób:

char znak;
znak = wez_litere();

Ta funkcja jest mało ciekawa, bo nie bierze argumentu. Oto drugi przykład:


float srednia(int a, int b){
float sred;
   sred = ((float)(a + b)) / 2; /*rzutujemy na typ float,żeby dzielenie było
                                     na liczbie zmiennoprzecinkowej */
return sred; //zwracamy wynik
}

Zad 1. Pierwsza funkcja - bawimy się typami argumentu i wyniku

Napisz funkcję o nazwie progowa która pobiera 2 argumenty typu całkowitego, mnoży je przez siebie i zwraca literę a jeśli iloczyn jest większy od 100 oraz literę b kiedy iloczyn jest mniejszy od 100. Jeśli wynik jest dokładnie równy 100, funkcja zwraca literę c . Użyj tej funkcji w programie main, który ma prosić użytkownika o liczbę, i wypisywać literę którą zwraca funkcja. Oto przykładowe wywołania programu:

Podaj dwie liczby : 10 10
c
Podaj dwie liczby: 5 3
b
Podaj dwie liczby: 5 200
a

Zad 2 Równanie kwadratowe

Opierając się na zadaniu 1, napisz funkcję, która pobierając argumenty a, b i c typu double zwraca ilość pierwiastków równania kwadratowego a x*x + bx + c jeśli są, a 0 jeśli ich nie ma. Zwróć uwagę, że funkcja zwraca liczbę całkowitą, więc jej typ powinien być int.
Następnie dopisz program, który wykorzystuje tą funkcję i testuje jej działanie. Oto przykładowe wywołania programu:

Podaj współczynniki  a b i c w tej kolejności: 
3 
0
1
Pierwiastków równania 3 x*x + 0 x + 1 jest 0
Podaj współczynniki a b i c w tej kolejności:
1
-2
1
Pierwiastki równania 1 x*x + -2 x + 1 jest 1

Zad 3 Sorotowanie

Napisz funkcję sort która przyjmuje dwa argumenty : tablicę liczb całkowitych oraz jej długość i sortuje ją używając algorytmu przez wstawianie . Tutaj jest link do opisu pseudokodu tego algorytmu . Sprawdź jej działanie sortując wpisaną "na sztywno" w programie tablicę A. Uwaga: algorytm z wikipedii zakłada że sortowana macierz numerowana jest od 1 a nie od 0. Proszę przesunąć odpowiednie zmienne w tym algorytmie, aby program brał to pod uwagę.

Zad 4 Obliczanie średniej

Napisz funkcję o nazwie srednia , która pobiera jako argument tablicę liczb typu float tab oraz liczbę naturalną n, i zwraca wartość średnią liczb z tej tablicy. Jako długość tablicy przyjmij 30.
Uwaga1: przy deklaracji funkcji użyj tab[] (funkcja nie potrzebuje znać wielkości tablicy 1-wymiarowej)
Uwaga2: przy wywołaniu funkcji jako argument wpisz tab oraz n (funkcja potrzebuje adres zerowego elementu tablicy i jest to tab)

Zad 5 Zamienianie kodu na kod z użyciem funkcji

Wybierz dowolne z zadań z minionych lab 2-7 i rozwiąż je z wykorzystaniem funkcji, to znaczy zastąp jakiś (najlepiej dłuższy lub powtarzający się) fragment kodu wywołaniem funkcji, zaś kod przenieś do funkcji dbając aby zwracała ona odpowiedni wynik i aby powstały program nadal dział poprawnie.
(dla przykładu fragment kodu sprawdzający czy dana litera jest w tablicy w zadaniu z "wisielcem" możesz zmienić na funkcję która zwraca 0 gdy nie ma litery zaś 1 gdy litera jest)