Uitwerking Opgaven Programmeermethoden, najaar 2020 - opgaven 34/39a Opgave 34 a. De gezochte letter is boek[55][4][3]. Let er op dat sommigen de derde letter in het TWEEDE array-element willen opslaan, etcetera; dat zou dan boek[54][3][2] worden. b. for ( bl = 0; bl < 99; bl++ ) for ( i = 0; i < 5; i++ ) for ( j = 0; j < 60; j++ ) Nieuw[bl][i][j] = A[i][j]; c. for ( i = 0; i < 35; i++ ) for ( j = 0; j < 60; j++ ) wissel (A[0][i][j],A[98][i][j]); Opgave 35 #include #include using namespace std; int main ( ) { ifstream invoer ("invoer.txt",ios::in); ofstream uitvoer ("uitvoer.txt",ios::out); char regel[80]; // maximaal 80 karakters ... char karakter; int aantal = 0; // aantal karakters in huidige regel karakter = invoer.get ( ); while ( ! invoer.eof ( ) ) { if ( karakter == '\n' ) { for ( i = aantal - 1; i >= 0; i-- ) uitvoer.put (regel[i]); uitvoer.put ('\n'); aantal = 0; } // if else { regel[aantal] = karakter; aantal++; } // else karakter = invoer.get ( ); } // while invoer.close ( ); uitvoer.close ( ); return 0; } // main Opgave 36 Te bewerkelijk. Opgave 37 const int n = 20; void vermenigvuldig (int A[ ][n], int v[ ], int res[ ]) { int i, j; for ( i = 0; i < n; i++ ) { res[i] = 0; for ( j = 0; j < n; j++ ) res[i] += A[i][j] * v[j]; } // for } // vermenigvuldig Opgave 38 a. enum stuk { leeg, zw_koning, wi_koning, zw_dame, wi_dame, zw_pion, wi_pion, zw_toren, wi_toren, zw_loper, wi_loper, zw_paard, wi_paard }; stuk bord[8][8]; Nu betekent bijvoorbeeld bord[7][2] == wi_loper dat er op C1 een witte loper staat; de interpretatie van de rijen en kolommen kan uiteraard ook anders zijn. NB Bij de beschrijving van een spel-situatie moet er ook bij: - wie is aan zet - kan er nog gerocheerd worden - kan er en-passant geslagen worden. - eigenlijk de hele voorgeschiedenis (50-zetten-regel en meer!) b. Verschillende mogelijkheden tot verbetering wat geheugen betreft (het wordt niet leesbaarder) zijn: Nummer de velden van 1..64 en de stukken van 0..31: char schaakbord[32]; Hierbij codeert schaakbord[3] de positie van het vierde stuk, waarbij bijvoorbeeld 0 aangeeft dat het stuk reeds geslagen is. NB Hier is geen rekening gehouden met de aanwezigheid van meer dan een dame door promotie. Met pointers kan per schaakstuk een lijst aangelegd worden (witte pionnen in een lijst, etcetera). c. Dambord: enum stuk { leeg, zw_steen, zw_dam, wi_steen, wi_dam }; stuk dambord[10][10]; // of [11][11] om nullen als index // te vermijden Verbetering: alleen de zwarte velden worden gebruikt, dus aantal velden beperken tot de helft, of de gewone damnotatie: stuk dambord[51]; // 0-de element ongebruikt Opgave 39 a. void wedstrijd (int A[ ], int max, int& eenna, int& grootste) { // zoek indices grootste en op een na grootste getal uit array A int i; // om A af te lopen if ( A[0] > A[1] ) { grootste = 0; eenna = 1; } // if else { grootste = 1; eenna = 0; } // else for ( i = 2; i < max; i++ ) if ( A[i] > A[grootste] ) { eenna = grootste; grootste = i; } // if else if ( A[i] > A[eenna] ) eenna = i; } // wedstrijd