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

21
Inleiding programmeren in C++ Life Science & Technology 9 februari 2004 http:// www.liacs.nl/home/kosters/lst Universiteit Leiden

description

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 - PowerPoint PPT Presentation

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

Page 1: 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

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

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)

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

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 ) …)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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];

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

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'

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

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

B4, 6, 13

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

Array’s en functiesconst 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

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

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 wijzigbaarlengte is variabel maar lengte moet

wel bekend zijn

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

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]

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

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”.

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

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

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

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