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



Relevanta dokument
C++ Slumptalsfunktioner + switch-satsen

TDIU01 - Programmering i C++, grundkurs

OBS! All teori i detta och följande dokument kompletteras med genomgångar på lektionerna. Så det är viktigt att närvara och göra egna anteckningar.

TDIU01 - Programmering i C++, grundkurs

Funktionens deklaration

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

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

C++ Lektion Tecken och teckenfält

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011

TDIU01 - Programmering i C++, grundkurs

C++ - En introduktion

1 Funktioner och procedurell abstraktion

Modul 3 - Modularisering

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

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

Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr,

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

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

Användarhandledning Version 1.2

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

Programmeringsteknik med C och Matlab

Funktioner och programstruktur. Föreläsning 5

TDIU01 Programmering i C++

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret Lektion 1

Funktioner och programstruktur. Föreläsning 5

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

TDDC76 - Programmering och Datastrukturer

TDIU01 - Programmering i C++, grundkurs

Repetera snabbt vad du lärde dig förra veckan. Du är nu redo att kasta dig in i nästa fas, teorin om villkor.

Några småsaker. switch break, continue, goto Kommentarer

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13.

Övning från förra gången: readword

Funktioner. Linda Mannila

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

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

*Pekarvärden *Pekarvariabler & *

TDDC76 - Programmering och Datastrukturer

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

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

TDDC76 - Programmering och Datastrukturer

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Omtentamen i Programmering C, Fri, Kväll,

Typkonvertering. Java versus C

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

Föreläsning 4: Filer och strömmar

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

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I

Föreläsning 3-4 Innehåll

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

Rekursion och induktion för algoritmkonstruktion

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

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

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

Enkla datatyper minne

Övningar Dag 2 En första klass

Skizz till en enkel databas

Tentamen i. för D1 m fl, även distanskursen. lördag 28 maj 2011

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

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

C++ - En introduktion

Procedurer och villkor. Rekursiva procedurer. Exempel: n-fakultet

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

Procedurer och villkor

Programmering i C++ EDAF hp. EDAF30 (Föreläsning 2) HT / 18

Introduktionslaboration

Tentamen EDAF30 Programmering i C++

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

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

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga,

Pascal... Pascal. Pascal... Pascal...

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

Tentamen *:58/ID100V Programmering i C Exempel 3

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

HI1024 Programmering, grundkurs TEN

Chapter 3: Using Classes and Objects

En kort text om programmering i C.

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

Introduktionslaboration

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

Grundläggande programmering med C# 7,5 högskolepoäng

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Tentamen EDAF30 Programmering i C++

Föreläsning 5-6 Innehåll

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18

JAVA Mer om klasser och objektorientering

1 Objektorienterad programkonstruktion

Att använda pekare i. C-kod

Introduktion till arv

Extramaterial till Matematik Y

TDIU01 - Programmering i C++, grundkurs

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Tentamen i Programmering C, Fri, Kväll,

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

Innehåll. Pekare Exempel

Transkript:

C++ Funktioner 1 Teori När programmen blir större och mer komplicerade är det bra att kunna dela upp programmet i olika delar som gör specifika saker, vilket kan göra programmet mer lättläst. Ett sätt är att använda funktioner, som är en mycket viktig "byggsten" i C++. En funktion kan ses som ett litet "program i programmet". Det är en programslinga som man anropar från huvudprogrammet, och eventuellt skickar med några invärden som funktionen ska jobba med. Funktionen utför då en uppgift eller returnerar ett svarsvärde. Man brukar dela in funktioner i några olika grupper. Funktioner som returnerar ett värde Vi är egentligen bara intresserade av att skicka information (ett eller flera värden) till en funktion som gör vissa beräkningar med hjälp av dessa värden och sen returnerar ett värde som är resultatet av dessa bearbetningar. En funktion är lite kod som gör något. Vi skickar in ett eller flera argument och funktionen returnerar ett värde. T.ex. kan koden se ut på följande sätt: int summa( int a, int b) //funktionshuvud return a+b; //funktionskropp Summa är funktionens namn, som man använder när man ropar på den från huvudprogrammet. Före funktionens namn står vilken typ av svar funktionen kommer att lämna, i vårt fall ett heltal (int). Efter funktionens namn skrivs inom parentes en lista på de invärden eller parametrar, som funktionen behöver för att kunna göra sitt jobb. I vår funktion är invärdena heltalen a och b. Return avslutar funktionen och skickar tillbaka det resultat som funktionen gav. Värdet som returneras av return ska vara av samma typ som funktionens typ, här int. Man ropar sedan på funktionen med dess namn och de parametrar som behövs. Du har redan använt dig av kompilatorns färdigskrivna funktioner i kursen, t.ex. har du anropat funktionen sqrt(x) för några lektioner sedan. Där är sqrt funktionens namn, och x är det invärde du ville att funktionen skulle ta roten ur (se s. 46). Ett fullständigt program skulle kunna se ut så här: #include <iostream> #include <stdlib.h> using namespace std; int summa( int a, int b) //funktionshuvud return a+b; //funktionskropp //OBS! Inget semikolon efter funktionsdefinitionen. main() int x, y, z; cout<<"ge två tal: "; cin>>x>>y; z = summa(x,y); //Värdet från x kopieras över till a och y till b cout<<"summan är "<<z; system("pause"); Variablerna a och b är bara synliga i funktionen, och existerar inte utanför den, t.ex. i main(). Att värdet från x kopieras över till a och y till b, kallas värdeanrop. Om vi skulle ändra värdet av a och b i funktionen summa, skulle alltså inte originalvärdena x och y ändras, bara kopiorna a och b. Motsatsen till värdeanrop är referensanrop, vilket innebär att a bara blir ett "alias" för x, fast de egentligen är samma värde i datorns minne. Det innebär att om jag ändrar a ändras också x o.s.v. Det ska vi titta på om några veckor. Sida 1

Ett annat sätt att skriva koden på är nedanstående, där vi gör en funktionsdeklaration (talar om namn, typ, och parametrar) INNAN huvudprogrammet så att vi i huvudprogrammet kan använda fast själva funktionsdefinitionen inte kommer förrän efter programmet. #include <iostream> #include <stdlib.h> using namespace std; int summa( int a, int b); // OBS! Semikolon efter funktionsdeklaration main() int x, y, z; cout<<"ge två tal: "; cin>>x>>y; z = summa(x,y); //Värdet från x kopieras över till a och y till b cout<<"summan är "<<z; int summa( int a, int b) //funktionshuvud return a+b; //funktionskropp system("pause"); //OBS! Inget semikolon efter funktionsdefinitionen Funktioner som inte returnerar ett värde Funktionen ovan gav ett heltal till svar. Man kan naturligtvis skriva funktioner som returnerar double, char, long int etc, men man kan också skriva funktioner som inte returnerar något svarsvärde. Ett exempel: void meny() cout<<"meny"; void står för "tomrum", så här ska inget värde returneras. Dessutom är parentesen för invärden tom, vilket är ett förkortat skrivsätt för void meny(void), d.v.s. inga argument skickas med när vi anropar funktionen. Läs Bifogat finns filen funktioner1.cpp, vilken du bör förstå innebörden av. Se även kapitlet funktioner i online-manualen (se v34). Extrafinesser för funktioner Nämligen default-värden på parametrar, d.v.s. att i funktionsdeklarationen ange värden för parametrarna som ska antas om inget värde lämnas vid funktionsanropet, samt funktioner som anropar sig själva, s.k. rekursiva funktioner. Rekursiva funktioner ligger på MVG-nivå. Sida 2

