C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10...

25
C `` ifPCwhileLinuxdiffintFirefoxboolpublicprivateWindows fileg `` UNIXVisualOSFedoralscharpsopenclosegetputarray XPcpelmmuttelsecoutmainRedHatmkdireditorenumDebian classusingmathUnitytruecpSUSEnamespacestructinclude doublecdGNUdokillobjectcompilermorelinkiostreamcinnotlpr WWWmakefilegrepiomanipgeditfloatGNOMEfstreamrmfalse andorCode::Blockstopforstringe-mailmanchmodKDEUbuntu 1

Transcript of C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10...

Page 1: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

C``ifPCwhileLinuxdiffintFirefoxboolpublicprivateWindows

fileg``UNIXVisualOSFedoralscharpsopenclosegetputarray

XPcpelmmuttelsecoutmainRedHatmkdireditorenumDebian

classusingmathUnitytruecpSUSEnamespacestructinclude

doublecdGNUdokillobjectcompilermorelinkiostreamcinnotlpr

WWWmakefilegrepiomanipgeditfloatGNOMEfstreamrmfalse

andorCode::Blockstopforstringe-mailmanchmodKDEUbuntu

1

Page 2: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Programmeermethoden

Introductie

Walter Kosters

week 1: 2–6 september 2019

www.liacs.leidenuniv.nl/~kosterswa/pm/

2

Page 3: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Docenten

Het college wordt gegeven door dr. W.A. (Walter) Kosters.

Het werkcollege wordt verzorgd door studentassistenten:Wilco de Boer, Julia Bolt, Philippe Bors, Xander Lenstra,David Nieuwenhuizen, Jerry Schonenberg, Levi Vos, Tho-mas Wink, onder leiding van Gerrit-Jan de Bruin en Die-derick Vermetten.

Felienne Hermans geeft PM-Python voor Bioinformaticaen Informatica & Economie; Mike Preuss geeft PM-Pythonvoor Natuur/Sterrenkunde, en voor WN-ers een Python-workshop in januari 2020.

3

Page 4: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie (Werk)Colleges

De colleges zijn op donderdagen, 11:15–13:00 uur. Eerstekeer: 5–9–2019; laatste keer: 12–12. Op 3–10 en 24–10is er geen college.Plaats: Gorlaeus, zaal 3.

De werkcolleges zijn op donderdagen voor Informatici, enop maandagen voor Wiskundigen; ˘13:45(!)–16:00 uur.Op 3–10 en 21/24–10 is er geen werkcollege.Plaats: computerzalen 302/304, 303, 306/308, 307 en 309(PCs, Linux en Windows) van het gebouw van Wiskundeen Informatica: het Snellius. Twee mensen per computer,graag. Er is een aanwezigheidscontrole!

4

Page 5: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Gebouwen Leiden

Snellius

Gorlaeus

5

Page 6: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Account

Iedereen gebruikt zijn/haar ULCN-account. Zet een “for-ward” voor e-mails!

Hoe kom je vanaf huis bij je files? Antwoord: “ssh-en” en“scp-en” naar

[email protected]

als je a.einstein bent. En dan naar homedir.

Sluw: USB, eigen e-mail, de cloud, . . .

6

Page 7: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Tentamen

Het schriftelijk tentamen is op

‚ maandag 6 januari 2020, 9:30–12:30 uurlocatie: Gorlaeus 4/5

‚ hertentamen:donderdag 26 maart 2020, 14:00–17:00 uurlocatie: Snellius

Zie de website voor oude tentamens en uitwerkingen.

Tijdig aanmelden via uSis! En Blackboard . . .

7

Page 8: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Practicum

Er moeten vier programmeeropgaven gemaakt worden. Alsdeze alle voldoende zijn (hooguit één vijf) en het tentamenvoldoende (ě 5.5) is gemaakt, krijg je zes studiepunten:

Eindcijfer “2ˆ Schriftelijk` Op1 `Op2 `Op3 `Op4

4

3

(afgerond naar het dichtstbijzijnde element uit de verza-meling t1,2,3,4,5, 6,6.5,7,7.5,8,8.5,9,9.5,10u).

Heb je nog deelresultaten uit voorgaande jaren? Ga langsbij de docent!

Cijfers: Blackboard (meld je aan = “enroll”).

8

Page 9: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Programmeerwerk

‚ in tweetallen maken

