1 / 21

Inleiding programmeren in C++ Life Science & Technology 9 februari 2004

Inleiding programmeren in C++ Life Science & Technology 9 februari 2004. http://www.liacs.nl/home/kosters/lst Universiteit Leiden. Week 4. Inhoud Functies (vervolg) en arrays Doel Leren omgaan met functies en arrays in C++ Materiaal Ammeraal Hoofdstuk 5.1

allene
Download Presentation

Inleiding programmeren in C++ Life Science & Technology 9 februari 2004

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Inleiding programmeren in C++Life Science & Technology9 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 9zonder functies #include <iostream> 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 9functie met while #include <iostream> 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 9functie met for #include <iostream> 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 9functie met for: variant #include <iostream> 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) const int MAX = 10; // mag geen variabele zijn! int A[MAX]; // dus NIET: int n; cin >> n; int A[n]; • Zo worden MAX integers gedeclareerd • A[0], A[1], ... , A[MAX-1] • Denk om de arraygrenzen 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 <string>) • 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 int A[50]; • 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 … A int A[3]; int B[3] = {4, 6, 13}; ... A = B; // ???? 4, 6, 13 B

  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 wordt by value doorgegeven (op te vatten als het gehele array) beginadres van het array één array-element

  17. Array’s en functies (2) inhoud van de array niet wijzigbaar lengte is variabel maar lengte moet wel bekend zijn 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

  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) dimensies eenmalig definieren 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 array-elementen niet wijzigbaar array-elementen wijzigbaar int main ( ) { int matrix[RIJ][KOLOM]; vul (matrix); drukaf (matrix); return 0; } // main

  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

More Related