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

Relevanta dokument
Funktioner och programstruktur. Föreläsning 5

Vad är det och hur definierar vi en Biblioteksfunktioner (math) Top-down-programmering lokala globala variabler Arrays som in-parametrar

Funktioner och programstruktur. Föreläsning 5

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

Funktioner. Jan Erik Moström,

Föreläsning 10. Pekare (Pointers)

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

Funktionens deklaration

Föreläsning 9. Repetition och exempelproblem

*Pekarvärden *Pekarvariabler & *

En kort text om programmering i C.

struct egendefinierad typ struct LECTURE_TYPE { char teacher[99]; float lengthinminutes; char type; /* L = lecture, E = exercise */ };

Planering Programmering grundkurs HI1024 HT 2014

TDIU01 - Programmering i C++, grundkurs

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN1 - Teoretisk tentamen Tid: Torsdagen den 20 oktober 2011,

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Programmeringsteknik med C och Matlab

TDIU01 - Programmering i C++, grundkurs

Föreläsning 4. Val, boolska värden, läsbarhet, osv

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

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

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

Att använda pekare i. C-kod

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

Labora&on 2 Funk&oner, if och loop övningar/uppgi:er

+Överskådlighet Normalt sätt blir ett program skrivet i det procedurella paradigmet överskådligt. Modifikationer på delproblem kan ske med lätthet.

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

BMI = (vikt i kg) / (längd i m) 2. Lösningsförslag

2D1339 Programkonstruktion för F1, ht 2003

Programmering i C, 7,5 hp

Introduk+on +ll JavaScript if- sats, funk+oner, bilder

HI1024 Programmering, grundkurs TEN

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

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

Övningsuppgift. En array baklänges. Steg 1. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

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

tentamensdags och lab 3

Uttryck och villkor. Föreläsning 2

Programmering = modellering

Datorteknik 2 (AVR 2)

Enkla datatyper minne

HI1024 Programmering, grundkurs TEN

Grundkurs Programmering

Typkonvertering. Java versus C

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

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Föreläsning 5-6 Innehåll

Vad är programmering Jonas Lindemann

TUTORIAL: SAMLING & KONSOLL

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

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

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

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

Planering Programmering grundkurs HI1024 HT TIDAA

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

Programmering Grundkurs (HI1900) Teoridel

Programmering i C. Christer Sandberg, Gunilla Eken, Stefan Bygde Olof Andersson Linus Källberg Caroline Uppsäll Johan Hägg

HI1024 Programmering, grundkurs TEN

HI1024 Programmering, grundkurs TEN

Uttryck och villkor. Föreläsning 2

C-programmering, föreläsning 2 Jesper Wilhelmsson

Tentamen ges för: Tentamensdatum: Tid:

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

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

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

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

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

7 Programmeringsteknik

Java, klasser, objekt (Skansholm: Kapitel 2)

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

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

HI1024 Programmering, grundkurs TEN

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

DD1361 Programmeringsparadigm. Carina Edlund

HI1024 Programmering, grundkurs TEN

Boken?!?! Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Variabler printf

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Föreläsning 6 pekare och pekare tillsammans med arrayer

TDDC77 Objektorienterad Programmering

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Tentamen ID1004 Objektorienterad programmering April 7, 2015

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Inledande programmering med C# (1DV402) 85%43=42. OBS! Heltal 1 (14)

Problemlösning Lösningar

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Föreläsning 6: Introduktion av listor

Repetition C-programmering

Föreläsning 2, vecka 8: Repetition

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

Övningar Dag 2 En första klass

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Programmering, grundkurs, 8.0 hp HI1024, omtentamen, TEN1. Tisdagen den 7 juni 2011,

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

STRÄNGAR DATATYPEN. Om du vill baka in variabler eller escape-tecken måste du använda dubbla citattecken. strängar

Transkript:

