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

Relevanta dokument
Programmeringsteknik med C och Matlab

Funktionens deklaration

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

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

GPT- föreläsning 10. För en vecka sedan Problemlösning på lägre nivå kan sortera funktioner Förra gången

Programmering i C, 7,5 hp

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

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

En kort text om programmering i C.

Klassdeklaration. Metoddeklaration. Parameteröverföring

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

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

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA

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

C++ Slumptalsfunktioner + switch-satsen

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

F4. programmeringsteknik och Matlab

*Pekarvärden *Pekarvariabler & *

TDIU01 - Programmering i C++, grundkurs

Grundkurs Programmering

Enkla datatyper minne

TDIU01 - Programmering i C++, grundkurs

1 Funktioner och procedurell abstraktion

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

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

Funktioner. Jan Erik Moström,

Java, klasser, objekt (Skansholm: Kapitel 2)

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

Föreläsning 10 OM DELMÅLSKONTROLLEN ; VARIABLERS SYNLIGHET STRING OCH STRINGBUILDER

DD1361 Programmeringsparadigm. Carina Edlund

Övningar Dag 2 En första klass

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Funktioner och programstruktur. Föreläsning 5

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

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

Lathund. C för inbyggda system

Backcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Planering Programmering grundkurs HI1024 HT 2014

Programmering Grundkurs (HI1900) Teoridel

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

GPT The bitter end. Förra veckan: Rekursiva funktioner som läggs in externa filer har stor räckvidd

Att använda pekare i. C-kod

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

Poster ( structar ) Postdeklarationer

FÖRELÄSNING 2, TDDC74, VT2018 BEGREPP PROBLEMLÖSNING MED HJÄLP AV FALLANALYS PROBLEMLÖSNING MED HJÄLP AV REKURSION

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

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

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

Planering Programmering grundkurs HI1024 HT TIDAA

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010

Föreläsning 10. Pekare (Pointers)

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

Tentamen i Introduktion till programmering

Funktioner och programstruktur. Föreläsning 5

I dag: Blockstruktur, omgivningar, problemlösning

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

Lathund. Pacific C för MS-DOS

Imperativ programmering. Föreläsning 2

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

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

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

Imperativ och Funktionell Programmering i Python #TDDD73. Fredrik Heintz,

Föreläsning 6: Introduktion av listor

Modul 3 - Modularisering

2D1339 Programkonstruktion för F1, ht 2004

Introduktion till arv

Pekare och arrayer. Indexering och avreferering

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

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

Rekursion och induktion för algoritmkonstruktion

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Metoder (funktioner) Murach s: kap Winstrand Development

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

Algoritmer och datastrukturer H I HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Planering Programmering grundkurs HI1024 HT data

Operatorer Tilldelning Kodblock { } if satsen Logiska uttryck Att programmera

Lathund. C för inbyggda system

6.1 Kompilering och lite grundläggande information

Programmering A. Johan Eliasson

Hantering av textsträngar och talsträngar. William Sandqvist

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

Funktioner. Linda Mannila

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

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

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

Föreläsning 13. Rekursion

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

Datorteknik 2 (AVR 2)

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Assemblerprogrammering - fördjupning

Föreläsning REPETITION & EXTENTA

Transkript:

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 Denna gång Reflektioner kring OU1 Funktioner

Reflektioner kring OU1 Goto är en del av C Att använda goto anses dock inte vara god programmeringsmetodik Det blir givetvis enbart en gradskillnad mellan att använda goto å ena sidan och break och continue å andra sidan man lär sig inte använda de mer naturliga konstruktionerna i språket: if-, while- och forsatser Vi har beslutat att på OU3 kommer det att ge O om man använder villkorliga styrningar av programflödet (dvs goto, break och continue). Break i switch-satsen undantaget På OU1 och OU2 kommer goto att ge K och man skall kunna motivera varför goto är motiverat Nackdelarna med goto är det blir svårt att förstå flödet i programmet det blir svårt att se vilken kontext vi hamnar i vid hopp kompilatorn får oerhörda problem att generera bra kod

Reflektioner kring OU1 Tänk också på att det kommer individuell programmeringstenta och teoritenta Till dessa uppgifter kommer det inte att finnas facit

