TOPIC A: Basis

Contents :

  Cardinal, Integer, + - * DIV MOD, IF, FOR, WHILE, RdCard, WrCard, RdInt, WrInt, WrStr, WrLn.

Exercises :



Demo 1: Tekenen in 3D

 

Demo 2: Pijl in bepaalde kleur

  •  maak een nieuwe file aan
  • copieer de oplossing Demo
  • save als Demo2.mod  (Dit moet exact deze naam zijn!! Vergeet vooral de .mod niet expliciet toe te voegen!!)
  • save in je eigen drive (best de E:), maak er een map voor deze oefeningen (bvb "Modula2" )
  • je maakt het best een map per topic aan (bvb TopicA, TopicB, ...)!
  • PAS OP: folders of programma's mogen geen spaties bevatten (dan geraakt XDS 'in de war')
  • Het programma: vraagt een kleur aan de gebruiker ('R' voor rood, 'B' voor blauw, 'G'  voor groen, gebruik RdKey() om een letter in te lezen) en tekent dan een pijl op het scherm in de gegeven kleur

     

     

    Demo 3: Vraag tot kleur OK

  •  Maak een nieuwe file aan, copieer de oplossing Demo,  save als Demo3.mod
  • Dit programma vraagt een nieuwe toets als een ongeldige input gegeven was.

  • S1: Pijl tekenen


    S2: Pijlen tekenen

    Los de volgende vragen 1 voor 1 op.
    1. Herhaal het voorgaande tot de gebruiker een ongeldig getal of een 0 ingeeft.
      • merk op dat een ongeldige invoer ook een 0 teruggeeft.
    2. Tel het aantal pijlen die zo getekend worden.
    3. Stop pas als er 10 pijlen getekend zijn. Als een ongeldig getal wordt ingevoerd teken je niets.
    4. Verander de kleur bij iedere nieuwe pijl, bvb neem een iets lichtere kleur met Lighter. Dan bekom je zo iets (met dank aan Nils Cornelis):



    S3: Grid

    Los de volgende delen 1 voor 1 op.
    1. Teken een grid (raster) op het scherm in een 500x500 rechthoek in het XZ-vlak, met een interlinie (tussen de gridlijnen) van 50 pixels.
    2. Vraag de gebruiker voor de interlinie en teken dan de grid.
    3. Vraag de gebruiker voor het aantal gridlijnen en teken een grid die het scherm helemaal opvult.



    S4: Kubussen

    Los de volgende delen 1 voor 1 op.
    1. Teken 10 kubussen met middelpunt (0, 25*i, 0) waarbij i het volgnummer van de kubus is (1, 2, 3, ..., 10). Vraag telkens de ribbegrootte van de kubus aan de gebruiker.
    2. Teken kubussen tot de gebruiker een 0 of een ongeldig getal ingeeft (die ook als 0 binnen komt).

    S5: Print reeks

    Gegeven zijn twee constantes K en L als volgt gedefinieerd (boven VAR): CONST K = 1013; L = 11111;
    1. Print de veelvouden van K tot deze groter wordt dan L (als groter, mag dit niet afgeprint worden!). Tel ook het aantal veelvouden dat je aldus geprint hebt.
    2. Vermenigvuldig het gegeven getal K met 4/3 tot het resultaat groter is dan L (als groter, mag dit niet afgeprint worden!).


    S6: Brug

    Hint:
    (c) Lennert Loos


    S7: Deling & Rest

    Hint: je kan je programma checken met de debugger, die hier uitgelegd staat.


    H1: Schuine strepen

    Herhalingsoefening, zou je moeten kunnen na de andere oefeningen uit deze reeks.



    H2: Schaakbord

    Gebruik de code van de demo als start
    Vraag: kan je op een eenvoudige manier je code veranderen en er een dambord van maken? Kan je gemakkelijk de grootte van elk vakje aanpassen? (gebruik van constantes!)

     

    T1: Output

    MODULE T1;
    <* NOOPTIMIZE + *> (* this is for using the debugger *)
      FROM IO IMPORT WrLn, WrCard, RdCard;
      VAR x1, x2, x3: CARDINAL;
    BEGIN
        x1 := 3;
        x2 := RdCard();  (* hier tik ik 7 in (here I type 7)  !! *)
        WHILE (x2 < 30) DO
            x3 := x1 + x2;
            IF (x3 MOD 3) = 0 THEN   (* MOD is de modulo of rest operator, hier: rest bij deling door 3 *)
                x2 := x2 + x3;
            ELSE
                x2 := x2 - 1;
            END;
        END;

        WrCard(x1, 0);
        WrLn();
        WrCard(x2, 0);
        WrLn();
        WrCard(x3, 0);
        WrLn();
    END T1.