Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdJoanna Lenaerts Laatst gewijzigd meer dan 9 jaar geleden
1
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten: Sudoku oplossen volgens de ‘ik kan niet anders’ methode
2
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 2
3
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 3 C basis typen – boolean geen apart boolean type (meestal wordt int gebruikt) Boolean expressies: 0 is niet waar, andere getallen wel Dus let op: klaar = ( a == b ); if( klaar )is het zelfde alsif( klaar == 1 )? if( ! klaar )is het zelfde alsif( klaar == 0 )?
4
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 4 Decompositie = verdeel en heers Opdracht: welk getal komt in een array van 100 getallen ( ieder getal is in de range 1.. 10 ) het meest voor (bij ex-equo mag je een van die meest voorkomde kiezen)? Eerst maar de functie definieren: int KomtMeestVoor( int a[ 100 ] );
5
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 5 Decompositie = verdeel en heers Opdracht: welk getal komt in een array van 100 getallen ( ieder getal is in de range 1.. 10 ) het meest voor (bij ex- equo mag je een van die meest voorkomde kiezen)? Hmmm - als we een functie hadden die kon tellen hoe vaak een gegeven getal N voorkomt, dan was het makkelijk! Zo eentje: int AantalKeer( int a[ 100 ], int N );
6
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 6 Decompositie = verdeel en heers Nu hebben we twee deelproblemen, die beide wel oplosbaar zijn, desnoods door twee verschillende programmeurs. int AantalKeer( int a[ 100 ], int N ); int KomtMeestVoor( int a[ 100 ] );
7
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 7 Decompositie = AantalKeer int AantalKeer( int a[ 100 ], int N ){ int i, count; count = 0; for( i = 0; i < 100; i ++ ){ if( a[ i ] == N ){ count++; } return count; }
8
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 8 Decompositie : KomtMeestVoor int AantalKeer( int a[ 100 ], int N ) int KomtMeestVoor( int a[ 100 ] ){ int i, meest, keer = -1; for( i = 1; i < 11; i++ ){ if( AantalKeer( i ) > keer ){ keer = AantalKeer( i ); meest = i; } return meest; }
9
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 9 Decompositie = verdeel en heers Opdracht: Hoe vaak komt in een gegeven string s de substring x voor? Eerst maar de functie definieren: int KomtZoVaakVoorIn ( char s[], char x[] );
10
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 10 Decompositie = verdeel en heers Het is misschien handig om te weten hoe lang een string is: int strlen( char s[] ); Het is vast ook handig om ‘in 1 keer’ te weten of op een gegeven positie in een string s de string x staat: int staatOp( char s[], int n, char x[] );
11
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 11 Decompositie : KomtZoVaakVoorIn int KomtZoVaakVoorIn ( char s[], char x[] ){ int n, i; n = 0; for( i = 0; i < strlen( s ); i ++ ){ if( staatOp( s, i, x )){ n++; } return n; }
12
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 12 Decompositie : staatOp int staatOp( char s[], int n, char x[] ){ int i; for( i = 0; i < strlen( x ); i ++ ){ if( x[ i ] != s[ n + i ] ){ return 0; } return 1; }
13
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 13 Decompositie : strlen int strlen( char s[] ){ int i; i = 0; while( s[ i ] != ’\0’ ){ i++; } return i; }
14
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 14 Gedeeltelijke Sudoku oplossing in een text file File p4:.4.|...|81....|..9|62. 9.6|..3|... ---+---+---.1.|.9.|.78.97|8.1|5.. 85.|.4.|.6. ---+---+---...|5..|3.4.89|6..|....34|...|...
15
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 15 Opdracht 1 ”pas inlezen en wegschrijven aan” Pas de sudoku inlees en wegschrijf functies aan zodat er ook een ’.’ ingelezen en weggeschreven kan worden. De punt stelt een oningevuld veld voor. Intern (in de int s[ 81 ] array) heeft een oningevuld veld de waarde 0.
16
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 16 1 check uitvoeren – aanpassen ! int SudoOneCheck( int s[ 81 ], int c ){ int i, n[ 10 ]; for( i = 0; i < 10; i++ ){ n[ i ] = 0; } for( i = 0; i < 9; i++ ){ n[ s[ SudoChecks[ c ][ i ] ] ]++; } for( i = 1; i < 10; i++ ){ if( n[ i ] > 1 ){ return 0; } return 1; }
17
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 17 Opdracht 2 ”oplossen” Stel een functionele decompositie op voor het oplossen van een sudoku op de volgende manier: Kijk op ieder veld (begin bij 1) of het leeg is, en zo ja wat je er mag invullen. Als je er maar 1 getal mag invullen dan vul je dat in, je print wat je invult, je print de sudoku zoals die er dan uitziet, en dan begin je overnieuw op veld 1 te kijken. Als je niets meer kan invullen, bepaal dan of je de sudoku helemaal hebt ingevuld, en print “klaar” of “ik zit vast”.
18
vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 18 Opdracht 2 ”oplossen” -Bepaal hoe je hoofdfunctie er uit gaat zien – dat is hier nogal simpel -Bepaal wat je al hebt - in dit geval de functies voor inlezen en wegschrijven, en de functie voor het checken van een gedeeltelijk ingevulde sudoku. -Bedenk “tussenliggende” functies, zodanig dat iedere functie redelijk te doen blijft.
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.