Funktionens deklaration



Relevanta dokument
TDIU01 - Programmering i C++, grundkurs

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

Objektorienterad programmering

Modul 3 - Modularisering

Föreläsning 6: Metoder och fält (arrays)

TDIU01 - Programmering i C++, grundkurs

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

TDIU01 - Programmering i C++, grundkurs

GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner

C++ - En introduktion

Introduktion C-programmering

Funktioner. Jan Erik Moström,

TDDC76 - Programmering och Datastrukturer

Innehåll. Pekare Exempel

Innehåll. Pekare Exempel

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Innehåll. EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Viktiga skillnader mot Java

Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar

1 Funktioner och procedurell abstraktion

Repetition C-programmering

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

Övningar Dag 2 En första klass

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA

Klassdeklaration. Metoddeklaration. Parameteröverföring

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Föreläsning 5-6 Innehåll

C++ - En introduktion

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Dynamisk bindning och polymorfism

Funktioner. Linda Mannila

Föreläsning 3-4 Innehåll

TDIU01 Programmering i C++

Metoder - en funktion: medel

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Det objektorienterade synsättet. Objekt. Datorprogrammet kan uppfattas som en slags modell av den verklighet programmet skall samverka med.

Föreläsning 2, vecka 8: Repetition

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

Funktioner och programstruktur. Föreläsning 5

Grundkurs Programmering

Metoder (funktioner) Murach s: kap Winstrand Development

Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

Att använda pekare i. C-kod

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

DD2387 Programsystemkonstruktion med C++ Tentamen 2

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Programmeringsteknik med C och Matlab

Funktioner och programstruktur. Föreläsning 5

Rekursion och induktion för algoritmkonstruktion

Objekt och klasser - Introduktion

TDIU01 - Programmering i C++, grundkurs

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00

C++ Slumptalsfunktioner + switch-satsen

1 Namnkontroll (NameControl)

TDDC77 Objektorienterad Programmering

Föreläsning 1: Momstabellen i C++

Enkla datatyper minne

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Objektorientering: Lagring, räckvidd och livstid

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Introduktionslaboration

*Pekarvärden *Pekarvariabler & *

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Parameteröverföring. Exempel. Exempel. Metodkropp

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

TDP002 - Imperativ programmering

Klasshierarkier - repetition

Klasser. Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering.

Introduktion till arv

Introduktionslaboration

Föreläsning 6: Introduktion av listor

Tentamen i Datakunskap NT

Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer

TDIU01 (725G67) - Programmering i C++, grundkurs

Laboration 1. En första bekantskap med C++ Namn: Godkänd den: Rest:

#include <stdio.h> #include <string.h>

C++ Objektorientering - Klasser. Eric Elfving

Introduktion till algoritmer - L0 - Grunder i C++ Matematikgymnasiet, Läsåret L0 - Grunder i C++

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Funk%oner. Vad är det och hur definierar vi en Top- down- programmering lokala globala variabler void och flera inparametrar

Det finns många flaggor till g++,

Delegater, events och lambdauttryck

Tillämpad programmering

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Transkript:

Funktioner - 1 Teknik för stora program #include<iostream.h> #include<... >......... cout << Blabla... ; z=pow(x,y)... Borland libraries Third party libraries Own libraries Funktionens deklaration Funktioner - 2 Deklaration» [ returtyp ] funktionsnamn( [ parameterlista ] );» Returtyp kan vara vilken datatyp som helst, t ex double eller int. Returtypen kan också deklareras void vilket innebär att funktionen inte returnerar något värde. Utelämnas returtyp förutsätter kompilatorn att funktionen returnerar ett värde av typen int» Parameterlistan beskriver antalet och typen på indata som behövs. Parameterlistan kan vara tom.» Funktionsnamnet och parameterlistan måste tillsammans bilda en unik signatur för funktionen i fråga.

