Uitwerkingen opgaven Programmeermethoden, najaar 2020 - opgaven 6/9 Opgave 6 a. do S while ( E ) kan herschreven worden als S; while ( E ) S b. while ( E ) S kan herschreven worden als if ( E ) { do S while ( E ) ; } Het kan niet zonder if, aangezien een while ( E ) S S soms nooit uitvoert (namelijk wanneer E initieel al false is), terwijl bij een do S while ( E ) de statements S minstens een maal uitgevoerd worden. Opgave 7 if ( a < b ) { // a < b if ( c < d ) { // a < b; c < d x = 1; } // if ( c < d ) else { // a < b; c >= d if ( a < c ) { // a < b; c >= d; a < c if ( b < d ) { // a < b; c >= d; a < c; b < d, // oftewel a < b < d; a < c; c >= d x = 2; } // if ( b < d ) else { // a < b; c >= d; a < c; b >= d x = 3; } // else }// if ( a < c ) else { // a < b; c >= d; a >= c, // oftewel a < b; a >= c >= d if ( a < d ) { // a < b; a >= c >= d; a < d; tegenstrijdig! if ( b < c ) { // x = 4; // Dit hele } // if ( b < c ) // else { // gedeelte kan x = 5; // } // else // dus weg! } // if ( a < d ) // else { // a < b; a >= c >= d; a >= d. // oftewel a < b; a >= c >= d x = 6; } // else } // else } // else } // if ( a < b ) else { // a >= b x = 7; } // else Duidelijk is dat x = 4 en x = 5 nooit worden uitgevoerd. Het aangegeven gedeelte (if ( a < d ) tot x = 6) kan weggelaten worden. Opgave 8 int main ( ) { int a, b, c; // drie getallen cout << "Geef het eerste getal "; cin >> a; cout << "En het tweede "; cin >> b; cout << "En het derde "; cin >> c; if ( ( a <= b ) && ( b <= c ) ) // zeer botte oplossing cout << a << b << c << endl; else if ( ( a <= b ) && ( c <= a ) ) cout << c << a << b << endl; else ... etcetera ... (nog drie if-statements / vier cout's) return 0; } // main Fraaier is gebruik te maken van de functie wissel (zie dictaat); we krijgen dan -in plaats het grote if-statement-: if ( a > b ) wissel (a,b); if ( b > c ) wissel (b,c); if ( a > b ) wissel (a,b); In plaats de functie-aanroep mag ook (met hulpvariabele int hulp): if ( a < b ) { hulp = a; a = b; b = hulp; } // if Opgave 9 a. int main ( ) { int n, res; cin >> n; // eigenlijk eerst testen of niet n < 0 res = 1; // "lege product" while ( n > 0 ) { res = res * n; n--; } // while cout << res << endl; return 0; } // main b. int main ( ) { // Een for-loop ligt het meest voor de hand: int n, res; // van te voren is het aantal herhalingen cin >> n; // (iteraties) eenvoudig te bepalen. res = 1; // Maar het is wellicht een kwestie van smaak ... for(/* lege init */; n > 0; n--) res *= n; // oftewel res = res * n; cout << res << endl; return 0; } // main Let erop dat n hier veranderd is; er kan ook een hulpvariabele i worden gebruikt (op n initialiseren); je kunt deze i ook omhoog laten lopen. c. int main ( ) { int n, res = 1; cin >> n; if ( n > 0 ) { // n mag ook 0 zijn; zonder de if gaat het dan mis do { res *= n; n--; } while ( n > 0 ); } // if cout << res << endl; return 0; } // main Met een functie wordt het zoiets als int faculteit (int n) { ... als boven ... return res; } // faculteit