De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

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

Verwante presentaties


Presentatie over: "Http://www.liacs.nl/home/kosters/lst Universiteit Leiden Inleiding programmeren in C++ Life Science & Technology 16 februari 2004 http://www.liacs.nl/home/kosters/lst."— Transcript van de presentatie:

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

2 Week 5 Inhoud Doel Materiaal Werkcollege
Files, arrays en strings (vervolg) Doel Leren omgaan met files, arrays en strings in C++ Materiaal Ammeraal Hoofdstuk 5.1 Dictaat Hoofdstuk 3.6 en opgaven 36/41 De tweede programmeeropgave Werkcollege Bepaal grootste en op-een-na-grootste waarde uit een random gevuld array; en hoe vaak komt een zeker getal daarin voor? Werken aan de tweede programmeeropgave: Mastermind

3 Nog over van vorige keren:
Files (uit derde college) Arrays (uit vierde college)

4 Introductie files eerst nog even cin en cout
cin is van het type istream (inputstream) cout is van het type ostream (outputstream) Samen met de bijbehorende operatoren << en >> gedefinieerd in <iostream> Schrijven naar en lezen uit een file is te vergelijken met schrijven naar cout (het beeldscherm) en lezen van cin (toetsenbord) #include <iostream> using namespace std; ... char kar; cout << ”Tekst schrijven naar beeldscherm”; cin >> kar;

5 Files Een inputfile is van het type ifstream
Een outputfile is van het type ofstream Samen met de bijbehorende operatoren << en >> gedefinieerd in <fstream> #include <fstream> using namespace std; ... ifstream invoer; ofstream uitvoer; char kar; invoer.open ("oudbestand.txt"); uitvoer.open ("nieuwbestand.txt"); invoer >> kar; uitvoer << kar; invoer.close ( ); uitvoer.close ( );

6 Functies voor lezen en schrijven
Voorbeeld met cin en cout ifstream invoer; ofstream uitvoer; Karakter char kar; cin.get (kar); kar = cin.get ( ); cout.put (kar); invoer.get (kar); kar = invoer.get ( ); uitvoer.put (kar); Woord string str; cin >> str; cout << str; invoer >> str; uitvoer << str; Regel getline (cin, str); getline(cin, str, ’\n’); cout << str << endl; getline (invoer, str); getline(invoer, str,’\n’) uitvoer << str << endl; cin >> ... slaat spaties en dergelijke over, .get niet!

7 Openen gelukt? Einde van de file bereikt?
File bestaat niet, of kan niet worden geopend Einde van de file bereikt? invoer.eof ( ) kan alleen worden gebruikt nadat er gelezen is! invoer.open ("oudbestand.txt"); if ( ! invoer ) { cout << "Invoerbestand kan niet worden geopend" << endl; return 1; } // if invoer.get (kar); while ( ! invoer.eof ( ) ) { cout.put (kar); } // while

8 Voorbeeld: file kopiëren
#include <iostream> #include <fstream> using namespace std; int main ( ) { ifstream invoer; ofstream uitvoer; char kar; invoer.open ("oudbestand.txt"); if ( ! invoer ) { cout << "Probleem!" << endl; return 1; } // if uitvoer.open ("nieuwbestand.txt"); kar = invoer.get ( ); while ( ! invoer.eof ( ) ) { uitvoer.put (kar); } // while invoer.close ( ); uitvoer.close ( ); return 0; } // main