‚ wel overleggen en om hulp vragen, niet kopiëren;zie website voor huisregels en richtlijnen, bijvoorbeeldvoor aanvullen, . . .

‚ op tijd inleveren: deadlines (´1 per week te laat)

‚ deels maken tijdens werkcolleges, deels thuis

‚ spreek/vragenuur: donderdagen en maandagen na dewerkcolleges, in computerzalen 307, 309, . . .

9

Page 10: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Deadlines

‚ Opgave 1: maandag 23 september 2019, 17:00 uur

‚ Opgave 2: maandag 14 oktober 2019, 17:00 uur

‚ Opgave 3: maandag 11 november 2019, 17:00 uur

‚ Opgave 4: maandag 9 december 2019, 17:00 uur

In te leveren: geprinte versie met verslag (doos bij kamer159, Snellius) en digitaal alleen een fatsoenlijke e-mail metde C``-code sturen naar:

[email protected]

10

Page 11: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Programma 2019 — Eerste helft

week onderwerp boek “dictaat”2–6 sep Introductie: UNIX, 1 1,2

C``, machines9–13 sep Types 3.1/3,3.9,

op1/518–22 sep Controlestructuren 2 3.4/5,op6/1023–27 sep Functies, 3,4, 3.6/7,op11/17

files 12.1/230 sep–4 okt Ñ geen college Ð7–11 okt OOP, Life 6,7.1 3.11,op18/2514–18 okt Arrays 5 3.8,op26/30. . .

op = “papieren” opgaven van website (“Handouts”); zelfmaken, antwoorden: zie website.In rood: de weken met een deadline op de maandag erna.

11

Page 12: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Boek en “dictaat”

We maken gebruik van het volgende boek:

W. SavitchAbsolute C``

sixth editionAddison-Wesley, 2016

Oudere drukken zijn ook goed (ouderejaars!). En er zijnvele andere boeken.

En het “dictaat” (hier) en de sheets . . .12

Page 13: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Operating systemen

Naast Microsoft Windows kunnen PCs ook draaien onderLinux, een operating systeem (OS) uit de UNIX-wereld(vergelijk Android).

Met een Ubuntu Live-CD/DVD/USBstart je PC meteen op in GNOME,een grafische windows-omgevingbovenop Linux.Of gebruik KDE of Unity.Beter: dual boot.Let er op dat je op een verstandigeplaats (USB/e-mail) moet saven.

Je kunt ook “gratis” distributies als SUSE, Fedora, Debian,. . . gebruiken — maar dan moet je er meer vanaf weten.

13

Page 14: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Ubuntu

14

Page 15: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Software

Als je thuis gratis C`` wilt doen, zijn de mogelijkheden:

‚ Windows: haal Code::Blocks van www.codeblocks.org(file: codeblocks-17.12mingw-setup.exe)Zet “warnings” aan!En tabs?En firewall?

‚ . . . Mac . . .

‚ Linux: haal Ubuntu van www.ubuntu.orghuidige versie: 19.04 (in computerzalen: 16.04);gebruik gedit en g++

15

Page 16: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Compileren etc.

Een werkend C``-programma maken gaat als volgt:

1. Tik in een editor C``-code, het “bron-programma”.

2. Compileer (en link) dit met een compiler. Deze vertaaltC``-code naar machinetaal.Eventuele fouten: “compile-time-fouten” / “syntax-errors”: “inklude” in plaats van “include”.

3. Draai (= run) deze executable vanuit het OS.Eventuele fouten: “run-time-fouten”: deel door 0.

Herhaal deze cyclus zo vaak als nodig.Soms (Code::Blocks) is een en ander geintegreerd in eenGraphical User Interface (GUI).

(Er zijn ook nog logische fouten.)16

Page 17: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Hello world

Een eerste C``-programma:

#include <iostream>using namespace std;int main ( ) {

cout << "Dit komt op het scherm." << endl;return 0;

}//main

Dit programma zet alleen een tekstje op het beeldscherm.

Let op de — vooral voor mensen nuttige — layout.En op hoofdletters en kleine letters.

17

Page 18: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Een tweede programma

Een tweede C``-programma (met syntax-highlighting):

1 // d i t is e e n s i m p e l p r o g r a m m a

2 #inc lude <ios t r eam>

3 us ing namespace s t d ;