Övningar Övning 1 Skriv en funktion som multiplicerar två tal. Som returvärde ska funktionen ge resultatet, dvs produkten av talen. Skriv ett huvudprogram som utnyttjar funktionen. Övning 2 Skriv en funktion som adderar två tal och en annan funktion som subtraherar två tal. Skriv ett huvudprogram som läser in två tal och väljer vad du vill göra. Funktionerna ska givetvis utnyttjas på lämpligt sätt. Övning 3 Skriv ett program som fungerar som en miniräknare. Programmet ska först fråga efter vilket räknesätt du vill använda (+,--,* eller /), och sedan efter två tal. Svaret ska sedan beräknas och skrivas ut på lämpligt sätt. Detta ska upprepas tills användaren som räknesätt matar in "q". Programmet ska innehålla fyra funktioner addition, subtraktion, multiplikation och division, som alla tar två tal som parametrar. Dessa funktioner ska anropas då resultatet ska räknas ut. Övning 4 Utöka din miniräknare med följande funktioner: upphöjt x y roten ur sin x Övning 5 Ett primtal är ett tal som endast är jämnt delbart med 1 och med sig själv. Skriv en funktion som undersöker om ett givet tal är ett primtal. Övning 6 Som övning på användning av defaultvärden föreslår jag att du tittar på funktionen skriv_ut() i exempelprogrammet funktioner1.cpp. Hitta på någon egen variant av skriv_ut eller en annan funktion med defaultvärden som gör något kul och skriv sen ett huvudprogram som utnyttjar din funktion. Övning 7 Vill du testa på rekursion så kan du börja med att läsa om rekursion i online-manualen (se v34). Skriv (av) en funktion för att beräkna fakulteten och skriv sen ett huvudprogram som utnyttjar funktionen. Hitta gärna även på en egen funktion som fungerar att göra rekursion på. Sida 3

Minitest G-nivå: 1. Vilken av följande funktioner är korrekt och vad är fel i den felaktiga? Första funktionen: void forsta(int x) x=x+1; return x; Andra funktionen double andra(void) double x=3; return x; 2. Vad är händer i följande funktion vid anropet tal=tredje(2.5); (tal är en double) vad skulle skrivas ut vid cout<<tal;?? int tredje(double x) return x; 3. Skriv en funktion som tar fyra tal som argument och returnerar medelvärdet av dessa. Skriv också ett program som utnyttjar din funktion. VG-nivå: 1. Skriv en funktion som man kan skicka två, tre eller fyra tal till som argument och som returnerar medelvärdet av dessa. Skriv också ett program som utnyttjar din funktion och visa att alla varianter fungerar. Läxa Läs igenom detta häfte. Studera det bifogade programmet så att du förstår de olika delarna och utnyttja dessa när du själv ska skapa ett program. Lös så många uppgifter som möjligt (minst de fyra första). Sida 4

funktioner1.cpp #include <iostream> using namespace std; //********funktionsdeklarationer********* double medelvarde ( ); double max (double tal1, double tal2); void meny ( ); char las_in_alternativ( ); void skriv_ut(double tal, int n=1); //********huvudfunktionen********* int main () double tal1, tal2, resultat; char svar='1'; while (svar!='0') meny(); svar=las_in_alternativ(); system("cls"); if (svar=='1') resultat=medelvarde( ); cout << " Medelvarde : " << resultat << endl; skriv_ut(resultat); skriv_ut(resultat, 4); else if (svar=='2') cout << " Ange två tal: " ; cin >> tal1 >> tal2; resultat=max(tal1,tal2); cout << " Maxvarde : " << resultat << endl; cout << endl << " HEJ DÅ" << endl; system("pause"); return 0; Sida 5

//alla funktioner double medelvarde ( ) double tal1, tal2; cout << " Ange två tal: " ; cin >> tal1 >> tal2; return (tal1+tal2)/2.0; double max (double tal1, double tal2) if (tal1 > tal2) return tal1; else return tal2; void meny ( ) cout << endl << endl; cout << "***** MENY *****" << endl; cout << "################" << endl<<endl; cout << " 1 beräkna medelvärde" << endl; cout << " 2 beräkna maxvärde" << endl; cout << " 0 AVSLUTA" << endl; char las_in_alternativ( ) char svar; cout << endl << " Ange alternativ: " ; cin >> svar; return svar; void skriv_ut(double tal, int n) for ( int i=1; i<=n; i++) cout << tal << " "; Sida 6