Funk%oner Vad är det och hur definierar vi en Top- down- programmering lokala globala variabler void och flera inparametrar OBS! Till nästa gång läs igenom problemlösning 1 och skissa på lösningar!

Problemlösning När man skall lösa eh komplicerat problem gör man det lähast genom ah dela upp problemet i mindre delar. Det gäller för programmering, matema%k och fak%skt all problemlösning. I programmering använder vi för deha funk%oner.

Funk%on En funk%on är en liten programsnuh som uoör en speciell uppgip. OPa kan uppgipen bestå i ah den får något värde och spohar ut eh annat värde. I sådana fall påminner den mycket om en matema%sk funk%on: 3 (dubblar talet) 6

Exempel En funk%on räknar ut arean av en cirkel Den behöver veta radien. Radien kallas för en in- parameter, input, eller bara parameter. Med hjälp av radien räknar den ut arean. Arean kallas för returvärde eller output. 2.00 (arean beräknas) 12.57

Funk%onsdefini%on - exempel float cirkelarea(float radie) float area; area = radie*radie*m_pi; return area;

med kod #include <stdio.h> #include <math.h> float cirkelarea(float radie) float area; area = radie*radie*m_pi; return area; Resultat: En cirkel med radien 2 har arean: 12.57 En cirkel med radien 4.00 har arean: 50.27 int main(void) prino("en cirkel med radien 2 har arean: %.2f\n",cirkelarea(2)); float r=4; prino("en cirkel med radien %.2f har arean: %.2f",r,cirkelarea(r)); main- är en funk%on, programmets huvudfunk%on

funk%onsdefini%onen sist #include <stdio.h> #include <math.h> float cirkelarea(float radie); Funk%onsdeklara%on! int main(void) prino("en cirkel med radien 2 har arean: %.2f\n",cirkelarea(2)); float r=4; prino("en cirkel med radien %.2f har arean: %.2f",r,cirkelarea(r)); float cirkelarea(float radie) float area; area = radie*radie*m_pi; return area;

Varför funk%oner? Enklare ah dela upp problem i delar Tydligare kod som är lähare ah läsa och lähare ah felsöka Vi kan använda samma kod flera gånger Vi kan använda samma kod i olika program (bl.a. via bibliotek) Vi kan använda kod utan ah förstå hur den gör. Vi behöver bara förstå hur man använder metoden, dvs vad stoppar vi in, vad får vi ut. Exempel: Beräkningarna görs i en funk%on och hur man gör behöver vi inte fundera på när vi löser det övergripande problemet: Top- down- programmering Fråga eper radie Beräkna area Presentera resultat

Top- down #include <stdio.h> #include <math.h> float cirkelarea(float radie); int main(void) float area,radie; Fråga eper radie Beräkna area Presentera resultat prind("ange radien:"); scanf("%f",&radie); area=cirkelarea(radie); prind("en cirkel med radien %.3f har arean: %.3f",radie,area); float cirkelarea(float radie) float area; area = radie*radie*m_pi; return area; Detaljerna kan man vänta med. Framförallt kan man tänka på funk%onen som en svart låda när man skriver huvudprogrammet.

Med loop #include <stdio.h> #include <math.h> float cirkelarea(float radie); int main(void) float area,radie; int fortsap = 1; while(fortsap==1) prino("ange radien:"); scanf("%f",&radie); area=cirkelarea(radie); prino("en cirkel med radien %.3f har arean: %.3f\n",radie,area); prind("vill du fortsapa nej- 0, ja- 1?"); scanf("%d",&fortsap);