4 i n t m a i n ( ) {

5 i n t g e t a l = 42 ; // e e n v a r i a b e l e d e c l a r e r e n

6 // en i n i t i a l i s e r e n

7 c o u t << "Geef een g e h e e l g e t a l . . " << e n d l ;

8 c i n >> g e t a l ;

9 c o u t << "Kwadraat i s : "

10 << g e t a l ∗ g e t a l << e n d l ;

11 re turn 0 ;

12 } // m a i n

18

Page 19: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Eerste programmeeropgave

Programmeermethoden 2019Eerste programmeeropgave: ProductDe eerste programmeeropgave van het vak Programmeermethoden in het najaar van 2019 heet Product; zieook het eerste, tweede en derde werkcollege. Spreek/Vragenuur in zalen 302 ... 309: Aansluitend op de werkcolleges van maandag en donderdag, in decomputerzalen.

Deze opgave probeert te bepalen of iemand geschikt is voor een studie aan de universiteit: er is immers geenloting. Daartoe moeten enkele vragen beantwoord worden; zo moet de kandidaat weten op welke dag hij/zijgeboren is. En als je denkt dat 123 maal 456 gelijk is aan 123456, is een beta-studie misschien niet verstandig.

Om te beginnen moet de gebruiker zijn/haar geboortejaar als geheel getal invoeren, en daarna degeboortemaand, ook als geheel getal. Vervolgens voert hij/zij de geboortedag in, wederom als geheel getal.Het programma berekent dan de leeftijd van de gebruiker, zowel in aantal jaren als in maanden (bijvoorbeeld:10 jaar en 3 maanden; 123 maanden); beide worden op het beeldscherm getoond. De leeftijd in maandenwordt analoog aan die in jaren bepaald (als je op de 31ste geboren bent, wordt je iedere maand een maandouder, maar je bent niet zo vaak "maandig" — dat ben je namelijk alleen op iedere 31ste). Jarige en maandigegebruikers worden gefeliciteerd. Aangenomen mag worden dat het programma op de peildatum 23 september2019 draait (gebruik const; liefhebbers mogen met ctime de echte huidige dag opvragen en gebruiken). Letop: het programma moet in principe ook op andere peildata vanaf heden tot 2100 correct werken! Gebruikers jonger dan 10 jaar (de 10-de verjaardag nog niet gevierd) of ouder dan 100 jaar (dus 101-steverjaardag reeds gevierd) worden meteen geweigerd. Als uit het geboortejaar direct al duidelijk is dat het metde leeftijd niets gaat worden, hoeven de vragen naar maand en/of dag niet gesteld te worden. Maar soms biedtpas de dag uitsluitsel! Nu moet de gebruiker zijn/haar geboortedag (zondag, maandag, ..., zaterdag) weten. Als deze fout is, wordtmen meteen "verwijderd", en stopt het programma. Het antwoord moet met één letter (de eerste letter van dedag; geen cijfer dus) worden gegeven, bijvoorbeeld w voor woensdag. In het geval van d/z wordt nog om detweede letter gevraagd. Het is niet de bedoeling ctime te gebruiken om deze dag uit te rekenen. Het programma moet een zelfbedachte berekening bevatten om deze dag te bepalen! Gebruik bijvoorbeeld dat 1 januari 1901 op eendinsdag viel. Gebruik niet het Doomsday algoritme (zie ook hier), en ook niet allerlei ingewikkelde formules.Voor de periode 1901–2099 geldt dat een jaar een schrikkeljaar is precies dan als het jaartal door 4 deelbaar is.

