Funktioner och programstruktur. Föreläsning 5

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

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

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

Föreläsning 9. Repetition och exempelproblem

Arrays (indicerade variabler) Föreläsning 4

Planering Programmering grundkurs HI1024 HT 2014

Arrays (indicerade variabler) Föreläsning 6

Planering Programmering grundkurs HI1024 HT TIDAA

Föreläsning 10. Pekare (Pointers)

Planering Programmering grundkurs HI1024 HT data

Funktioner. Jan Erik Moström,

Uttryck och villkor. Föreläsning 2

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

Loopar och datatyper. Föreläsning 3

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

Programmeringsteknik med C och Matlab

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

En kort text om programmering i C.

*Pekarvärden *Pekarvariabler & *

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

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

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

TDIU01 - Programmering i C++, grundkurs

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

Indicerade variabler

Funktionens deklaration

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

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

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

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

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

Fråga 5. Vad krävs av funktionen undersok(a) för att b ska ökas med 1 respektive minskas med 1?

Programmering i C, 7,5 hp

TDIU01 - Programmering i C++, grundkurs

Programmering, grundkurs, 8.0 hp HI1024, extra tentamen, TEN1, för TIDAA1. Fredagen den 11 mars 2011,

Indexerade variabler

Programmering Grundkurs (HI1900) Teoridel

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Fråga 13. Skriv en loop som fyller arrayen int v[100] med talen

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

Loopar och datatyper. Föreläsning 3

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

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

Föreläsning 11. Strängar

Programmering, grundkurs, 8.0 hp HI1024, TEN1. Fredagen den 2 mars 2012

Föreläsning 9. struct

Övningsuppgifter till föreläsning 2 Variabler och uttryck

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

Uttryck och villkor. Föreläsning 2

3.3 for-satsen. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Föreläsning 3

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

TDDC77 Objektorienterad Programmering

1 Funktioner och procedurell abstraktion

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

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Föreläsning 5-6 Innehåll

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

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Detta är andra problemlösningsföreläsningen, vi diskuterar problemen ur Problem II.

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

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

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Föreläsning 12. struct

HI1024 Programmering, grundkurs TEN

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

Vad har vi lärt oss så här långt Vad är en sträng? Strängkonstanter. Att skriva ut och läsa in strängar. Att arbeta med strängar.

HI1024 Programmering, grundkurs TEN

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

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

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

Switch, Array (fält) switch break, continue, goto (scary) Sammansatta tilldelningar Kommentarer Array Sortering

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

Grundkurs Programmering

Övningar Dag 2 En första klass

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

6.1 Kompilering och lite grundläggande information

Uppgifter till praktiska tentan, del A. (7 / 27)

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

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

Föreläsning 13. In- och utmatning

Tecken & Strängar. Kapitel 7

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

Programmeringsteknik för Ingenjörer VT06. Föreläsning 10

Java, klasser, objekt (Skansholm: Kapitel 2)

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

Föreläsning 3-4 Innehåll

översiktskurs (5DV031)

Att använda pekare i. C-kod

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

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

Modul 3 - Modularisering

C++ Slumptalsfunktioner + switch-satsen

Objektorienterad programmering

Repetition C-programmering

Att komma igång. Föreläsning 1

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

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

Transkript:

Funktioner och programstruktur Föreläsning 5

Dagens kluring int v[10]=1,2,3,4,5,6,7,8,9,10; int i; for(i=0;i<9;i++) v[i]=v[i+1]; //Hur ser v ut?

c89 #include <stdio.h> #define DIM 10 int main(void) int v[dim]; int i; for(i=0;i<dim;i++) if(i%2!=0) v[i]=1; else v[i]=0; for(i=0;i<dim;i++) printf("%d",v[i]); c99 #include <stdio.h> #include <stdbool.h> int main(void) int dim=10; bool v[dim]; for(int i=0;i<dim;i++) if(i%2!=0) v[i]=true; else v[i]=false; for(int i=0;i<dim;i++) printf("%d",v[i]); return 0; return 0;

Funktioner Vad är en funktion och hur gör man Varför använder vi funktioner Biblioteksfunktioner (math) Lokala och globala variabler Olika antal in- och ut-parametrar Arrays som in-parametrar Top-down-programmering

Problemlösning När man skall lösa ett komplicerat problem gör man det lättast genom att dela upp problemet i mindre delar. Det gäller för programmering, matematik och faktiskt all problemlösning. I programmering använder vi för detta funktioner.