#include <stdio.h> int dubbla(int tal) tal=tal*2; return tal; int main(void) int i=1; int j=dubbla(i); prino("i: %d, j %d",i,j); Resultat: 1,2 Variabler Alla variabler som vi definierar i en funk%on finns bara inu% funk%onen vi säger ah de är lokala variabler. De in- parametrar vi skickar in i en metod kopieras %ll en ny minnesplats så ah parametervariabeln är en lokal variabel. Ändrar vi värdet på en inparameter ändras inte värdet i main! Globala variabler deklareras utanför funk%onerna och de finns då i alla funk%oner nedan deklara%onen. Om en ny variabel med samma namn deklareras i en funk%on skuggas den globala variabeln. Undvik globala variabler utom i undantagsfall. De förstör funk%onen som svart låda. #include <stdio.h> int a=1;//global! void funk2(void) prino("%d,",a); void funk1(void) int a=4; prino("%d,",a); int main(void) int a=2; prino("%d,",a); int a=3; prino("%d,",a); funk1(); funk2(); Resultat: 2,3,4,1,

Varianter En funk%on behöver inte ha någon returtyp En funk%on behöver inte ha inparametrar void stars() prino("***************\n"); En funk%on kan ha flera inparametrar int summa(int a, int b, int c) return a+b+c;

Exempel top- down- programmering Vi vill skriva eh program som låter användaren få testa om eh visst tal är eh primtal.

antag ah vi har en funk%on som kan bestämma om eh tal är eh primtal int main(void) int tal; prino("skriv in eh heltal:"); scanf("%d",&tal); if(primtal(tal)) prino("det ar eh primtal"); else prino("det ar inte eh primtal"); enkelt! tyvärr kan vi inte testkompilera L

#include <stdio.h> int primtal(int tal) return 1; lägg %ll en enkel funk%on som levererar eh svar om än fel så kan du testa resten av koden int main(void) int tal; prino("skriv in eh heltal:"); scanf("%d",&tal); if(primtal(tal)) prino("det ar eh primtal"); else prino("det ar inte eh primtal");

då är det bara ah skriva en funk%on som bestämmer om eh tal är eh heltal int primtal(int tal) int i; for(i=2;i<=tak(tal);i++) if(delbart(tal,i)) return 0; return 1;

och så funk%oner som räknar ut högsta talet man behöver testa och som tar reda på om eh tal är delbart i eh annat //beräknar högsta tal som man behöver testa med för //ah bestämma om eh tal är eh primtal int tak(int tal) return tal- 1; int delbart(int taljare, int namnare) return!(taljare%namnare); Nu måste man först testa ah dessa fungerar som tänkt innan man testar hela programmet. För deha får man skriva testkod. Sedan testar man sig baklänges upp %lls man testat hela programmet.

#include <stdio.h> //beräknar högsta tal som man behöver testa med för //ah bestämma om eh tal är eh primtal int tak(int tal) return tal- 1; int delbart(int taljare, int namnare) return!(taljare%namnare); int primtal(int tal) int i; for(i=2;i<=tak(tal);i++) if(delbart(tal,i)) return 0; return 1; Kan vi förbähra programmet? int main(void) int tal; prino("skriv in eh heltal:"); scanf("%d",&tal); if(primtal(tal)) prino("det ar eh primtal"); else prino("det ar inte eh primtal");

lägg märke %ll ah när vi förbährar tak behöver vi inte ändra något annat den är som en svart låda! (förrutom #include <math.h>) int tak(int tal) return sqrt(tal);

#include <stdio.h> #include <math.h> //beräknar högsta tal som man behöver testa med för //ah bestämma om eh tal är eh primtal int tak(int tal) return sqrt(tal); int delbart(int taljare, int namnare) return!(taljare%namnare); int primtal(int tal) int i; for(i=2;i<=tak(tal);i++) if(delbart(tal,i)) return 0; return 1; int main(void) int tal; prino("skriv in eh heltal:"); scanf("%d",&tal); if(primtal(tal)) prino("det ar eh primtal"); else prino("det ar inte eh primtal");

En annan metodik för ah dela upp problem med hjälp av funk%oner är bohom- up Då börjar man med ah skapa enkla verktyg man tror sig behöva och säher sedan ihop dem %ll allt mer avancerade verktyg fördelar/nackdelar?