• No results found

C++ Funktioner 1

N/A
N/A
Protected

Academic year: 2021

Share "C++ Funktioner 1"

Copied!
6
0
0

Loading.... (view fulltext now)

Full text

(1)

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()

{

(2)

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å.

(3)

Ö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

(4)

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

(5)

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);

cout << endl;

skriv_ut(resultat, 4);

}

else if (svar=='2') {

cout << " Ange två tal: " ; cin >> tal1 >> tal2;

cout << endl;

resultat=max(tal1,tal2);

cout << " Maxvarde : " << resultat << endl;

} }

cout << endl << " HEJ DÅ" << endl;

system("PAUSE");

(6)

//alla funktioner

//******************************************************

double medelvarde ( ) { double tal1, tal2;

cout << " Ange två tal: " ; cin >> tal1 >> tal2;

cout << endl;

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;

cout << 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 << " ";

}

//******************************************************

References

Related documents

Denna studie har sin utgångspunkt i citatet ovan och undersöker vilka värden och normer som finns inom den kommunala styrningen och varför ekonomivärden tenderar att dominera

Konsortiet hade inget att invända mot priset, men i ett brev från Ivar Olsson till FSV:s huvudkontor angående betalningsvillkoret skrev han att ”styrelsen för Ungers bolag ansåg

Detta passar in i den europeiska landskapskonventionens arbete med att bevara landskapets platskänsla (Sarlöv Herlin 2012, s. Alla de lämningar från historisk markanvändning som

Från att förskolläraren hade ett styrdokument som beskrev att demokratin ska komma till uttryck genom vardaglig handling från förskolläraren (Socialstyrelsen, 1993) så har detta

[r]

Det finns även alléer i området och totalt beskrivs 30 objekt utöver dessa som tillsammans bildar en naturmiljö som är förutsättningen för rik biologisk mångfald och för

Läppstiftet är ett objekt som genererar intäkter, men i jämförelse med andra liknande fastigheter är de något mindre, vilket inte betraktas som någon nackdel, eftersom

Informanterna anser att projektledningens uppgifter är följande: Säkra att rätt information finns, strukturera upp arbetsuppgifterna samt se till att samtliga