Funktsioonid Tagastusega funktsioonid Funktsioonidele on omane Deklaratsioon Nimetus

  • Slides: 13
Download presentation
Funktsioonid Tagastusega funktsioonid

Funktsioonid Tagastusega funktsioonid

Funktsioonidele on omane • Deklaratsioon • • Nimetus Tagastatav andmetüüp Argumendid -> parameetrid Keha

Funktsioonidele on omane • Deklaratsioon • • Nimetus Tagastatav andmetüüp Argumendid -> parameetrid Keha (laused) • Prototüüp • Väljakutse • Kommentaar 2019 Risto Heinsar 2

Funktsiooni kuju tagastatav_andmetüüp Funktsiooni. Nimi(parameetrid) { laused; } 2019 Risto Heinsar 3

Funktsiooni kuju tagastatav_andmetüüp Funktsiooni. Nimi(parameetrid) { laused; } 2019 Risto Heinsar 3

Funktsiooni tagastus • Funktsioon saab tagastada oma töö tulemusena väärtuse • C keeles saab

Funktsiooni tagastus • Funktsioon saab tagastada oma töö tulemusena väärtuse • C keeles saab selleks olla üks number, tähemärk, … • Funktsioonil ei pea olema tagastust - kui ei leia midagi uut, ära tagasta! • Tagastusena märgitakse vaid andmetüüp, nt • • • 2019 void int double char … (tagastuseta funktsioon) (funktsioon peab tagastama täisarvu) (funktsioon peab tagastama murdarvu) (funktsioon peab tagastama tähemärgi) Risto Heinsar 4

Funktsiooni kommentaar /** * Description: Asks the user for an integer in between the

Funktsiooni kommentaar /** * Description: Asks the user for an integer in between the selected limits. * Repeats until the requirements are met and returns the number. * Outputs a warning when input is out of range. * * Parameters: min - integer, lower limit for the user input (inclusive) * max - integer, upper limit for the user input (inclusive) * * Return: Integer - number within the specified limits */ int Get. In. Range(int min, int max) 2019 Risto Heinsar 5

Meeldetuletuseks • Massiivi ei saa tagastada, küll aga kaasa anda (originaalandmete töötlemine, by reference,

Meeldetuletuseks • Massiivi ei saa tagastada, küll aga kaasa anda (originaalandmete töötlemine, by reference, pointer) • Andes funktsiooni kaasa massiiv, tuleks üldjuhul anda ka selle massiivi suurus • Funktsiooni kaasa antud üksiku väärtuse muudatused ei kajastu väljaspool seda funktsiooni (väärtuse koopia, by value) • Muutujate nimetused kehtivad vaid funktsioonis, kus nad on deklareeritud (skoop) • Erinevates funktsioonides olevad samanimelised muutujad ei ole samad • Me ei saa manipuleerida teises funktsioonis loodud muutuja väärtust sealse nime alusel 2019 Risto Heinsar 6

Meeldetuletuseks 2 • Muutujad, mille väärtus pole oluline väljaspool konkreetset funktsiooni, deklareeritakse lokaalsetena (ei

Meeldetuletuseks 2 • Muutujad, mille väärtus pole oluline väljaspool konkreetset funktsiooni, deklareeritakse lokaalsetena (ei anta kaasa) • Lokaalses muutujas olev väärtus „unustatakse“ pärast funktsiooni tööd • Näiteks • Leides funktsiooni sees massiivi liikmete summa, deklareeritakse selleks muutuja funktsiooni sees ja tagastatakse tulemus • Ajutine muutuja mullsordile omab olulisust vaid sorteerimise ajal • Tsükliloendur massiivi läbi käimiseks omab olulist väärtust vaid antud tsükli sees 2019 Risto Heinsar 7

Näide (1) int Sum. Array. Members(int numbers[], int arr. Len) { int sum, i;

Näide (1) int Sum. Array. Members(int numbers[], int arr. Len) { int sum, i; sum = 0; for (i = 0; i < arr. Len; i++) { sum += numbers[i]; } return sum; } 2019 Risto Heinsar 8

Näide (2) #include <stdio. h> int Sisesta. Arv(); int main(void) { int sisestus; sisestus

Näide (2) #include <stdio. h> int Sisesta. Arv(); int main(void) { int sisestus; sisestus = Sisesta. Arv(); printf("Saadud arv on %dn", sisestus); return 0; } 2019 int Sisesta. Arv() { int arv; do { printf("Anna positiivne t 2 isarv!n> "); scanf("%d", &arv); } while (arv <= 0); return arv; } Risto Heinsar 9

Näide (3) #include <stdio. h> #include <stdlib. h> #include <time. h> void Populate. Array(int

Näide (3) #include <stdio. h> #include <stdlib. h> #include <time. h> void Populate. Array(int arr[], int n) { int i; #define NUM_COUNT 10 #define MAX_NUM 100 for (i = 0; i < n; i++) { arr[i] = Gen. Pos. Int. Upto(MAX_NUM); void Populate. Array(int arr[], int n); int Gen. Pos. Int. Upto(int max); int main(void) { srand(time(NULL)); int numbers[NUM_COUNT]; Populate. Array(numbers, NUM_COUNT); return 0; } 2019 } } int Gen. Pos. Int. Upto(int max) { return rand() % max; } Risto Heinsar 10

Tunnitöö (tagastusega funktsioonid) • Loo programm, mis sisaldab järgmisi funktsioone: • Küsib kasutajalt 5

Tunnitöö (tagastusega funktsioonid) • Loo programm, mis sisaldab järgmisi funktsioone: • Küsib kasutajalt 5 täisarvu, kuid ise arve ei loe, kutsub järgmise funktsiooni nende lugemiseks ja salvestab tagasi saadud arvu massiivi (tagastuseta) • Loeb klaviatuurilt ühe arvu vahemikus -100 … 100 Seda funktsiooni kutsub välja eelnev funktsioon viis korda, iga kord tagastatakse üks number • • Leiab arvude summa Leiab arvude aritmeetilise keskmise (näita kaks komakohta!) Leiab suurima arvu (ära sorteeri!) Leiab vähima arvu (ära sorteeri!) • Viimased 4 funktsiooni peavad oma töö lõpus tagastama tulemuse. Tulemus väljastatakse main() funktsioonis. Väljatrükki alamfunktsioonides endis ei tohi olla 2019 Risto Heinsar 11

Tüüpvead • Massiivi suurust ei edastata • Aritmeetilise keskmise leidmiseks sooritatakse täisarvude jagamine •

Tüüpvead • Massiivi suurust ei edastata • Aritmeetilise keskmise leidmiseks sooritatakse täisarvude jagamine • Aritmeetilise keskmise ja summa leidmise koodid sisaldavad osaliselt sama koodi • Vähima ja/või suurima leidmiseks sorteeritakse massiiv 2019 Risto Heinsar 12

Edasijõudnutele • Loo menüülahendus, kus kasutaja saab ise valida sobiva tegevuse, sh sisestada massiivi

Edasijõudnutele • Loo menüülahendus, kus kasutaja saab ise valida sobiva tegevuse, sh sisestada massiivi uued arvud • Leia ekstreemumite (min ja max) väärtused samas funktsioonis ühe korraga 2019 Risto Heinsar 13