Funktion En funktion är en liten programsnutt som utför en speciell uppgift. Ofta kan uppgiften bestå i att den får något värde och spottar ut ett annat värde. I sådana fall påminner den mycket om en matematisk funktion: 3 (dubblar talet) 6

Exempel En funktion räknar ut arean av en cirkel Den behöver veta radien. Radien kallas för en in-parameter, argument, 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

Funktionsdefinition -exempel float cirkelarea(float radie) float area; area = radie*radie*m_pi; return area;

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

funktionsdefinitionen sist #include <stdio.h> #include <math.h> float cirkelarea(float radie); Funktionsdeklaration! int main(void) printf("en cirkel med radien 2 har arean: %.2f\n",cirkelarea(2)); float r=4; printf("en cirkel med radien %.2f har arean: %.2f",r,cirkelarea(r)); return 0; float cirkelarea(float radie) float area; area = radie*radie*m_pi; return area;

Olika antal in- och ut-parametrar En funktion behöver inte ha någon returtyp En funktion behöver inte ha inparametrar void stars() printf("***************\n"); En funktion kan ha flera inparametrar int summa(int a, int b, int c) return a+b+c;,men enfunktion kan inte returnera mer än en utparameter

Varför funktioner? Enklare att dela upp problem i delar Tydligare kod som är lättare att läsa och lättare att 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 att förstå hur den gör. Vi behöver bara förstå hur man använder metoden, dvs vad stoppar vi in och vad får vi ut.

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

Array som in-parameter #include <stdio.h> int max(int v[],int n) int i,max=v[0]; for(i=1;i<n;i++) if(max<v[i]) max = v[i]; return max; int main(void) int a[] = 1,3,6,2,8,1; printf("storsta vardet ar %d",max(a,6)); return 0;

Biblioteksfunktioner Att funktioner gör det lätt att använda kod man inte själv skrivit har vi redan använt vid ett flertal tillfällen. Vi har anropat funktioner såsom printf, scanf, rand, time. Ett mycket användbart bibliotek heter math.h. Där finns Trigonometri: cos, sin, tan, acos, asin, atan e och naturliga logaritmen: exp, log Upphöjt i och roten ur: pow,sqrt och M_PI som vi tidigare såg (egentligen inte standard och fungerar ej i c99) Kolla gärna upp math.h och andra C-bibliotek!

Top-down-programmering -är ett sätt att närma sig problemlösning där vi löser ett problem utgående ifrån att vi redan har funktioner som gör allt vi skulle kunna tänkas behöva göra. Sedan skriver vi dessa fantastiska funktioner på samma sätt. På detta sett delar man naturlig upp ett problem i allt mindre bitar till dess att det blir trivialt att lösa delproblemen.

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

antag att vi har en funktion som kan bestämma om ett tal är ett primtal int main(void) int tal; printf("skriv in ett heltal:"); scanf("%d",&tal); if(primtal(tal)) printf("det ar ett primtal"); else printf("det ar inte ett primtal"); enkelt! tyvärr kan vi inte testkompilera

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

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

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

#include <stdio.h> //beräknar högsta tal som man behöver testa med för //att bestämma om ett tal är ett 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ättra programmet? int main(void) int tal; printf("skriv in ett heltal:"); scanf("%d",&tal); if(primtal(tal)) printf("det ar ett primtal"); else printf("det ar inte ett primtal");

lägg märke till att när vi förbättrar 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 //att bestämma om ett tal är ett 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; printf("skriv in ett heltal:"); scanf("%d",&tal); if(primtal(tal)) printf("det ar ett primtal"); else printf("det ar inte ett primtal");

En annan metodik för att dela upp problem med hjälp av funktioner är bottom-up Då börjar man med att skapa enkla verktyg man tror sig behöva och sätter sedan ihop dem till allt mer avancerade verktyg fördelar/nackdelar?

Studieanvisningar F5 Gör K9 E1, E2, E3. Skriv också ett huvudprogram som testar att dina funktioner fungerar som det är tänkt. Läs 9.1-9.5 Gå tillbaka till bubbelsorteringsprogrammet och försök dela upp det i funktioner på lämpligt sätt. Använd inga globala variabler. Läs första delen av 9.6 (sid 204-205) Skriv en fakultetsfunktion liknande den i boken (9.6) men lägg till en printf sats som skriver ut värdet på n. Anropa sedan funktionen från main och se hur den anropar sig själv. Gör K9 P6, P8 Läs kapitel 10, jobba igenom programexemplet i 10.5! Gör K10 P2 Svara på instuderingsfrågor Gör fler uppgifter om du hinner E-excercises, P-programming projects