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 }
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
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
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ę.
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)
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)