Slides:



Advertisements
Verwante presentaties

Advertisements

Objectgeoriënteerd Programmeren in C++


Sudoku puzzels: hoe los je ze op en hoe maak je ze?


Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden.
Algoritmen en Datastructuren (ALDAT)
Programmeren met Alice
Hoe een TomTom een sudoku oplost
Hoofdstuk 8: Recursie.
Arduino project.
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.
Verslag TL3.
PROS2 Les 11 Programmeren en Software Engineering 2.
Hoofdstuk 9 havo KWADRATEN EN LETTERS
GESPRG Les 14 Gestructureerd programmeren in C. 174 Details! The devil is in the details.
Datastructuren Analyse van Algoritmen en O
Datastructuren Analyse van Algoritmen en O
‘Inleiding programmeren in Java’ SWI cursus: ‘Inleiding programmeren in Java’ 4e college Woe 19 januari 2000 drs. F. de Vries.

Hoofdstuk 6: Controle structuren
1 Datastructuren Zoekbomen II Invoegen en weglaten.
Tegengestelden / Synoniemen
Frank Stalpers en Ad Baars
Flow controle Keuzes maken. Het if-statement Soms moet code alleen in bepaalde situaties uit gevoerd worden Hiervoor heeft C de if-else constructie: if(voorwaarde1){
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
Real-Time Systems (RTSYST) Week 2. Process/Thread states Scheduler = deel van OS dat de toestanden van processen/threads bepaald. OS gebruikt timerinterrupt.
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.
Imperatief programmeren nProgramma bestaat uit nRunnen is opdrachten gegroepeerd in methoden één voor één uitvoeren te beginnen met main.
Eerste deeltoets Uitwerking. Resultaten Gemiddeld: 6,01 Tips voor de volgende keer: – Werk in klad uit, schrijf duidelijk – Oefenen met loops en tellertjes.
Inleiding programmeren in C++ Life Science & Technology 2 februari Universiteit Leiden.
Inleiding programmeren in C++ Life Science & Technology 9 februari Universiteit Leiden.
, 17h30Recursie 1 Inleiding tot recursie Karel Popelier.
1 Syntax JavaLogo. 2 Hoofdstuk 1 Tekenen in Java.
PHP & MYSQL LES 02 PHP & FORMULIEREN. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Algoritme Inhoud: Definitie algoritme Recursieve algoritmes Opgaven
Franse Les Les 19 Vorige les & huiswerk Voyages unité 8 Écouter Pirates chapitre 6 & 7 Vorige les & huiswerk Voyages unité 8 Écouter Pirates chapitre 6.
Tircms03-p les 2 Hfdst 3,4 Meer operatoren Functies.
Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk.
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,
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 top-down decompositie Opdrachten:
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Een embedded systeem: ARM bord.
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
H3.6, Nieuwe kansen 1 Boek blz. 40 t/m 69, ca. 8 weken 4. Geboorte- verhalen Gaat over geboorteverhal en die iets laten zien van het nieuwe begin dat hun.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
Divide & Conquer: Verdeel en Heers vervolg Algoritmiek.
LEZEN 3.4 FUNCTIES VAN TEKSTGEDEELTEN. KLAAR MET DE TOETS? Kijk de paragraaf lezen 3.4 na (zie antwoorden in je ) Meld jezelf aan op Google Classroom.
Objectgeoriënteerd Programmeren (2)
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Gameprogrammeren: Afsluiting
Tinpro015b-les3 Hfdst 3,4 Meer operatoren Functies.
Aantrekkelijk formuleren
Tinpro015b-les4 Klassen.
Programmastructuurdiagrammen (PSD)
Small Basic Console deel 2
Implementatie Zoekboom
Nim, een strategisch spelletje
Onderwijskunde en vakdidactiek 2
Ontwerp een buitenles Les 1 Les 3.
Doolhof. doolhof doolhof Maak een routine die de ‘hekken’ tussen de cellen weghaalt Maak een 2-dimensionale array met kolommen en rijen aangeklikt.
Python – For loop + strings
Transcript van de presentatie:

Gestructureerd programmeren in C GESPRG Les 11

Sudoku int areRowsValid(int m[][9]) { int r; for (r = 0; r < 9; r = r + 1) { int c, checklist[9] = {0}; for (c = 0; c < 9; c = c + 1) { int digit = m[r][c]; if (digit != 0) { if (checklist[digit - 1] == 0) { checklist[digit - 1] = 1; } else { return 0; return 1; Waarom is het noodzakelijk om alle dimensies, behalve de eerste, op te geven? Deze variabelen zijn lokaal in het compound statement van de bovenstaande for Deze variabele is lokaal in het compound statement van de bovenstaande for

Sudoku int isValid(int m[][9]) { return areRowsValid(m) && areColumnsValid(m) && areBlocksValid(m); } De functies areColumnsValid en areBlocksValid gaan we bij het practicum maken.

Sudoku solve Algoritme: Backtracking http://en.wikipedia.org/wiki/Backtracking Voorbeeld: Doolhof Kies bij elke splitsing de weg die het meest aan je linkse hand ligt (die je nog niet hebt onderzocht) Keer terug als je vastloopt naar de laatste splitsing.

Sudoku backtracking Zoek eerste lege vakje. Vul een 1 in en als de puzzel nog valid is los de puzzel dan op (recursie). Valid en oplossen gelukt  return gelukt. Invalid of oplossen niet gelukt  Vul een 2 in als de puzzel nog valid is los de puzzel dan op (recursie). Invalid of oplossen niet gelukt  Vul een 3 in en als de puzzel nog valid is los de puzzel dan op (recursie) … Als bij invullen van 9 de puzzel invalid is of als het oplossen (recursief) niet is gelukt  return niet gelukt.

Sudoku solve Probleem? int solve(int m[][9]) { int r, c, digit; for (r = 0; r < 9; r = r + 1) { for (c = 0; c < 9; c = c + 1) { if (m[r][c] == 0) { for (digit = 1; digit <= 9; digit = digit + 1) { m[r][c] = digit; if (isValid(m) && solve(m) == 1) { return 1; } m[r][c] = 0; return 0; Probleem?

Zie laatste practicumopdracht. Sudoku probleem Gepresenteerde functie kan elke “valid” Sudoku oplossen (zelfs een lege). Een Sudoku mag maar één oplossing hebben. Hoe kun je dat controleren? Zie laatste practicumopdracht.

C verkorte notatie Alle rekenoperatoren kunnen gecombineerd worden met operator= als resultaat in linker operand moet worden opgeslagen. a = a + b;  a += b; x = x * y;  x *= y; Deze assignment operatoren worden van rechts naar links geëvalueerd. Zie prioriteitentabel. int a = 6, b = 7, c = 8; a += b += c; printf("a=%d b=%d c=%d\n", a, b, c); (a += b) += c; printf("a=%d b=%d c=%d\n", a, b, c);

C verkorte notatie Increment en decrement operatoren. a = a + 1;  ++a; of a++; b = b - 1;  --b; of b--; Als een increment of decrement operator in een expressie wordt gecombineerd met meerdere operatoren dan wordt de prefix vooraf en de postfix achteraf uitgevoerd. Prefix operator Postfix operator int a = 6, b, c; b = a++; c = ++a; printf("a=%d b=%d c=%d\n", a, b, c);

C verkorte notatie Conditionele operator ? :  int abs(int i) { if (i >= 0) { return i; } else { return –i;  int abs(int i) { return i >= 0 ? i: –i; }

Huiswerk Bestudeer C boek: paragrafen 2.10 t/m 2.12. paragraaf 4.17. Schrijf een zo kort mogelijke implementatie van de onderstaande functie: void reverse(int a[], int n) { int first = 0, last = n - 1; while (first < last) { wissel(&a[first], &a[last]); first = first + 1; last = last - 1; }