Funktioner En egendefinierad funktion kan ligga före eller efter mainfunktionen Om funktionen ligger efter main måste vi även lägga en funktionsdeklaration före main Detta för att kompilatorn ska veta vad funktionen skall ha för argument och vad den returnerar int sum(int a, int b); int main(void){ int a=1,b=2,c; c=sum(a,b); return 0; int sum(int a, int b){ return a+b;

Funktioner Om du vill använda din funktion i flera olika program är det lämpligt att lägga den i en egen fil Filen med funktionen/ funktionerna ges ändelsen.c Denna fil skall inte ha något main-funktion För att kompilatorn skall kunna kompilera måste du skapa en fil som endast innehåller funktionsdeklarationen Denna fil ges ändelsen.h I din programfil måste.h-filen inkluderas Detta görs med #include Vid kompilering anger du namnet på alla.c-filer som innehåller kod som du vill ha med i det slutliga programmet

sum.c sum.h int sum(int a, int b){ return a+b; int sum(int a, int b); prog.c #include<stdio.h> #include sum.h peppar>gcc Wall prog.c sum.c o prog peppar>./prog 5 int main(void){ printf( %d,sum(2,3)); return 0;

Funktioner En funktion kan givetvis vara utan formella parametrar En funktion behöver inte heller returnera något void PrintHej(void){ time_t t[1];struct tm *timeinfo; time(t);timeinfo=localtime(t); int hour=timeinfo->tm_hour; switch(hour){ case 21: case 22: case 23: case 0: case 1: case 2: case 3: case 4: printf("god natt");break; case 5: case 6: case 7: case 8: case 9: printf("god morgon");break; case 10: case 11: case 12: case 13: printf("god middag");break; case 14: case 15: case 16: case 17: printf("god eftermiddag"); break;

Funktioner Vi definierar formella parametrarna till en funktion De parametrar som skickas till funktionen vid anrop kallas aktuella parametrar De aktuella parametrarna kan utgöras av uttryck Uttrycket evalueras i så fall innan anropet sker Vilken aktuell parameter som knyts till vilken formell parameter styrs enbart av ordningen i anropet och deklarationen int sum(int a, int b){ return a+b; int main(void){ int a=3,b=2,c; /*Alla anrop ger samma svar*/ c=sum(5,3); c=sum(a+b,3); c=sum(a+2,3); c=sum(a+b,a) c=sum(a+b++,b);

Funktioner Det finns inget som hindrar att en funktion anropar andra funktioner En funktion kan till och med anropa sig själv Detta kallas rekursion För att rekursionen skall terminera, dvs avslutas, måste det finnas stoppvilkor Varje rekursivt anrop måste ta oss ett steg närmare stoppvilkoret

Rekursion vs. iteration Rekursion är ett sätt att uttrycka iteration, dvs en kontrollerad upprepning av satser I en del språk (som ML, Prolog, Lisp) är rekursion den enda formen av iteration I en del språk (som Fortran 77) kan man inte skriva rekursiva funktioner Fördelar med rekursion är att det ofta blir eleganta, kompakta lösningar det lämpar sig oerhört väl för problem som är rekursiva i sin natur, tex att söka information i ett träd Nackdelar är ineffektivitet, vid varje funktionsanrop skall en massa data sparas undan etc. olämpligt för applikationer som tex servrar som skall iterera för alltid

Våra första C-program (12) Skriv en rekursiv funktion som beräknar fakulteten för ett tal. Fakulteten för n definieras som n! = 1*2*3* *(n-1)*n

Variablers räckvidd En variabel som deklareras i ett block är lokal i det blocket Den deklarerade variabeln gäller från deklarationen och neråt i blocket Om en variabel deklareras utanför alla block i början av filen blir den global Om samma variabelnamn använts på flera nivåer gäller den deklaration som ligger närmast det block där variabeln används Den mest lokala deklarationen slår alltså ut den mer globala

Variablers räckvidd #include<stdio.h> int a=1; void f1(int a){ printf( %d,a); void f2(void){ printf( %d,a); peppar>./test 1312 void f3(void){ int a=2; printf( %d,a); int main(void){ f1(a); int a=3; f1(a); f2(); f3();

Våra första C-program (13) Skriv en funktion som omvandlar valutor. Funktionen skall ha följande deklaration. float = valutaomvandling(float intotal, char from, char to) Där tecknen from och to kan vara k kr, e euro och d US. dollar. Använd kurserna (forex 23/11): 100 kr ger 9,52 euro 100 kr ger 11,91 dollar Skriv ett main-program som testar funktionen

Sammanfattning Sammanfattande nyckelord: rekursion, h-filer, funktioner, scope Sammanfattande mening: Rekursiva funktioner som läggs in externa filer har stor räckvidd