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.

Slides:



Advertisements
Verwante presentaties
Inleiding programmeren in C++ Life Science & Technology 26 januari Universiteit Leiden.
Advertisements

Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden.
Inleiding programmeren in C++ Life Science & Technology 23 februari Universiteit Leiden.
EVMINX4 Week 3 Algoritmen en Datastructuren (ALDAT)
Inleiding programmeren in C++ Life Science & Technology 19 januari Universiteit Leiden.
PROS2 Les 11 Programmeren en Software Engineering 2.
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
C++ handboek : C++ Leen Ameraal 6e druk academic service.
Inleiding programmeren in C++ Life Science & Technology 2 februari Universiteit Leiden.
Inleiding programmeren in C++ Life Science & Technology 9 februari Universiteit Leiden.
Inleiding programmeren in C++ Life Science & Technology Inleiding
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 3 redirection,
Tircms03-p les 1 C++ voor C-kenners Voor Technische Informatica.
Trillingen en Cirkelbewegingen
4/10/2017 Opleiding BINNENISOLATIE voor thermische renovatie Module 3 Train the trainer – 06/12/ Brugge.
Isaac Newton Omdat een beetje extra bijscholing nooit kwaad kan 
Wageningen University Meteorologie en Luchtkwaliteit
Materialen en moleculen
Hoe deel je gesteenten in? Codering; Streckeisen
Havo 5: Stoffen en Materialen
Handboek Commercieel Budgetteren: toegepast J. Vanhaverbeke & L
Veevoeding Blok 3 en 4: Ruwvoerbalans melkveehouderij
Jeugd in het Strafrechtelijk kader Les 3, 2016 ‘Needs’
Natuurkunde Overal Hoofdstuk 1: Beweging in beeld.
Klaar met het PW? Lees aandachtig het samenvattingenblad hst 7
Greenbuilding project
Financiële situatie Volley
Door Marco Lassche, Joyce Mulder en Mare de Winter
VAN KEUKENBLAD TOT FRIKANDEL presentatie door Koen Ongkiehong
Energielening.
De missie, het hart en het broodtrommeltje
Context 4 Verlichtingsideeën en de democratische revoluties
Gaat u dan snel naar Goedkoop of in kleine oplagen kleding (laten) bedrukken, met een embleem, logo en/of tekst van uzelf, of.
STUUR DIT AAN EEN SLIMME VROUW... EN AAN ALLE MANNEN... DIE ER TEGEN KUNNEN !!! Na 5000 jaar moppen over vrouwen... uiteindelijk moppen over mannen.
Roundtable De Gefragmenteerde Organisatie
Welkom.
BASISVEILIGHEID (VCA)
Quel jour sommes-nous aujourd’hui ?
Hoofdstuk 6 Warmte.
Outdoor Advanced - Specialist Tuin en Openbaar Groen 3.1,
Jorismavo Examenvoorlichting
Inlichtingenbijeenkomst Simulatiecapaciteit ERTMS
Toolbox: ATEX ATmosphere - EXplosive
Groeiende kritiek op de katholieke Kerk rond 1500
Six hats: Werken met netwerken? Mijn gedacht
Omdenken Een kleine test….
Toevoeging H5 Elektriciteit
Hoofdstuk 3 In beweging.
Reisconferentie van zorg naar zelfregie
Klaar met de toets? Lees aandachtig het samenvattingenblad hst 6
Rd4-afvalconferentie november 2016
Nienke Hoffman Teamleider bovenbouw 28 maart 2017
Risico’s en de vertaling naar wettelijke uitgangspunten
Hst. 2 Het geslachtsapparaat
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Tinpro015b-les5 Invoer en Uitvoer.
Kun je vertellen wat de samenhang is tussen massa (m), Volume (V) en
Jan Depauw Onderzoeker/Lector KdG
1. vergelijkingen 1.1 Rekenen met letters.
Pesten en wetgeving.
Sportmanifest “Een leven lang bewegen in Noord-Holland”
Agenda aanstaande week 1/2
Update [STICHTING + PROJECTNAAM]
Molariteit Molariteit concentratie van stof X [X] = Eenheid molair M
Speciale groep bij familie: KOPP / KOV
Nieuwigheden vanaf schooljaar
Louis van Gaal, Leo Beenhakker en Frank Rijkaard staan voor de troon van God. God kijkt ze aan en zegt: "Voordat jullie de hemel in mogen of een plaats.
Persoonlijk leiderschap Veiligheid Je eigen ruimte gebruiken
Organogram van de gemeente Enschede
Transcript van de presentatie:

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 Universiteit Leiden

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

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

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;

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 ( );

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!

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

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

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

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

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

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

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

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

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 .

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

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

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 ) = ( 19 22 ) // ( 3 4 ) ( 7 8 ) ( 43 50 ) return 0; } // main

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”: =

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

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

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