Funktioner och programorganisation

Slides:



Advertisements
Liknande presentationer
En introduktion till programmeringsspråket Python
Advertisements

Avlusning Debugger (”avlusare”) Breakpoints Watch.
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
Föreläsning1. • Boken?!?! • Vad är ett program? • Kompilerande-Interpreterande • Programmeringsmiljö • Hello World! • Att programmera och ett enkelt program.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
2D1311 Programmeringsteknik med PBL
Operatorer.
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
C-programmering ID120V William Sandqvist Länkad lista
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Programkodens uppbyggnad
Grundläggande programmering
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 4 Python: Definiering av egna funktioner Parametrar
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Programmering B PHP Lektion 2
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Pekare och speciell programstruktur i inbyggda system
Ali Ghodsi Variabler En variabel är en sorts behållare som man kan placera data i Man måste ange typ och namn för alla variabler.
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
int res2=Math.max(tal1,tal2);
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
William Sandqvist C:s minnesmodell.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
Funktioner, styrstrukturer, manipulering av matriser
1 Föreläsning 3 programmeringsteknik och Matlab 2D1312/ 2D1305 Matlab fortsättning Funkioner, styrstrukturer, manipulering av matriser.
Grundläggande programmering
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Modulär programutveckling
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Namnrum, räckvidd och rekursion Linda Mannila
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 8 Programmeringsteknik och Matlab DD1312 Klassmetoder Egen modul, Self Metoderna: __str__, __lt__,… Meddelande Arv, Överlagring av metoder,
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Problemlösningsmetodik
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
F6 - Pekare 1 Programmeringsteknik, 4p vt-00 Pekare & adresser Alla variabler är knutna till en viss adress i minnet int i; adressen till denna fås med.
Programmeringsteknik Föreläsning 17 Skolan för Datavetenskap och kommunikation.
Anders Sjögren Deklarationsområde och funktioner.
Föreläsning 2 programmeringsteknik och Matlab 2D1312/ 2D1305
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
1 Föreläsning 6 Repetition på metoder Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Anders Sjögren Enkelt program med funktion /* two_func.c - a program that uses two functions in one file */ /* from Stephen Prata C Primer Plus ISBN
Program indata ? utdata 1/20 Vahid Mosavat, Nada, KTH.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 13 programmeringsteknik och Matlab Funktioner, styrstrukturer, mer om matriser.
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
Föreläsning 3 Väsentliga delar i ett Javaprogram Input i paketet extra
Algoritmer och loopar Algoritmer, beräkningsbarhet
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Anders Sjögren Funktioner något in och något annat ut.
KPP053, HT2015 MATLAB, Föreläsning 4
Presentationens avskrift:

Funktioner och programorganisation Föreläsning 5

Funktioner Vad är det och hur definierar vi en Biblioteksfunktioner (via math.h) Top-down-programmering lokala – globala variabler Arrays (t.ex vektorer) som in-parametrar

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 En funktion som inte återlämnar något värde kallas ”procedur” i vissa andra språk, men i C kallas allt för ”funktioner”. En ”procedur” är en liten avgränsad del av ett program, genom att dess lokala variabler ligger separat.

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 (Själva funktionen kallas ”funktionsdefinition” i C.) float cirkelarea(float radie) { float area; area = radie*radie*M_PI; return area; } Det är deklarationstvång på funktioner, om de står efter huvudprogrammet. (Rekommenderas.)

…med kod main- är en funktion, programmets huvudfunktion Resultat: #include <stdio.h> #include <math.h> float cirkelarea(float radie){ float area; area = radie*radie*M_PI; return area; } 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; 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); 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; Funktionsdeklaration!

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, vad får vi ut. Exempel: Beräkningarna görs i en funktion och hur man gör behöver vi inte fundera på när vi löser det övergripande problemet: Top-down-programmering Fråga efter radie Beräkna area Presentera resultat

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. (srand är också bra). 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 Kolla gärna upp math.h och andra C-bibliotek!

Top-down Detaljerna kan man vänta med. #include <stdio.h> #include <math.h> float cirkelarea(float radie); int main(void) { float area,radie; printf("Ange radien:"); scanf("%f",&radie); area=cirkelarea(radie); printf("En cirkel med radien %.3f har arean: %.3f",radie,area); } float cirkelarea(float radie){ float area; area = radie*radie*M_PI; return area; Fråga efter radie Beräkna area Presentera resultat Detaljerna kan man vänta med. Framförallt kan man tänka på funktionen 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 fortsatt = 1; while(fortsatt==1) printf("Ange radien:"); scanf("%f",&radie); area=cirkelarea(radie); printf("En cirkel med radien %.3f har arean: %.3f\n",radie,area); printf("Vill du fortsatta nej-0, ja-1?"); scanf("%d",&fortsatt); } möjligen diskutera läsa en char och problem med att retur-slaget ligger kvar i input-bufferten. detta kan lösas med fflush(stdin) men detta är ej korrekt och därmed ej portabelt

Variablers scope (deras synlighet). #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; int main(void){ int a=2; { int a=3; funk1(); funk2(); Resultat: 2,3,4,1,

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

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

enkelt! –tyvärr kan vi inte testkompilera  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; } 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 till en enkel funktion som levererar ett svar om än fel så kan du testa resten av koden

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.

Kan vi förbättra 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; 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"); Kan vi förbättra programmet?

int tak(int tal) { return sqrt(tal); } 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); }

int delbart(int taljare, int namnare) return !(taljare%namnare); #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?

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;

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 Gör fler uppgifter om du hinner E-excercises, P-programming projects