Slides:



Advertisements
Verwante presentaties

Advertisements


Voorrangsregels bij rekenen (2)


Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Een programma opbouwen.
Hoofdstuk 8: Recursie.
Gestructureerd programmeren in C
Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.
Van domeinklasse tot implementatie
GESPRG Les 14 Gestructureerd programmeren in C. 174 Details! The devil is in the details.
Tevredenheidsonderzoek 2007


Hoofdstuk 6: Controle structuren
Hoofdstuk 4: Klassen definiëren
1 SOCS Hoofdstuk 1 Computerarchitectuur. 2 Overzicht Eenvoudig C Arrays Functies Records Dynamische gegevenstructuren Macro’s C.
1 SOCS Hoofdstuk 1 Programmeertaal C. 2 Kenmerken van C Hogere programmeertaal  Grote verzameling types, strenge type controle  Zelf nieuwe types definiëren.
Frank Stalpers en Ad Baars
Numerieke Natuurkunde
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
GESPRG Les 8 Gestructureerd programmeren in C. 101 Array Meerdere variabelen van hetzelfde type kun je samennemen in één array variabele. Stel in een.
GESPRG Les 9 Gestructureerd programmeren in C dimensionale array Array van array’s int i = 31; int a[4] = {7, 23, 6, 2}; int m[2][4] = { {1, 1,
GESPRG Les 12 Gestructureerd programmeren in C. 152 Huiswerk Uitwerking void reverse(int a[], int n) { int first = 0, last = n - 1; while (first < last)
GESPRG Les 7 Gestructureerd programmeren in C. 92 Verwisselen Schrijf een functie waarmee twee int variabelen verwisseld kunnen worden. void wissel(int.
Opg.1a: substring } String substring(int a) { int t; for (t=a; t
Imperatief programmeren nProgramma bestaat uit nRunnen is opdrachten gegroepeerd in methoden één voor één uitvoeren te beginnen met main.
Hoofdstuk 7 verplicht… Keuze.
Eerste deeltoets Uitwerking. Resultaten Gemiddeld: 6,01 Tips voor de volgende keer: – Werk in klad uit, schrijf duidelijk – Oefenen met loops en tellertjes.
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
Foto 65 – wegenis + parking + rechts G01 Foto 66 – G01.
Inleiding programmeren in C++ Life Science & Technology 2 februari Universiteit Leiden.
Inleiding programmeren in C++ Life Science & Technology 9 februari Universiteit Leiden.
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
PHP functies.
Algoritmiek Object-georiënteerd Programmeren
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 4.
P. 1 Vakgroep Informatietechnologie Scanf voorbeeld #include int main(void) { int i=-1,j=-1,k=-1,l=-1; int b; b=scanf("%d %d %d %d",&i,&j,&k,&l); printf("res=%d.
Deel I: Programmeertaal C 6. Arrays en Pointers
P. 1 Deel I: Programmeertaal C 4. Functies en Macro’s Prof.Dr.Ir. Filip De Turck.
, 17h30Recursie 1 Inleiding tot recursie Karel Popelier.
PHP & MYSQL LES 02 PHP & FORMULIEREN. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Tircms03-p les 6 Templates. Functietemplates void verwissel(int &x, int &y); { int w=x;x=y;y=w;} Dezelfde functie voor meerdere types heet een functietemplate.
PEMSY1http:// 1  Herhaling: combineren van assembler en C  Herhaling: subroutine  Oefening: melodie Klas EV2B: week.
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 3 redirection,
PROGRAMMEREN LOGISCH en FUNCTIONEEL Ik zeg wat ik denk!
Functioneel programmeren Een snelle herhaling…. Functie-definitie static int kwad (int x) { return x*x ; } kwad x = x * x Haskell kwad :: Int  Int.
PEMSY1http:// 1  Herhaling nieuwe instructies van vorige week  nieuw: combineren van assembler en C  oefeningen: assembler.
Scope. Scope van variaben/methoden Een variabele is te gebruiken binnen de { en } waarbinnen hij is aangemaakt. Hetzelfde geld voor een methode { int.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Een embedded systeem: ARM bord.
Opgave 1a ncompiler: vertaalt broncode naar machine-uitvoerbare code ninterpreter: voert broncode direct uit.
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.
 C++ heeft een inheritance mechanisme  Manier om functionaliteit te ‘erfen’ van een parrent class ◦ Polymorphisme ◦ Zoals we het ook in C# kennen.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  de track structuur van een MIDI file interpreteren.
IF() ELSE() LES 4: VOORWAARDEN. BOOL Een variabele die slechts 2 mogelijke waarden kan hebben: true(waar) of false(niet waar) duid je aan met bool bool.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Gameprogrammeren: Objecten en geheugen
SOCS Test 1.
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Gameprogrammeren: Methoden
C++ • C++ als een verbetering van C • Abstracte datatypen met classes • Constructoren en destructoren • Subklassen • binding van functies 1.
Tinpro015b-les6 Templates.
Tinpro015b-les4 Klassen.
Programmastructuurdiagrammen (PSD)
Implementatie Zoekboom
Transcript van de presentatie:

Gestructureerd programmeren in C GESPRG Les 6

Scope versus Lifetime Elke variabele heeft een: Scope (bereik)  waar kun je de variabele gebruiken (tijdens het coderen van het programma) Lifetime (levensduur)  wanneer bestaat de variabele (tijdens het uitvoeren van het programma) Scope Lifetime Globaal Hele programma (kan verborgen zijn) Bestaat alleen als het programma wordt uitgevoerd Lokaal Functie Bestaat alleen als de functie wordt uitgevoerd Een parameter is een lokale variabele (die bij de functieaanroep wordt geïnitialiseerd).

De globale a is verborgen (door de lokale a). Scope int a; void func(void) { int a, b; … } int main(void) { int b; func(); return 0; De globale a is verborgen (door de lokale a). In scope Out of scope

Lifetime Reserveer geheugenruimte voor lokale a en b in func int a; void func(void) { int a, b; … } int main(void) { int b; func(); return 0; Geef geheugenruimte vrij van lokale a en b in func Reserveer geheugenruimte voor globale a Reserveer geheugenruimte voor lokale b in main Geef geheugenruimte vrij van lokale b in main Geef geheugenruimte vrij voor globale a

Recursieve functie Een functie die zichzelf aanroept

Faculteit Bereken n! = 1 * 2 * 3 * … * n 1 als n = 0 n! = Iteratieve implementatie int faculteit(int n) { int i, res = 1; for (i = 1; i <= n; i = i + 1) { res = res * i; } return res; 1 als n = 0 n! = n * (n - 1)! als n > 0 Recursieve implementatie int faculteit(int n) { if (n > 0) return n * faculteit(n - 1); return 1; } Wat is beter ?

Recursieve aanroep (voorbeeld) int j = faculteit(4); int j = 24; return 24; return 4 * 6; return 24; return 4 * faculteit(3); return 6; return 3 * faculteit(2); return 3 * 2; return 6; return 2; return 2 * 1; return 2; return 2 * faculteit(1); return 1; return 1; return 1 * 1; return 1 * faculteit(0); int faculteit(int n) { if (n > 0) return n * faculteit(n - 1); return 1; } return 1;

n boven k Bereken n boven k = n! / (k! * (n - k)!) n boven k = 1 voor k == 0 en k == n. Voor 0<k<n geldt: int n_boven_k(int n, int k) { return faculteit(n) / (faculteit(k) * faculteit(n - k)); } Wat is beter ? Recursieve implementatie Recursieve implementatie int n_boven_k(int n, int k) { if (k == 0 || k == n) return 1; return n_boven_k(n - 1, k - 1) + n_boven_k(n - 1, k); }

Recursieve aanroep (voorbeeld) int n_boven_k(int n, int k) { if (k == 0 || k == n) return 1; return n_boven_k(n - 1, k - 1) + n_boven_k(n - 1, k); } int j = n_boven_k(4, 2); return 3 + n_boven_k(3, 2); return n_boven_k(3, 1) + n_boven_k(3, 2); return 1 + n_boven_k(2, 1); return n_boven_k(2, 0) + n_boven_k(2, 1); return 1 + 2; Maak zelf af! return 1 + n_boven_k(1, 1); return n_boven_k(1, 0) + n_boven_k(1, 1); return 1; return 1 + 1; return 1; return 1;

In dit geval is de recursieve versie dus “beter”. Domein Faculteit Domein = [0..12] n boven k Domein versie met faculteit = [0..12] Domein recursieve versie = [0..33] In dit geval is de recursieve versie dus “beter”.

Huiswerk Schrijf een recursieve functie int fib(int n) die het nde getal uit de fibonacci rij berekent. Zie: http://en.wikipedia.org/wiki/Fibonacci_number Paragraaf 4.13 geeft een iteratieve oplossing. Het antwoord op deze vraag staat in het boek in paragraaf 5.15. Eerst zelf proberen natuurlijk! Bestudeer C boek: paragrafen 5.6, 5.7 en 5.15.