De echte test bestaat uit enkele vragen. Mensen van 30 jaar of ouder worden hierbij twee maal "netter"aangesproken dan jongeren. Splits de C++-code in het programma niet onnodig vaak! Er wordt gekeken of de aanstaande student enigszins kan vermenigvuldigen. Wiskundig inzicht is namelijkvereist voor een beta-studie. Mocht dat niet zo zijn, wordt er getest hoe het met de kunst- of literatuurkennisstaat. De gebruiker moet het product van twee willekeurige gegeven positieve gehele getallen schatten. Het productmag niet groter zijn dan INT_MAX; zorg er dus voor dat het tweede getal niet te groot is, afhankelijk van heteerste. Laat het eerste getal maximaal (zeg) 10000 zijn. Als het product 0 is (zorg ervoor dat dit in circa 10% van de gevallen gebeurt), moet de gebruiker ook 0zeggen. Anders mag de verhouding tussen het gegeven en het juiste antwoord hoogstens EPSILON (eenzekere waarde, een double, bijvoorbeeld 0.1) van 1 verschillen. Voor het fabriceren van willekeurige gehele getallen moet gebruik worden gemaakt van de random-generatoruit C++. Gebruik bijvoorbeeld x = rand ( ) % 20; om een "willekeurig" getal tussen 0 en 19 (grenzeninbegrepen) in de int variabele x te krijgen. Zet bovenaan in main: srand (42); of srand (jaar); (nadat jaareen waarde heeft gekregen), om de random-generator eenmalig te initialiseren. In plaats van 42 mag ook eenander getal staan — of zelfs, voor liefhebbers, de tijd. En soms is hiervoor #include <cstdlib> nodig,helemaal bovenaan het programma. Is het antwoord goed, dan wordt de kandidaat tot een exacte studie toegelaten, en stopt het programma.Anders wordt één meerkeuzevraag (Aa/Bb/Cc/Dd) over kunst of literatuur gesteld, die uitsluitsel biedt over detoelating tot een alpha-studie. Als het daar ook mis gaat, is men helaas niet geschikt voor een universitairestudie. Gebruikers tot of tot en met (kies zelf) 30 jaar krijgen hier een andere vraag dan de oudere gebruikers— maar bij beiden is "hetzelfde" antwoord, bijvoorbeeld steeds B, goed. In alle gevallen worden de juisteantwoorden op het scherm afgedrukt, ook die van de som.

OpmerkingenAls de gebruiker een niet bestaande maand invoert, bijvoorbeeld −8, of een jaartal als 4242 (in de toekomstdus), stopt het programma met de mededeling dat dit niet kan (gebruik return 1;). Evenzo voor een nietbestaande dag, bijvoorbeeld 31 april of 42 december. We nemen aan dat de gebruiker zo vriendelijk is verdergeen fouten te maken bij het invoeren van gegevens: hij/zij voert niet al te gekke getallen of letters in, etcetera.Vanzelfsprekend worden hem/haar wel duidelijke vragen gepresenteerd.

Elk programma moet bij het "runnen" aan het begin op het beeldscherm laten zien wie de makers zijn, wat hunjaar van aankomst, studierichting en studentnummer is, welke opgave het is, wat de gebruiker te wachten ente doen staat, de datum waarop het programma gemaakt is, enzovoorts. Dit noemen we het infoblokje.Probeer dit er netjes uit te laten zien. Maak geen al te complexe kaders eromheen; gebruik liefst alleen deeerste 128 gewone karakters. Bovenaan het programma (in de C++-code dus) staat uiteraard commentaar, waarin een aantal van dezeelementen ook weer terugkomen, maar dan meer gericht op programmeurs, bijvoorbeeld de naam van degebruikte compiler.

Denk aan het gebruik van lege regels, inspringen, commentaar, constanten, enzovoorts. Bovenaan hetprogramma dient zoals gezegd commentaar over het programma te staan, speciaal bestemd voor andereprogrammeurs (en nakijkers), bijvoorbeeld kort wat het programma doet, en welke compiler gebruikt is:gebruikers van het programma vinden dat laatste niet interessant. Het infoblokje moet tijdens het "runnen"van het programma op het scherm komen, en is bestemd voor gebruikers van het programma. Lees ook eensover richtlijnen bij het maken van programmeeropgaven, en bestudeer de huisregels. Er hoeft geen gebruikvan functies, arrays en het while- en for-statement gemaakt te worden. Alleen de headerfiles iostream magen moet gebruikt worden — en eventueel ctime en string voor liefhebbers; en misschien cstdlib. Ruweindicatie voor de lengte van het C++-programma: 200 regels (300 mag ook wel).

Uiterste inleverdatum: maandag 23 september 2019, 17:00 uur.Manier van inleveren (één exemplaar per koppel, dat — ter herinnering — uit twee personen bestaat):

1. Digitaal de C++-code inleveren: stuur een email naar [email protected] geen executable's en geen PDF's en geen TeX-files, lever alleen één C++-file digitaal in! Noemdeze bij voorkeur bidenobama1.cc, dit voor de eerste opdracht van het duo Donald Obama / Hilary vonBiden. De laatst voor de deadline ingeleverde versie wordt nagekeken. Tip: maak een nette e-mail, met een korte maar zinnige tekst als inhoud, en de C++-file als attachment.

2. En ook een papieren versie van het verslag (inclusief de C++-code) deponeren in de speciaal daarvoorbestemde doos "Programmeermethoden" bij kamer 159 van het Snellius-gebouw.

