Programmeermethoden
Werkcollege 1: Hello world

Het eerste werkcollege van het vak Programmeermethoden vindt plaats in de week van 4 tot en met 8 september 2023.

Voorbereiding

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

Het eigenlijke werkcollege

Doe achtereenvolgens deze opdrachten:
  1. Laat je naam even op de presentielijst zetten, 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.
    Als je op de computers in de computerzalen van het Snellius werkt gebruik je Linux Ubuntu 18.04. Je hebt dan natuurlijk je ULCN-account nodig.
  3. Het is handig om de website van Programmeermethoden altijd in de buurt te hebben. Als test: zoek het oude tentamen (met uitwerking) van 4 januari 2023 eens op.
    Wil je WiFi gebruiken? Zoek naar netwerk "eduroam" of "leidenuniv" en gebruik je ULCN-account.
  4. (Nogmaals, er zijn vele verschillende mogelijkheden.)
    In Windows 11 (of 10): installeer eerst Windows Subsystem for Linux (WSL). Dit gaat door in een cmd-window (tik cmd in de zoekregel onderaan het scherm) de opdracht wsl --install -d Ubuntu-22.04 te geven. Misschien moet bij de systeemopties ergens het gebruik van Hyper-V aangevinkt worden.
  5. Als het goed is, kun je nu een terminal openen: een window waarin je tekst-commando's kunt geven, zoals ls -lrt om je file-overzicht te bekijken. Klik hiertoe op het Ubuntu-icoon.
    Enkele veel gebruikte commando's zijn:
    • cd NaamVanEenMap : ga naar die map, je ziet dat terug in de prompt
    • cd : ga terug naar je home-directory
    • mkdir NieuweMap : maak een nieuwe map, geheten NieuweMap
    • mv FileEen FileTwee : verplaats (in feite: hernoem) FileEen naar FileTwee
    • cp FileEen FileTwee : kopieer FileEen naar FileTwee
    • rm EenFile : verwijder EenFile
    Als je bij je Windows-files wilt komen, geef dan cd /mnt/c/MapNaam om in de map MapNaam van de C-schijf te raken. (Het is overigens wat lastiger om bij USB-drives te komen.)
    Je kunt in de terminal ook nieuwe software installeren, bijvoorbeeld gedit. Doe altijd eerst sudo apt update om ervoor te zorgen dat de nieuwste software op internet gevonden kan worden. Nu kun je gedit installeren met sudo apt install gedit, en deze editor kun je vervolgens in een apart eigen window openen met gedit & (denk aan de &, als je die vergeet wordt het originele window tijdelijk geblokkeerd, en dat is niet handig).
  6. Installeer in Windows de gratis editor Sublime Text, kortweg Sublime. Overigens kun je deze ook in Linux installeren.
    Om het programmeren wat eenvoudiger te maken, kun je naast de standaard optie syntax highlighting ook andere handige opties aanzetten in de teksteditor. Bijvoorbeeld het instellen van een rechter kantlijn (zodat de regels niet te lang zijn). Ga daartoe in het menu rechtsboven naar Preferences en daar naar Settings. Aan de linkerkant van het scherm staan nu de standaard-instellingen, aan de rechterkant kun je je eigen instellingen parkeren. Leuke instellingen zijn:
    {
        "detect_indentation": false,
        "draw_white_space": "all",
        "rulers":
        [
            70
        ],
        "tab_size": 4,
        "translate_tabs_to_spaces": true
    }
    
  7. Je moet ook een compiler installereren. Doe dit met sudo apt get install g++ , waarmee je de GNU Compiler Collection installeert. Als het goed is levert in een terminal het commando g++ nu iets meer op.
  8. Als een van de voorgaande acties niet gelukt is, bijvoorbeeld omdat je een heel oude laptop hebt: installeer 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.
    Open hier een nieuwe file bij "File", eerst "New" en dan "Empty file". Je kunt nu een eerste C++-programma in het middengebied intikken, oftewel "editen", zie het volgende punt.
  9. We nemen vanaf hier aan dat je een compiler een een editor op je laptop hebt. Nu gaan we een nieuwe C++-file, je eerste programma, intikken oftewel "editen" (dus of met Sublime, of met gedit, of in een Mac-editor, of in Code::Blocks (zie het vorige punt)). 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 hierboven bij cout ...). Let er op dat open- en sluitaccolades bij elkaar horen, in zekere zin ook qua inspringen.
  10. Nu gaan we het programma compileren naar machinetaal. In een Linux-terminal of op de Mac geef je het commando g++ -Wall -Wextra -o een een.cc (als je de file als een.cc hebt gesaved, en je je in dezelfde map bevindt), en zie je het resultaat in de terminal.
    In Code::Blocks druk je op de knop met het gele wieltje ("Build"; het kan ook via de menu's), en als het goed is wordt onderaan succesvol gecompileerd.
  11. 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.
  12. Als er geen fouten ("errors") meer zijn, kunnen we nu het programma uitvoeren of draaien, oftewel "runnen" of "executeren". In een terminal tik je in ./een (let op de punt aan het begin, dat betekent de huidige map); het programma draait dan in die terminal. In Code::Blocks doe je dat via de knop met het groene driehoekje ("Run"), het programma wordt daar in een eigen window uitgevoerd; als je het gezien hebt, sluit dat window dan — zolang het open is, kun je niet opnieuw compileren.
  13. Hopelijk werkt dit, en heb je nu een "Hello world"-programma gemaakt! Als het niet gelukt is, zoek hulp!
    Het kan zijn dat in Windows 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.

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

  14. 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, maar waarschijnlijk krijg je een "warning" = waarschuwing (iets als "Unused variable"). Die verdwijnt later vanzelf als we de variabele daadwerkelijk gaan gebruiken.
    Probeer altijd alle waarschuwingen te begrijpen en zo mogelijk af te vangen.
  15. Maak ook eens opzettelijk een fout, haal bijvoorbeeld de punt-komma weg in de zojuist toegevoegde regel. En compileer opnieuw. Je compiler helpt bij het vinden van de fout(en), maar soms zijn de boodschappen verwarrend; probeer altijd in ieder geval de eerste fout te verbeteren.
    Tip: compileer vaak, en verbeter fouten direct. Na elke paar nieuwe regels. Als je in één keer een heel lang programma compileert, is er soms geen beginnen aan.
  16. Staan de settings van je software goed?
    Bij Sublime (zie ook eerder) en gedit kun je bij Preferences allerlei voorkeuren opgeven, bijvoorbeeld over het gebruikte lettertype en de tabgrootte; laat ook een verticale lijn bij regel 70 zetten, waar je liever niet overheen moet gaan.
    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 een waarschuwing als je een ongebruikte variabele ("Unused variable") hebt.
  17. 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".
  18. Experimenteer wat met het weglaten of toevoegen van "endl" en spaties.
  19. 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.
  20. Als je het zonder hulpvariabele gedaan hebt, doe het dan nu eens met een hulpvariabele om de som in op te slaan. En andersom.
  21. Laat het gemiddelde van de twee getallen afdrukken. Hoe zit het met afronden? (Zie ook straks.)
  22. En nu moet het quotient van de twee getallen worden afgedrukt. Gebruik de deelstreep /.
  23. 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.
  24. 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.
  25. 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 ===================

  26. (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 gebruiken we vooral Windows Subsystem for Linux.) 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?