F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare felsökning Större möjlighet till återanvändning
F4 - Funktioner & parametrar 2 Programmeringsteknik, 4p vt-00 Egna funktioner returtyp funktionsnamn(parameterlista) { deklarationer satser } kropp huvud
F4 - Funktioner & parametrar 3 Programmeringsteknik, 4p vt-00 exempel int maximum(int a, int b) { if (a > b) return a; else return b; } /* maximum */ returvärde Formella parametrar returtyp int x,y,z; x=2; y=3; z=4; z=maximum(x,y); Anrop :
F4 - Funktioner & parametrar 4 Programmeringsteknik, 4p vt-00 …funktioner Returtyp : allt vi sett hittills eller void –Restriktioner kommer senare Funktionsnamn - identifierare Parameterlista typ identifierare, flera separeras med komma –Saknas parametrar void Tumregel : en funktion max en sida
F4 - Funktioner & parametrar 5 Programmeringsteknik, 4p vt-00 return -satsen När satsen nås avbryts funktionen och återhopp sker Kan men behöver inte efterföljas av ett uttryck Ev. uttryck evalueras och resultatet skickas tillbaka Uttryckets värde konverteras om nödvändigt
F4 - Funktioner & parametrar 6 Programmeringsteknik, 4p vt-00...return Noll eller flera return-satser Om return saknas utförs alla satser i kroppen och därefter sker återhopp
F4 - Funktioner & parametrar 7 Programmeringsteknik, 4p vt-00 Prototyper Alla funktioner måste vara deklarerade innan de används Prototyp duger som deklaration Prototyp = funktionshuvudet (identifierarna i param.listan behöver ej vara med, typerna måste vara med) Funktionsdefinitionen fungerar som prototyp
F4 - Funktioner & parametrar 8 Programmeringsteknik, 4p vt-00 Funktionsanrop Ett program består av en eller flera funktionsdefinitioner åtminstone main() Programet startar alltid med main() När ett funktionsnamn förekommer sker ett anrop och funktionen exekveras
F4 - Funktioner & parametrar 9 Programmeringsteknik, 4p vt-00 Parameteröverföring Parametrarna ska överensstämma i typ och antal Varje argument evalueras och värdet kopieras till identifieraren i motsvarande position i funktionen Detta medför att ev. ändringar av parameterns värde i funktionen inte påverkar något i den miljö där anropet gjordes Exempel!
F4 - Funktioner & parametrar 10 Programmeringsteknik, 4p vt-00 Identifierares räckvidd void fun1(int a, int b) { int i,j;... } void fun2(int i, int j) { float a,c;... } void main(void) { float a; int i; fun1(i,i); fun2(a,i)... } existerar bara inom det block de är deklarerade
F4 - Funktioner & parametrar 11 Programmeringsteknik, 4p vt-00 Rekursion Rekursivt definierade problem n! = n·(n-1)! där 0!=1 och 1!=1 Funktioner kan anropa sig själva int nfac(int n) { if (n==0 || n==1) return 1; else return n*nfac(n-1); } /* nfac */
F4 - Funktioner & parametrar 12 Programmeringsteknik, 4p vt-00 Storage class Varje variabel & funktion har typ & ”lagrings”klass auto - default om inget anges, existerar i blocket ”lokala” extern - deklarerad utanför funktion, global till alla efterföljande funktioner -> sök någon annanstans, i samma eller annan fil (ex. s.218) register- minnesberoende static - en lokal variabel behåller sitt värde när ett block åter nås (ex. s.220)
F4 - Funktioner & parametrar 13 Programmeringsteknik, 4p vt-00
F4 - Funktioner & parametrar 14 Programmeringsteknik, 4p vt-00 HiLo - igen Presentera spelet Generera hemligt tal Fråga användaren om gissning Läs in gissning som är acceptabel Om gissning = hemlig tal så skriv ”Helt rätt” annars skriv ut en ledtråd och upprepa Spelet slut Upprepas -till rätt eller maxgissat
F4 - Funktioner & parametrar 15 Programmeringsteknik, 4p vt-00 Presentera spelet Syfte : med hjälp av utskrifter presentera spelet Indata : ingenting Utdata : ingenting Anrop : presentation();
F4 - Funktioner & parametrar 16 Programmeringsteknik, 4p vt-00 Acceptabel gissning Syfte : Kontrollera värdet mot givet intervall om fel skriv felmeddelande och upprepa tills ok Indata : värdet v (heltal) undre gräns minv (heltal) övre gräns maxv (heltal) Utdata : acceptabel gissning Anrop : gissning = valideraGissning(gissning,MIN,MAX);