Funktionens definition Funktioner - 3 Definition» [ returtyp ] funktionsnamn( [ parameterlista ] ) sekvens av satser; [ return returvärde; ]» Om inte returtypen är void måste funktionen returnera ett värde med returnsatsen.» En funktion måste alltid definieras, men behöver inte alltid deklareras. Om den inte deklareras måste definitionen komma före alla anrop till funktionen. Fig 3.10 Using a programmer-defined function Funktioner - 4 // A programmer-defined square funktion //-Function declaration----------------------------------------- int square(int); //function prototype //-main---------------------------------------------------------- main() for (int x=1; x<=10; x++) cout << square(x) << " "; cout << endl; return 0; //-Function definition------------------------------------------- int square(int y) // y är en formell parameter. Den finns inte // förrän funktionen anropas från main med ett return y * y; // verkligt värde som kopieras från den // aktuella (verkliga) parametern x.

Funktioner - 5 Standardbiblotekens funktioner och direktivet #include Biblioteksfunktionerna har sina prototyper samlade i så kallade "header"-filer. Dessa filer finns samlade i katalogen i INCLUDE och kallas också för inkluderingsfiler. För att infoga dessa prototyper i programmet ger vi direktiv till preprocessorn att inkludera prototyperna Exempel: /* för cout och cin */ #include <math.h> /* för pow() */ main() double x; cout << "Specify one side of the cube: "; cin >> x; cout << "The volyme is "<< pow(x,3); // Är deklarerad i math.h Värdeanrop (Call by value) Funktioner - 6 void thestupidfunktion(int jtal) // jtal är en kopia av det parametervärde som jtal++; // funktionen anropas med. Därför ändras inte ital. cout << "Inside function: " << jtal << endl; int ital = 3; cout << "ital:s value before function call: " << ital << endl; thestupidfunktion(ital); cout << " ital:s value after function call: " << ital << endl; thestupidfunktion(8*ital+3);

Referensanrop (Call by reference) Funktioner - 7 void thestupidfunktion(int &jtal) // OBS!=> &jtal <=OBS referens! // jtal refererar till samma parametervärde som jtal++; // funktionen anropas med. Därför ändras även ital. cout << "Inside function: " << jtal << endl; int ital = 3; cout << "ital:s value before function call: " << ital << endl; thestupidfunktion(ital); cout << " ital:s value after function call: " << ital << endl; thestupidfunktion(8*ital + 3); //Går det här bra? cout << " Vilket värde har ital nu?: " << ital << endl; Referensanrop med constdeklaration Funktioner - 8 void thestupidfunktion(const int &j) // error C2166: l-value specifies const object j++; // Genererar ett kompileringsfel på grund av att j är const- // deklarerad får därför inte tilldelas ett nytt värde! cout << Inside function: << j << endl; int i = 3; cout << i:s value before function call: << i << endl; thestupidfunktion(i); cout << i:s value after function call: << i << endl; thestupidfunktion(8*i+3);

Funktioner - 9 Referensparametrar, exempel void calc_sum_avg(int, int, int&, double&); int tal1 = 1, tal2 = 2, sum = 0; double medel = 0.0; calc_sum_avg(tal1, tal2, sum, medel); cout << "sum = " << sum << "\tmedel = " << medel << endl; void calc_sum_avg(int x, int y, int& sum, double &avg) sum = x+y; avg = sum / 2.0; Funktioner - 10 Default-parametrar double potens(double x, int y=2); void main(void) // y tilldelas ett defaultvärde // Defaultvärden måste tilldelas // från HÖGER mot VÄNSTER cout << Anrop 1: << potens(4.73, 5) << endl; cout << Anrop 2: << potens(4.73) << endl; //OBS! en paramenter! double potens(double x, int y) // Det är endast i deklarationen // som parametrar kan tilldelas double temp = 1.0; // defaultvärden. for (int i=1; i<=y; i++) temp *= x; return temp;