Overal duidelijk datum en namen van de twee makers vermelden, in het bijzonder als commentaar in deeerste regels van de C++-code. Lees bij het derde werkcollege hoe het verslag eruit moet zien. Zijnspaties/tabs goed verwerkt?

Te gebruiken compiler: als hij maar C++ vertaalt; het programma moet in principe zowel op een Linux-machine(met g++) als onder Windows met Code::Blocks draaien. Test dus in principe op beide systemen! Normering:(consequente) layout 2; commentaar 2; infoblokje 1; verslag 1; werking 4. Eventuele aanvullingen enverbeteringen: lees deze WWW-bladzijde: www.liacs.leidenuniv.nl/~kosterswa/pm/op1pm.php.

www.liacs.leidenuniv.nl/~kosterswa/pm/op1pm.php

19

Page 20: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Product

Voor de eerste programmeeropgave moet je onder meer,voor een gegeven datum, de dag van de week uitrekenen.Bijvoorbeeld: 1–1–1901 ÝÑ dinsdag.

Hoe zou je dat uit je hoofd doen?

Wanneer is een jaar een schrikkeljaar?

www.liacs.leidenuniv.nl/~kosterswa/pm/op1pm.php

Verslag in LATEX! 123ˆ 456 ‰ 123456

Niet gebruiken: Doomsday-algoritme 5.9: donderdag

4–4, 6–6, 8–8, 10–10, 12–12, “I work from 9–5 in a 7–11”.

20

Page 21: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Nog een C``-programma

// Dit is een regel met commentaar ...#include <iostream> // moet er altijd bijusing namespace std;const double pie = 3.14159; // een constante (of cmath)int main ( ) {

double straal; // straal van de cirkelcout << "Geef straal, daarna Enter .. ";cin >> straal;if ( straal > 0 )

cout << "Oppervlakte "<< pie * straal * straal << endl;

elsecout << "Niet zo negatief ..." << endl;

cout << "Einde van dit programma." << endl;return 0;

}//main21

Page 22: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Nog een C``-programma

// Dit is een regel met commentaar ...#include <iostream> // moet er altijd bijusing namespace std;const double pie = 3.14159; // een constante (of cmath)int main ( ) {

double straal; // straal van de cirkelcout << "Geef straal, daarna Enter .. ";cin >> straal;if ( straal > 0 ) { // accolades nodig!

cout << "Oppervlakte ";cout << pie * straal * straal << endl;

}//ifelse

cout << "Niet zo negatief ..." << endl;cout << "Einde van dit programma." << endl;return 0;

}//main22

Page 23: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Stoomcursus UNIX

In een Linux windows-omgeving zoals KDE of GNOMEstart je een of meer terminals: windows waarin je tekst-georiënteerde opdrachten kunt geven. Daarin tik je in:

gedit een.cc & edit je eerste C``-programma;open hiertoe een “edit-window”

g++ -Wall -o een een.cc compileer een.cc naar een./een run de executable eenls -lrt overzicht van je files (%)

De ampersand & zorgt er voor dat je in het oorspronkelijkewindow ook kunt doorwerken. En (%) levert zoiets als:

-rw-r--r-- 1 kosterswa domain users 124 Sep 5 12:52 een.cc-rwx------ 1 kosterswa domain users 11049 Sep 5 12:53 een

23

Page 24: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Eerste werkcollege

‚ donderdagmiddag (Informatici), vanaf ˘13:45(!) uurófmaandagmiddag (Wiskundigen), vanaf ˘13:45(!) uur

‚ aansluitend vragenuur

‚ in computerzalen Snellius

‚ www.liacs.leidenuniv.nl/~kosterswa/pm/pmwc1.php

‚ doel: UNIX, Hello world, . . .

24

Page 25: C …liacs.leidenuniv.nl/~kosterswa/pm/intro.pdfop1/5 18–22sep Controlestructuren 2 3.4/5,op6/10 23–27sep Functies, 3,4, 3.6/7,op11/17 files 12.1/2 30sep–4okt Ñgeencollege—

Introductie Tot slot & ziens

‚ Hello world voor C``

‚ boek en “dictaat”

‚ ULCN-account

‚ software voor thuis

‚ de eerste programmeeropgave

‚ www.liacs.leidenuniv.nl/~kosterswa/pm/

‚ huiswerk: Savitch Hoofdstuk 1; dictaat 1 en 2

25