Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdHendrik Bakker Laatst gewijzigd meer dan 10 jaar geleden
1
Inleiding programmeren in C++ Life Science & Technology 9 februari 2004 http://www.liacs.nl/home/kosters/lst Universiteit Leiden
2
Week 4 Inhoud –Functies (vervolg) en arrays Doel –Leren omgaan met functies en arrays in C++ Materiaal –Ammeraal Hoofdstuk 5.1 –Dictaat Hoofdstuk 3.6 en opgaven 29/35 –De tweede programmeeropgave Werkcollege –Fabriceer een menu-programma; opties: eerst alleen een cout- statement, daarna Opgave 20 a en b, en dan de “elf-proef” (zie hints bij tweede programmeeropgave)
3
Lessen uit de eerste programmeeropgave Infoblokje –meldt “overal” duidelijk namen van de auteurs –stel duidelijke vragen Layout –consequent –inspringen binnen functies, if, for en while Diversen –constantes: jaar - 150 in plaats van 1854 –gebruik else –ontwerp if-statements (eerst if ( maand < 1 ) …)
4
Opgave 9 zonder functies #include using namespace std; int main ( ) { int n; // in te lezen getal int res; // voor het resultaat: n! 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
5
Opgave 9 functie met while #include using namespace std; int faculteit1 (int getal) { int res = 1;// "lege product" while ( getal > 0 ) { res = res * getal; getal--; } // while return res; } // faculteit1 int main ( ) { int n;// in te lezen getal cin >> n;// eigenlijk eerst testen of niet n < 0 cout << faculteit1 (n) << endl; return 0; } // main aanroep int functie
6
Opgave 9 functie met for #include using namespace std; int faculteit2 (int getal) { int res; // for-loop met rare initialisatie: for ( res = 1; getal > 0; getal-- ) { res = res * getal; } // for return res; } // faculteit2 int main ( ) { int n;// in te lezen getal cin >> n; if ( n < 0 ) return 1; cout << faculteit2 (n) << endl; return 0; } // main
7
Opgave 9 functie met for: variant #include using namespace std; int faculteit3 (int getal) { int res = 1; int i; for ( i = 1; i <= getal; i++ ) { res = res * i; } // for return res; } // faculteit3 int main ( ) { int n;// in te lezen getal cin >> n; if ( n < 0 ) return 1; cout << faculteit3 (n) << endl; return 0; } // main
8
Opgave 8 void wissel (int & x, int & y) { int temp; // en NIET: x = y; y = x; !!! temp = x; x = y; y = temp; } // wissel int main ( ) { int a, b, c; // drie getallen... if ( a > b ) wissel (a,b); if ( b > c ) wissel (b,c); if ( a > b ) wissel (a,b);... nu geldt a <= b <= c... } // main aanroep void functie
9
Opgave 8 void wissel (int & x, int & y) { int temp; temp = x; x = y; y = temp; } // wissel void sorteer (int & eerste, int & tweede, int & derde) { if ( eerste > tweede ) wissel (eerste, tweede); if ( tweede > derde ) wissel (tweede, derde); if ( eerste > tweede ) wissel (eerste, tweede); } // sorteer
10
Opgave 10 // zet aantal spaties op beeldscherm void spaties (int aantal) { int i; for ( i = 0; i < aantal; i++ ) cout << ” ”; } // spaties // zet aantal kar’s op beeldscherm void kars (int aantal, char kar) { int i; for ( i = 0; i < aantal; i++ ) cout << kar; } // kars
11
Opgave 11 void verwerkgetallenrij ( ) { int kleinste, grootste = 0, aantal = 0, som = 0, getal; cout << ”Getal?..”; cin >> getal; while ( getal > 0 ) { aantal++; som += getal; if ( getal > grootste ) grootste = getal; if ( aantal == 1 || getal < kleinste ) kleinste = getal; cout << ”Getal?..”; cin >> getal; } // while if ( aantal > 0 ) cout << ”Kleinste: ” << kleinste << ”Grootste: ” << grootste << ”Gemiddelde: ” << (double) som /aantal; } // verwerkgetallenrij
12
Inleiding array’s Een array is een rij “objecten” (bijvoorbeeld een rij getallen, karakters of strings) Deze rij wordt aangeduid met één variabele-naam Elk element in de rij wordt aangeduid met een volgnummer (de index), te beginnen bij 0 int a[100]; // declaratie van een rij van 100 integers a[0] = 2; // te gebruiken zijn: a[0], a[1],..., a[99] a[27] = 7; a[99] = a[27] + 16; // a[100] = 3; levert narigheid! a[-1] = 5; ook
13
Inleiding array’s (2) Zo worden MAX integers gedeclareerd –A[0], A[1],..., A[MAX-1] Denk om de arraygrenzen const int MAX = 10; // mag geen variabele zijn! int A[MAX]; // dus NIET: int n; cin >> n; int A[n]; for ( int i = 0; i < MAX; i++ ) A[i] = 5 * i; for ( int j = 0; j < MAX-1; j++ ) A[j] = A[j+1];
14
Initialiseren van array’s Initialiseren kan alleen gelijktijdig met de declaratie Een string als array van char is een oude C-stijl-string –0-byte markeert het einde van de string –vaste, maximale lengte In C++ is het type string beschikbaar (in ) –lengte is variabel –toekenning gehele string wel altijd mogelijk double B[5] = {42, -3.14, 1e6, 0, 37}; char str[10] = "feestje";// str[7] wordt '\0'
15
Array’s en adressering A (dus zonder index) is eigenlijk het adres van het eerste (nulde) element in het array: “waar staat het array?” De index geeft aan hoeveel keer de lengte van het element (in dit geval de lengte van een int ) bij dit adres moet worden opgeteld, om bij het array-element te komen Niet doen! Het adres wordt gekopieerd … int A[50]; int A[3]; int B[3] = {4, 6, 13};... A = B;// ???? A B 4, 6, 13
16
Array’s en functies const int MAX=100; void drukAf (int rij[MAX]) { for (int i = 0; i < MAX; i++) { cout << rij[i]; } // for } // drukAf void drukGetalAf (int getal) { cout << getal << endl; } // drukGetalAf int main ( ) { int getallen[MAX];... drukAf (getallen); drukGetalAf (getallen[17]); return 0; } // main beginadres van het array beginadres van het array wordt by value doorgegeven (op te vatten als het gehele array) één array-element
17
Array’s en functies (2) int minimum (const int rij[ ], int lengte) { int klein = rij[0]; for ( int i = 1; i < lengte; i++ ) { if ( rij[i] < klein ) klein = rij[i]; } // for return klein; } // minimum int main ( ) { int getallen[MAX];... cout << "Laagste getal: " << minimum (getallen, MAX);... return 0; } // main inhoud van de array niet wijzigbaar lengte is variabelmaar lengte moet wel bekend zijn
18
Meerdimensionale array’s Een array is een rij Een meerdimensionaal array is een tabel of matrix Het is een array van array’s // declaratie van een meerdimensionaal array int tabel[10][20]; // 10 rijen, 20 kolommen int kubus[20][10][30]; // gebruik van de elementen tabel[7][12] = 27; kubus[13][6][22] = 167; Denk om de array-grenzen! tabel[0][0]... tabel[9][19] kubus[0][0][0]... kubus[19][9][29]
19
Voorbeeld van een 2-dimensionaal array int A[2][3]; A[0][0] = 5; A[0][1] = 7; A[0][2] = -6; A[1][0] = 78; A[1][1] = -2; A[1][2] = 0; geeft: 5 7 -6 78 -2 0 rij 1 kolom 2 Let op: ook al bestaat A[3][5] niet, met A[3][5] = 11; wijzig je iets op de 15-de (3 maal 5) geheugenplek vanaf “het begin”.
20
Meerdimensionale array’s (2) const int RIJ = 10, KOLOM = 10; void drukaf (const int mx[RIJ][KOLOM]) { for ( int i = 0; i < RIJ; i++ ) { for ( int j = 0; j < KOLOM; j++ ) { cout << mx[i][j] << ' '; } // for-j cout << endl; } // for-i } // drukaf void vul (int mx[RIJ][KOLOM]) { for ( int i = 0; i < RIJ; i++) { for (int j = 0; j < KOLOM; j++) { mx[i][j] = i+j; } // for-j } // for-i } // vul int main ( ) { int matrix[RIJ][KOLOM]; vul (matrix); drukaf (matrix); return 0; } // main array-elementen niet wijzigbaar dimensies eenmalig definieren array-elementen wijzigbaar
21
Variabel aantal rijen int somarray (const int mx[ ][KOLOM], int rijen) { int som = 0; for ( int i = 0; i < rijen; i++ ) { for ( int j = 0; j < KOLOM; j++ ) { som += mx[i][j]; } // for-j } // for-i return som; } // somarray int main ( ) { int kleinematrix[20][KOLOM]; int grotematrix[100][KOLOM]... cout << somarray (kleinematrix, 20) << endl; cout << somarray (grotematrix, 100) << endl; return 0; } // main variabel aantal rijen, aantal kolommen moet bekend zijn hier mag ook 10 staan, of 15
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.