Funktioner - 11 Räckvidd (Scope) double x = 17.5; // Global variabel, räckvidd i hela program-filen int i=1; // Lokal variabel, räckvidd inom main() int j = 2; // Räckvidd inom blocket (...) cout << i << j << endl; int k = 3; // Räckvidd från här och resten av blocket cout << x << k << endl; cout << i << x << endl; cout << j << k << endl; //OK! inom variablernas räckvidd //Kompileringsfel!! Funktioner - 12 Räckvidd och for-satser int main(void) for (int i=1; i<5; i++) cout << "Första loopen : " << i << endl; for (int i=1; i<5; i++) //KOMPILERINGSFEL! "i" tillhör det yttre //blocket och är redan deklarerad cout << "Andra loopen : " << i << endl; return 0;

Funktioner - 13 Synlighet (Visibility) double x = -43.7; // int main() int x=4; cout << Out 1: << x << endl; Programmet ger följande utskrift: Out 1: 4 Out 2: 2.5 Out 3: 4 Out 4: -43.7 double x = 2.5; cout << Out 2: << x << endl; cout << Out 3: << x << endl; cout << Out 4: << ::x << endl; return 0; //Här används ::,den så kallade // räckviddsoperatorn Funktioner - 14 Variablers livstid (Lifetime), ex 1 double global = 1; void print() auto int lokal = 1; lokal++; global++; cout << "Global = " << global << " Lokal = " << lokal << endl; Programmet ger följande utskrift: Global = 2 Lokal = 2 Global = 3 Lokal = 2 Global = 4 Lokal = 2 Global = 5 Lokal = 2 for (int i=0; i<5; i++) print();

Funktioner - 15 Variablers livstid (Lifetime), ex 2 double global = 1; void print() static int lokal = 1; lokal++; global++; cout << "Global = " << global << " Lokal = " << lokal << endl; Programmet ger följande utskrift: Global = 2 Lokal = 2 Global = 3 Lokal = 3 Global = 4 Lokal = 4 Global = 5 Lokal = 5 for (int i=0; i<5; i++) print(); Funktioner - 16 Rekursiva anrop //Iterativ lösning double potens(double x, int y) double temp = 1.0; for (int i=1; i<=y; i++) temp *= x; return temp; //Rekursiv lösning double potens(double x, int y) if (y == 0) // Basfallet, måste alltid finnas! return 1; else // rekursivt fall return x * potens(x, y-1);

Funktioner - 17 Överlagrade funktioner int max(int, int); int max(int, int, int); double max(double, double); double max(double, double, double); int main(void) cout << Störst av 23 och 17 är: << max(23,17) << endl; cout << Störst av 2, 3 och 1 är: << max(2,3,1) << endl; cout << Störst av 2.3 och 1.7 är: << max(2.3,1.7) << endl; cout << Störst av 2.3, 1.7 och -0.4 är: << max(2.3,1.7,-0.4) << endl; return 0; Inline funktioner Funktioner - 18 inline int max(int a, int b) return (a > b)? a : b; inline int fac(int n) return n < 2? 1 : n*fac(n-1); int main(void) cout << "Störst av 23 och 17 är: " << max(23,17) << endl; // vad händer igentligen vid det här funktionsanropet? cout << "Fakulteten av 10 är: " << fac(10) << endl; return 0;

'XVNDNXQQD«Funktioner - 19.XQQD VNDSD RFK DQYlQGD HJQD IXQNWLRQHU.XQQD DQYlQGD GH IlUGLJD IXQNWLRQHUQD L PDWKK ) UVWn EHJUHSSHQ µulfnylggµ µv\qoljkhwµ RFK µolyvwlgµ.xqqd DQYlQGD UHIHUHQVHU NXQQD DQYlQGD UHNXUVLRQ.XQQD VNDSD SDUDPHWHU OLVWRU PHG GHIDXOWYlUGHQ