9 De “oude” C-stijl-string: een echt array van char’s
woord [ ] = ”apekool” mag, maar langere woorden passen dan niet const int MAXWOORD=50; int main ( ) { char woord[MAXWOORD] = "apekool"; // dit mag wel int lengte = 0; woord = "apekool"; // maar dit mag NIET !!! cin >> woord; // hopen dat het past ... while ( woord[lengte] != ’\0’ ) lengte++; cout << ”Lengte is: ” << lengte << endl; ...

10 De C++-string: speciaal type met vele voordelen
#include <string> ... int main ( ) { string woord = "apekool"; woord = "Oosterscheldedam"; // dit mag nu wel, // lengte wordt automatisch opgerekt cout << "Geef een woord: "; // en dit gaat ook meestal goed cin >> woord; cout << ”lengte is ” << woord.length ( ) << endl; // ETCETERA

11 C-stijl-strings of C++-strings en files
int main ( ) { string woord = "apekool"; // liever deze char filenaam[MAXWOORD]; // desnoods deze ifstream invoer; ofstream uitvoer; cout << ”Naam invoerfile alstublieft .. ”; cin >> filenaam; invoer.open (filenaam); if ( ! invoer ) { cout << "Invoerbestand kan niet worden geopend" << endl; return 1; // stoppen met foutief resultaat } // if invoer >> woord; if ( invoer.eof ( ) ) { cout << "Invoerbestand bevat geen woord" << endl; ...

12 Vervolg strings en files
... uitvoer.open ("nieuwbestand.txt"); uitvoer << woord << endl << letter; invoer.close ( ); uitvoer.close ( ); return 0; } // main

13 Een nette functie maken
Hoe maak je een nette functie voor het zoeken van een letter in een woord? kies juiste parameters en returnwaarde geen gemeenschappelijke globale variabelen Hoe gebruik je die functie? stel je wilt zoeken in het zoveelste woord in een serie

14 Functie zoekletter int zoekletter (string zoekwoord, char zoekletter) { int plek = 0; while ( plek < zoekwoord.length ( ) && zoekwoord[plek] != zoekletter ) plek++; if ( plek < zoekwoord.length ( ) ) return plek; else return -1; } // zoekletter string woord[AANTAL]; // een array met AANTAL strings erin gevondenplek = zoekletter(woord[5], letter); // in 5e (6e?) woord zoeken

15 Random getallen We willen een functie maken die willekeurige (random)
getallen tussen 0 en 999, grenzen inbegrepen, oplevert: int randomgetal ( ) { static int getal = 42; getal = ( 221 * getal + 1 ) % 1000; return getal; } // randomgetal Nu geeft x = 1 + randomgetal ( ) / 167; een “dobbelsteenwaarde” uit {1,2,3,4,5,6} in de variabele x .

16 Toepassingen van arrays
Matrix-vermenigvuldiging: = = Driehoek van Pascal:

17 Matrix-vermenigvuldiging (1)
#include <iostream> using namespace std; const int MAX = 2; void vermenigvuldig (const double A[ ][MAX], const double B[ ][MAX], double C[ ][MAX]) { int i, j, k; for ( i = 0; i < MAX; i++ ) { for ( j = 0; j < MAX; j++ ) { C[i][j] = 0; for ( k = 0; k < MAX; k++ ) { C[i][j] += A[i][k] * B[k][j]; } // for-k } // for-j } // for-i } // vermenigvuldig

18 Matrix-vermenigvuldiging (2)
int main ( ) { double a[MAX][MAX] = { {1, 2}, {3, 4} }; double b[MAX][MAX] = { {5, 6}, {7, 8} }; double c[MAX][MAX]; vermenigvuldig (a, b, c); for ( int i = 0; i < MAX; i++ ) { for ( int j = 0; j < MAX; j++ ) { cout << c[i][j] << ' '; } // for-j cout << endl; } // for-i // ( 1 2 ) ( 5 6 ) = ( ) // ( 3 4 ) ( 7 8 ) ( ) return 0; } // main

19 Driehoek van Pascal (1) Berekenen van “binomiaalcoëfficiënten” =
(a+b)0 = 1 (a+b)1 = a + b (a+b)2 = a2 + 2ab + b2 (a+b)3 = a3 + 3a2b + 3ab2 + b3 (a+b)4 = a4 + 4a3b + 6a2b2 + 4ab3+ b4 coëfficienten 1, 4, 6, 4, 1 etcetera worden binomiaalcoëfficiënten genoemd te berekenen: = n! / k! (n-k)! het “Binomium van Newton”: =

20 Driehoek van Pascal (2) Vierkante (n bij n) matrix
Elk getal in de “driehoek” is de som van de twee getallen er links en midden boven const int n = 10; int matrix[n][n]; i \ j 1 2 3 4 6

21 Driehoek van Pascal – versie 1
const int n = 10; int main ( ) { int i,j; // i voor rijen, j voor kolommen int driehoek[n][n]; for ( i = 0; i < n; i++ ) driehoek[i][0] = 1; driehoek[0][1] = 0; for ( i = 1; i < n; i++ ) { cout << endl << driehoek[i][0] << ” ”; for ( j = 1; j <= i; j++ ) { driehoek[i][j] = driehoek[i-1][j-1] + driehoek[i-1][j]; cout << driehoek[i][j] << ” ”; } // for-j if ( i != n-1 ) driehoek[i][i+1] = 0; } // for-i cout << endl; return 0; } // main

22 Driehoek van Pascal – versie 2
const int n = 10; int main ( ) { int rij[n]; // nu met 1-dimensionaal array int i,j; rij[0] = 1; for ( j = 1; j < n; j++ ) rij[j] = 0; for ( i = 1; i < n; i++ ) { // rij i for ( j = i; j > 0; j-- ) { // kolom j rij[j] = rij[j-1] + rij[j]; cout << rij[j] << ” ”; } // for-j cout << rij[0] << endl; // een 1 erachter } // for-i return 0; } // main


Download ppt "Http://www.liacs.nl/home/kosters/lst Universiteit Leiden Inleiding programmeren in C++ Life Science & Technology 16 februari 2004 http://www.liacs.nl/home/kosters/lst."

Verwante presentaties


Ads door Google