Programmeermethoden
Werkcollege 1: Hello world

Het eerste werkcollege van het vak Programmeermethoden vindt plaats in de week van 5 tot en met 9 september 2022. Het werkcollege van vrijdag 9 september wordt verplaatst naar maandag 12 september.

Voorbereiding

Als voorkennis wordt bekend verondersteld: eigenlijk niet zoveel, want dit is een van de eerste activiteiten. Wat helpt: En zorg dat je een laptop bij hebt!

Het eigenlijke werkcollege

Doe achtereenvolgens deze opdrachten:
  1. Laat je naam even aankruisen op de presentielijst, zodra die langs komt. Maar ga zeker direct door naar het volgende punt.
  2. Laptop bij de hand? Prima.
    Als dat een Mac is, gaan sommige zaken wat anders, maar dat zeggen we er niet steeds weer bij.
    En als je Linux (bijvoorbeeld als WSL: Windows Subsystem for Linux) op je laptop hebt, zijn er ook wat meer mogelijkheden.
    Als je op de computers in de computerzalen van het Snellius werkt, zijn er ook twee mogelijkheden: of met Windows (zie hieronder; doorgaans is Code::Blocks daar al in Windows geinstalleerd) of met Linux (zie punt 9).
  3. Het is handig om de website van Programmeermethoden altijd in de buurt te hebben. Als test: zoek het oude tentamen (met uitwerking) van 5 januari 2022 eens op.
    Wil je WiFi gebruiken? Zoek naar netwerk "eduroam" of "leidenuniv" en gebruik je ULCN-account.
  4. (Nogmaals, met een Mac of met Linux gaat het wat anders.)
    Installeer op je laptop Code::Blocks van de website. Gebruik de "binary" van de "Downloads" tab. Doorgaans is dat degene voor Windows: codeblocks-20.03mingw-setup.exe, maar het kan ook in Linux.
    Zie de video.
  5. We nemen aan dat Code::Blocks geinstalleerd is op je laptop. Start het programma op. Er kan veel mee, maar we doen het rustig aan. Doe bij "File" eerst "New" en dan "Empty file". Je kunt nu een eerste C++-programma in het middengebied intikken, oftewel "editen". Bijvoorbeeld:
     
       #include <iostream>
       using namespace std;
     
       int main ( ) {
         cout << "Dag allemaal!" << endl;
         return 0;
       }//main

     
    Save dit programma, bij voorkeur in een frisse map, bijvoorbeeld als een.cc. In plaats van een mag je ook een andere naam verzinnen, maar houd het kort, en bij voorkeur in kleine letters en zonder spaties, underscores enzovoorts. De extensie .cc is wel belangrijk, daar herken je een C++-programma aan. Overigens is .cpp ook heel gebruikelijk.
    Als het goed is, is er nu ook syntax-highlighting: allerlei woorden krijgen hun eigen kleuren.
    Probeer meteen vanaf het begin het inspringen, de indentatie, consistent en eenvoudig te houden. De hoofdregel is: belangrijke zaken (zoals int main ...) springen niet in, staan dus tegen de linker kantlijn, en daarbinnen spring je in met twee (drie of vier mag ook; maar wel overal hetzelfde) spaties (zoals bij cout ...). Let er op dat open- en sluitaccolades bij elkaar horen, in zekere zin ook qua inspringen.
    Op de Mac en bij WSL gebruik je een editor naar keuze, bijvoorbeeld Sublime Text, om het C++-programma in te tikken. Zie de uitleg.
  6. Nu gaan we het programma compileren naar machinetaal. Druk in Code::Blocks op de knop met het gele wieltje ("Build"; het kan ook via de menu's), en als het goed is wordt onderaan succesvol gecompileerd. Als je tikfouten of meer ingewikkelde fouten hebt gemaakt, moet je die verbeteren tot er nul fouten over zijn. Dit zijn zogeheten "compile-time fouten". En steeds dus opnieuw compileren.
  7. Dan kunnen we nu het programma uitvoeren, oftewel "runnen" of "executeren" via de knop met het groene driehoekje ("Run"). Het wordt in een eigen window uitgevoerd. Als je het gezien hebt, sluit dat window dan — zolang het open is, kun je niet opnieuw compileren.
  8. Hopelijk werkt dit, en heb je nu een "Hello world"-programma gemaakt! Als het niet gelukt is, zoek hulp!
    Het kan zijn dat je firewall moeilijk doet. Dat kost iedere keer tijd, en je kunt als je wilt allerlei controles aan- en uitzetten in je anti-virus programma.
  9. (Dit onderdeel is bedoeld voor mensen die met Linux werken in de computerzalen van het Snellius, of zelf een dual-boot computer hebben met Ubuntu)
    In de computerzalen is Ubuntu 18.04 geinstalleerd. Als je daar inlogt, kun je het beste eerst een "terminal" openen, waarin je Linux-commando's kunt intikken. Een voorbeeld is ls -lrt dat een overzicht geeft van je files. Je kunt dan in een apart window een editor openen, bijvoorbeeld gedit, met het commando gedit & (let op de &), en daarin de C++-code (zie punt 5) intikken. In de oorspronkelijke terminal kun je het programma compileren (zie punt 6) met het commando g++ -Wall -Wextra -o een een.cc (als je het in de editor als een.cc hebt gesaved), en de executable runnen (zie punt 7) met het commando ./een . (Die laatste punt hoort niet bij het commando.)

    ============ Geef jezelf een schouderklopje ===================

  10. We gaan nu een variabele getal aan het programma toevoegen. Tik direct na int main ... een nieuwe regel met int getal; in. Hoeveel springt deze in? (Antwoord: twee spaties. Of drie. Of vier. Maar wel consistent.) Compileer en run het programma opnieuw. Het zal nog steeds hetzelfde doen.
  11. Maak eens opzettelijk een fout, haal bijvoorbeeld de punt-komma weg in de zojuist toegevoegde regel. En compileer opnieuw. Code::Blocks helpt bij het vinden van dit soort ("compile-time") fouten. Verbeter de fout(en).
    Tip: compileer vaak, en verbeter fouten direct. Na elke paar nieuwe regels. Als je in een keer een heel lang programma compileert, is er soms geen beginnen aan.
  12. Vink in Code::Blocks bij "Settings", en daarbinnen bij "Compiler" alle gewone ("common") en extra waarschuwingen ("warnings") aan. Je zet dan de "vlaggen" -Wall en -Wextra aan. Compileer nog eens. Als het goed is, krijg je de waarschuwing dat je een ongebruikte variabele ("unused variable") hebt. Zulke waarschuwingen helpen bijzonder goed bij het schrijven van programma's. We gaan die variabele nu dus gebruiken!
  13. Zorg ervoor dat de gebruiker een getal kan invoeren en dat het programma het kwadraat van dat getal afdrukt.
    Hint: zie het voorbeeldprogramma op pagina 3 van het dictaat, gedeelte "aantekeningen bij de hoorcolleges".
  14. Experimenteer wat met het weglaten of toevoegen van "endl" en spaties.
  15. Pas het programma aan zodat het twee door de gebruiker in te voeren gehele getallen optelt en het resultaat afdrukt.
    Tip: vraag (met cout) één getal en lees (met cin) dat getal in. Doe dat nog een keer. Het idee is: één duidelijke vraag en één antwoord.
  16. Als je het zonder hulpvariabele gedaan hebt, doe het dan nu eens met een hulpvariabele om de som in op te slaan. En andersom.
  17. Laat het gemiddelde van de twee getallen afdrukken. Hoe zit het met afronden? (Zie ook straks.)
  18. En nu moet het quotient van de twee getallen worden afgedrukt. Gebruik de deelstreep /.
  19. Wat gebeurt er als je door 0 probeert te delen? (Dat heet een "run-time fout".) Repareer dit probleem. Het kan met precies één if-statement. Let ook op de layout, en op eventuele accolades.
  20. Als je gehele getallen op elkaar deelt, is het resultaat ook geheel. Zo wordt 7 / 3 het gehele getal 2, want 3 past 2 maal in 7. Je kunt ook zo denken: alles na de decimale punt (in Nederland: komma) wordt weggegooid.
    Laat opnieuw het gemiddelde van twee getallen uitrekenen en probeer op verschillende manieren zonodig ".5" af te laten drukken. Probeer ook eens door 2.0 te delen, en probeer weer eens een hulpvariabele te gebruiken om het resultaat in op te slaan.
  21. De rest bij deling van twee positieve getallen bereken je met % (procent). Zo wordt 7 % 3 gelijk aan 1.
    Gebruik dat in je programma als volgt. Vraag aan de gebruiker een getal, dat het aantal dagen vanaf vandaag moet voorstellen. Druk nu af welke dag van de week dat is, waarbij 0 = de dag van vandaag, 1 = die van morgen etcetera. Over 78 dagen is het bijvoorbeeld dezelfde dag als morgen, oftewel 1.

    ============ Geef jezelf nog een schouderklopje ===================

  22. (Echt alles af?) En nu de eerste programmeeropgave ... dus ga aan de slag met het tweede werkcollege.

Huiswerk

Lees het dictaat, Hoofdstuk 1, over computers en operating systemen, eens door. En nog eens. (En voor liefhebbers Hoofdstuk 2 over Linux. Dit studiejaar beginnen we, zoals gezegd, met Windows en Code::Blocks.) Lees Savitch Hoofdstuk 1. Lees van het dictaat, gedeelte "aantekeningen bij de hoorcolleges", Hoofdstuk 3.1 tot en met 3.4.

Kun je uit je hoofd een Hello world programma in C++ bedenken? En editen? En compileren? En uitvoeren, oftewel executeren? Kun je met gehele getallen werken?