Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Backtracking: –Permutaties –Koninginnen.

Slides:



Advertisements
Verwante presentaties
Sudoku puzzels: hoe los je ze op en hoe maak je ze?
Advertisements

The stock market will go up De beurswaarden zullen stijgen YESNO JA NEEN Is Jefken a good person ? Is Jefken een goed mens ? YES NO JA NEEN Is Lonny a.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Operatoren, Arrays, Command-line tools.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Een programma opbouwen.
Inleiding computersystemen en netwerken deel 3 Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
Inleiding computersystemen en netwerken deel 3 Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 6.1.
Providing your knowledge, skills and business contacts Whitepaper Marketing 5 gouden tips uit de praktijk In 30 minuten.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.
Il Silenzio.
Dit is een rekenspel tot cijfer 5.
Inleiding Databanken: oefeningen
Copyright met toestemming gebruikt van Stichting Licentie ©1989 Mercy Publishing 1/4 FATHER, I WANT YOU TO HOLD ME (Brian Doerksen) 1. Father, I want You.
1/1/ / faculty of Computer Science eindhoven university of technology 5B040:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 8(2): Multi-processing.
ONDERWIJS Voettekst: aanpassen via Beeld (Office 2003 of eerder) of Invoegen (Office 2007 of later), vervolgens 'Koptekst en voettekst'
Leven zoals het leven je is gegund
Opgave 1a: afronden int n=5; double a, b, c, d; a = n * 1.5; b = n * 3 / 2; c = n / 2 * 3; d = 3 / 2 * n; a b c d
Eerste deeltoets Uitwerking. Resultaten Gemiddeld: 6,01 Tips voor de volgende keer: – Werk in klad uit, schrijf duidelijk – Oefenen met loops en tellertjes.
Sunday, 03 August 2014 zondag 3 augustus 2014 Click Klik.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 2 - onderwerpen Herhaling instructieset en.
Computerarchitectuur
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  D3EEMS1  programmed I/O: de.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology ; PIC assember programeren 1 Les 3 - onderwerpen Het.
KPRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology Les 2 sheet 1 Wat gaan we doen:  Een (vaste) melodie.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 4 - onderwerpen DB038 hardware : LEDs en displays.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 4 - onderwerpen DB038 hardware : LEDs en displays.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Het ARM bord met wat library functies.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology ; PIC assember programeren 1 Les 4 - onderwerpen Multiplexen.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  basis files: ram-rom.zip.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 3 - onderwerpen Instruction timing Shadow.
2TPRJ8 – hardware en ontwikkelomgeving Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Wouter van Ooijen Mail:
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Wouter van Ooijen Mail:
DU2PRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Beginselen van C opgaves… volgende week: ARM.
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  herhaling ARM assembler instructies.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag GUI  command line redirection.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 6 - onderwerpen seriele interface (UART -
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Wouter van Ooijen Mail:
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology ; PIC assember programeren 1 Les 5 - onderwerpen Errata.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology ; PIC assember programeren 1 Les 2 - onderwerpen PIC16F688.
1/1/ / faculty of Electrical Engineering eindhoven university of technology PGO opdracht trim. 1.2, week 1: Digitaal/Analoog, maar dan digitaal… A.C. Verschueren.
Banalisering van technologie "I [will] argue that it is when technologies such as the telephone and the computer cease to be sublime icons of mythology.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 6 - onderwerpen Code paging Switch bounce.
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  herhaling ARM assembler instructies.
1/1/ / faculty of Computer Science eindhoven university of technology 5B040:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 9(2): Virtual.
Taaltheorie en Taalverwerking Parsing Continued. Totnutoe: Top-Down-Parser.
Link Popularity Het principe van linkpopulariteit kun je als volgt samenvatten: hoe meer webpagina's er naar een bepaalde webpagina linken, des te belangrijker.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 7 onze.
Amber moen 4D ict 31 oktober
C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 2 definitie.
Inleiding computersystemen en netwerken deel 3 Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 3.1 Peter Kramer Mail:
DU2PRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Arrays en pointers lichtkrant op het ARM bordje.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  een MIDI track interpreteren, laten zien en afspelen.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 3 redirection,
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  Een (vaste) melodie spelen op de PC speaker 
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 4 - onderwerpen DB038 hardware : luidsprekertje.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Een embedded systeem: ARM bord.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 3 - onderwerpen Instruction timing Shadow.
Flip de Proef Hoofdstuk 4 maar dan anders…. Wat is dat? Hoofdstuk 4 gaat over handig tellen. Dat gaan we proberen 's op een andere manier te doen. Ik.
Ondernemend gedrag Hoofdstuk 2 Kan het ook beter? Signaleer mogelijkheden voor verandering.
Test 1 Present.me uurloonberekening. Maandsalaris  Maandsalaris als je fulltime (voltijd) zou werken.
Het maken van een toets. Inleiding Voordat je aan de toets gaat beginnen doe je er verstandig aan om aan de volgende tips te denken: 1.Goed lezen Goed.
Training: Inloggen en Zoeken
PPS Daniel 14/01/2008 Il Silenzio.
Training: Inloggen en Zoeken
Training: Inloggen en Zoeken
Drama Reflectie Jennie van Baalen
Les 5 vermenigvuldigen en delen in dagelijkse situaties
Kort herhalen les 3 voorbeeld toets som camping
Procedures aan begin van het jaar
Transcript van de presentatie:

vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Backtracking: –Permutaties –Koninginnen Opgave: frankeren

vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 2 Backtracking Techniek voor het brute-force zoeken van oplossingen. 1. Begin met een ‘lege’ oplossing 2. Doe een stap, hopelijk in de goede richting 3. Als je een oplossing gevonden hebt: mooi zo 4. Als het duidelijk is dat je fout zit dan doe je de laatste stap weer terug (daar komt de naam backtracking vandaan) 5. Als je niet fout zit en nog niet aan een complete oplossing bent: zie 2.

vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 3 Probleem: Genereer alle mogelijke ordeningen (rijtjes) van de cijfers Ieder cijfer mag maar 1 keer voorkomen. Oplossing: genereer alle rijtjes van 10 cijfers, maak je geen zorgen over duplicaten. Filter alleen wel de rijtjes eruit die duplicaten bevatten. permutaties

vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 4 for( a[0] =0; a[0] <10; a[0]++ ) for( a[1] =0; a[1] <10; a[1]++ )... for( a[9] = 0; a[9] <10; a[9]++ ) if( ! duplicates( a ) ) solution( a ); Permutaties 1

vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 5 void permutate( int a[10]; int i ){ if( i == 10 ){ if( ! duplicates( a )) solution( a ) return; } for( j = 0; j < 10; i++ ){ a[ i ] = j; permutate( a, i + 1 ); } Permutaties 2

vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 6 void permutate( int a[10]; int i ){ if( duplicates( a )) return; if( i == 10 ){ solution( a ); return; } for( j = 0; j < 10; i++ ){ a[ i ] = j; permutate( a, i + 1 ); a[ i ] = -1; } Permutaties 3

vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 7 Het koninginnen probleem Probleem: Plaats 8 koninginnen op een schaakbord, zodanig dat zij elkaar niet kunnen slaan.

vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 8 Het koninginnen probleem Oplossing: Gegeven een schaakbord met N (<8) koninginnen die elkaar niet kunnen slaan. Probeer voor ieder vrij veld of daar een koningin geplaatst kan worden zonder dat zij een van de anderen kan slaan. Voor iedere plek waar dat kan heb je een oplossing met N + 1 koninginnen.

vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 9 typedef int board[8][8]; void queens( board b, int n ){ int i, j; if( n == 8 ){ print_board( b ); return; } for( i = 0; i < 8; i++ ) for( j = 0; j < 8; j++ ){ if( ! board[ i ][ j ] ){ board[ i ][ j ] = 1; if( valid_board( b, i, j )){ queens( b, n + 1 ); } board[ i ][ j ] = 0; }

vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 10 Opdracht ”frankeren” Ik heb postzegels van 44, 72 en 89 cent. Dat waren de standaard tarieven voor Nederland, Europa en Wereldwijd. Helaas zijn de tarieven voor buiten Nederland per iets verhoogd. Ik wil frankeren volgens de nieuwe tarieven, maar wel met de postzegels die ik in huis heb, en ik wil natuurlijk zo min mogelijk verspillen. Welke zegels moet ik plakken voor de volgende tarieven? (europa): 0.75, 1.50, 2.25, 3.00, 6.00 (wereld): 0.92, 1.84, 2.76, 5.52, 10.12

vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 11 Opdracht ”frankeren” #define N_ZEGELS 3 int zegels[ 3 ] = { 44, 72, 89 };... int main(int argc, char *argv[]){ frankeer( 75 ); frankeer( 150 ); frankeer( 225 ); frankeer( 300 ); frankeer( 600 ); frankeer( 92 ); frankeer( 184 ); frankeer( 276 ); frankeer( 552 ); frankeer( 1012 ); system("PAUSE"); return 0; }

vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 12 Opdracht ”frankeren” void frankeer( int porto ){ int i, beste; int lijstje[ N_ZEGELS ]; int beste_lijstje[ N_ZEGELS ]; for( i = 0; i < N_ZEGELS; i++ ){ lijstje[ i ] = 0; } beste = ; voeg_toe( porto, 0, -1, lijstje, &beste, beste_lijstje ); printf( "%-4d kost %-4d :", porto, beste ); for( i = 0; i < N_ZEGELS; i++ ){ printf( "%2d keer %2d, ", beste_lijstje[ i ], zegels[ i ] ); } printf( "\n" ); }

vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 13 Opdracht ”frankeren” Maak een recursieve functie: void voeg_toe( int porto, int totaal, int zegel, int lijstje[], int *beste, int beste_lijstje[] ); Porto is het bedrag dat geplakt moet worden, totaal het bedrag dat not nu toe geplakt is. Zegel is de index van de zegel die er bij geplakt gaat worden. Lijstje is voor iedere zegel het aantal dat tot nu toe geplakt is. Beste is het totaal bedrag van de tot nu toe beste keuze aan zegels. Beste_lijstje is het lijstje dat hoort bij beste. De functie moet zegel (mits niet -1) toevoegen aan lijstje en totaal. Als het totaal nu gelijk aan of hoger dan porto is dan hebben we een oplossing. Als het totaal ook nog eens kleiner is dan *beste dan hebben we een betere oplossing dan we tot nu toe hadden, en moeten we dus die (*beste en beste_lijstje) oplossing vervangen door de huidige. Als het totaal kleiner is dan porto dan dan roepen we de functie zelf weer aan voor alle mogelijke waarden (indexen) van zegel.

vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 14 Opdracht ”frankeren” Let op !! -Waarom is beste een pointer -Waarom zijn porto en totaal geen pointers? -Waarom zijn lijstje en beste_lijstje geen pointers? In de vorige sheet is het eigenlijke backtracken niet vermeld. -In welke twee parameters bouw je de oplossing op? -Wat moet je doen om te ‘backtracken’?