Solutions TOPIC F: Procedures & Types

Contents :

Procedures, types .

Exercises :


D1: SumDivisibleBy

Exercise

MODULE D1;
<* NOOPTIMIZE + *>
    FROM IO IMPORT RdChar, WrChar, WrStr, RdStr, WrLn, RdCard, WrCard, RdInt, WrInt, RdReal, WrReal, RdBool, WrBool;

    PROCEDURE IsSumDivisibleBy(x1, x2, x3:CARDINAL): BOOLEAN;
      VAR result: BOOLEAN;
    BEGIN
      IF ((x1 + x2) MOD x3) = 0 THEN
        result := TRUE;
      ELSE
        result := FALSE;
      END;
      RETURN result;
    END IsSumDivisibleBy;

    VAR opl: BOOLEAN;
BEGIN
    WrLn;
    opl := IsSumDivisibleBy(10, 6, 4);
    WrBool(opl, 0);
END D1.


S1

Exercise

S2

Exercise

S4

Exercise

MODULE S4;
<* WOFF + *> <* NOOPTIMIZE + *>
    FROM IO IMPORT RdChar, WrChar, WrStr, RdStr, WrLn, RdLn, RdCard, WrCard, RdInt, WrInt,
RdReal, WrReal, WrFixReal, RdBool, WrBool;
    FROM RealMath IMPORT sqrt, exp, sin, cos, tan, arcsin, arccos, arctan, power, round;

    CONST              (* constants *)

    PROCEDURE PrintRealArray(arr: ARRAY OF REAL);

      VAR i:CARDINAL;
    BEGIN
      FOR i := 0 TO HIGH(arr) DO
        WrReal(arr[i], 2, 10);
      END;
      WrLn;
    END PrintRealArray;

(*  PROCEDURE AccountEvolution(  );
    BEGIN

    END AccountEvolution;*)


    VAR arr1: ARRAY[1..10] OF REAL;              (* 2 arrays of different size *)
        arr2: ARRAY[1..20] OF REAL;
BEGIN
    WrLn;
    AccountEvolution(arr1, 2500.00, 4.2); (* 2500 Euro at 4,2%, 10 years *)

    AccountEvolution(arr2, 2500.00, 3.0); (* 2500 Euro at 3,0%, 20 years *)

END S4.


S5

MODULE S5;
<* NOOPTIMIZE + *>
  FROM IO IMPORT RdChar, WrChar, WrStr, RdStr, WrLn, RdLn, RdCard, WrCard, RdInt, WrInt, RdReal, WrReal;
  FROM Lib IMPORT Delay;
  FROM Wimdows IMPORT Window, KillWindow, GetKeyPressed, GetKey, SetFont, Text, Rectangle, Circle, Disc, SetPixel;
  FROM Wimdows IMPORT _clrBLACK, _clrBLUE, _clrGREEN, _clrCYAN, _clrRED, _clrMAGENTA;
  FROM Wimdows IMPORT _clrBROWN, _clrWHITE, _clrGRAY, _clrLIGHTBLUE, _clrLIGHTGREEN;
  FROM Wimdows IMPORT _clrLIGHTCYAN, _clrLIGHTRED, _clrLIGHTMAGENTA, _clrLIGHTYELLOW, _clrBRIGHTWHITE;

  FROM Windows IMPORT VK_ESCAPE;

  CONST BITMAP_SIZE = 32;
        SCREEN_SIZE = 700;

  TYPE BitmapAr = ARRAY [1..BITMAP_SIZE],[1..BITMAP_SIZE] OF CHAR;

  VAR
     gHunter, gEuro, gBackground: BitmapAr;
     gColorMap: ARRAY['a'..'z'] OF CARDINAL;

 PROCEDURE CreateBitmaps();
 BEGIN
 (* Init the color map *)
   gColorMap['a'] := _clrBLACK         ; (*    0*)
   gColorMap['b'] := _clrBLUE          ; (*    1*)
   gColorMap['c'] := _clrGREEN         ; (*    2*)
   gColorMap['d'] := _clrCYAN          ; (*    3*)
   gColorMap['e'] := _clrRED           ; (*    4*)
   gColorMap['f'] := _clrMAGENTA       ; (*    5*)
   gColorMap['g'] := _clrBROWN         ; (*    6*)
   gColorMap['h'] := _clrWHITE         ; (*    7*)
   gColorMap['i'] := _clrGRAY          ; (*    8*)
   gColorMap['j'] := _clrLIGHTBLUE     ; (*    9*)
   gColorMap['k'] := _clrLIGHTGREEN    ;(*    10*)
   gColorMap['l'] := _clrLIGHTCYAN     ;(*    11*)
   gColorMap['m'] := _clrLIGHTRED      ;(*    12*)
   gColorMap['n'] := _clrLIGHTMAGENTA  ;(*    13*)
   gColorMap['o'] := _clrLIGHTYELLOW   ;(*    14*)
   gColorMap['p'] := _clrBRIGHTWHITE   ;(*    15*)
   (* 'z' is used for the background color *)

   gHunter[1]:="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
   gHunter[2]:="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
   gHunter[3]:="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
   gHunter[4]:="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
   gHunter[5]:="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
   gHunter[6]:="zzzzzzzzzzzzzooooooozzzzzzzzzzzz";
   gHunter[7]:="zzzzzzzzzzzooooooooooozzzzzzzzzz";
   gHunter[8]:="zzzzzzzzzzoaaoooooooooozzzzzzzzz";
   gHunter[9]:="zzzzzzzzzoooaaaaoooooooozzzzzzzz";
   gHunter[10]:="zzzzzzzzoooooooaaaooooooozzzzzzz";
   gHunter[11]:="zzzzzzzooooooooooaaaoooooozzzzzz";
   gHunter[12]:="zzzzzzoooooooooooooaaaooooozzzzz";
   gHunter[13]:="zzzzzzooooooeaoooooaaaaoooozzzzz";
   gHunter[14]:="zzzzzooooooeeaaooooaaaaaaooozzzz";
   gHunter[15]:="zzzzzooooooaaaaooooaaaaaaaaazzzz";
   gHunter[16]:="zzzzzoooooooaaoooooaaaaooooazzzz";
   gHunter[17]:="zzzzzooooooooooooooooooooooozzzz";
   gHunter[18]:="zzzzzooooooooooooooooooooooozzzz";
   gHunter[19]:="zzzzzoooooooooooooooooeooooozzzz";
   gHunter[20]:="zzzzzoooooooooooooooioeooooozzzz";
   gHunter[21]:="zzzzzziiiiiiiipppppiiieggggggzzz";
   gHunter[22]:="zzzzeeiippppppiiiiiiieeggggggzzz";
   gHunter[23]:="zzzzzziiiiiiiiiiiiiiiieggggggzzz";
   gHunter[24]:="zzzzzzzzooooooooooooooeoozzzzzzz";
   gHunter[25]:="zzzzzzzzzooooooooooooooozzzzzzzz";
   gHunter[26]:="zzzzzzzzzzooooooooooooozzzzzzzzz";
   gHunter[27]:="zzzzzzzzzzzooooooooooozzzzzzzzzz";
   gHunter[28]:="zzzzzzzzzzzzzooooooozzzzzzzzzzzz";
   gHunter[29]:="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
   gHunter[30]:="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
   gHunter[31]:="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
   gHunter[32]:="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";

   gEuro[1]:="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
   gEuro[2]:="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
   gEuro[3]:="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
   gEuro[4]:="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
   gEuro[5]:="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
   gEuro[6]:="zzzzzzzzzzzzzzooooooozzzzzzzzzzz";
   gEuro[7]:="zzzzzzzzzzzooooooooooooozzzzzzzz";
   gEuro[8]:="zzzzzzzzzzooooooooooooooozzzzzzz";
   gEuro[9]:="zzzzzzzzzooooozzzzzzzooooozzzzzz";
   gEuro[10]:="zzzzzzzooooozzzzzzzzzzzoooozzzzz";
   gEuro[11]:="zzzzzzzoooozzzzzzzzzzzzzoooozzzz";
   gEuro[12]:="zzzzzzoooozzzzzzzzzzzzzzoooozzzz";
   gEuro[13]:="zzzzzoooozzzzzzzzzzzzzzzzoooozzz";
   gEuro[14]:="zzzzzoooozzzzzzzzzzzaaaaaoooozzz";
   gEuro[15]:="zzzooooooooooooooooooaaaaaaaazzz";
   gEuro[16]:="zzooooooooooooooooooaaaaaaaaaazz";
   gEuro[17]:="zzzzooooozzzzzzzaaaaaazzzzaaaaaz";
   gEuro[18]:="zzzzooooozzzzzaaaaaaaaazzzzaaaaa";
   gEuro[19]:="zzzooooooooooooooooooazzzzzzzzzz";
   gEuro[20]:="zzoooooooooooooooooozzzzzzzzzzzz";
   gEuro[21]:="zzzzzooooozzaaaazzzzzzzzzzzzzaaa";
   gEuro[22]:="zzzzzzoooozaaaazzzzzzzzzzzzzaaaa";
   gEuro[23]:="zzzzzzoooooaaaaaaaaazzzzzzzaaaaz";
   gEuro[24]:="zzzzzzoooooaaaaaaaazzzzzooooaaaz";
   gEuro[25]:="zzzzzzzoooooaazzzzzzzzzoooooaazz";
   gEuro[26]:="zzzzzzzzoooooazzzzzzzzoooooaazzz";
   gEuro[27]:="zzzzzzzzzoooooazzzzzzooooooazzzz";
   gEuro[28]:="zzzzzzzzzzoooooooooooooooaazzzzz";
   gEuro[29]:="zzzzzzzzzzzooooooooooooazzzzzzzz";
   gEuro[30]:="zzzzzzzzzzzzzzooooooozzzzzzzzzzz";
   gEuro[31]:="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
   gEuro[32]:="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";

   gBackground[1]:="cccfcccfcccfcccfcccfcccfcccfccfc";
   gBackground[2]:="cfcccfcccfcccfcccfcccfcccfccfccc";
   gBackground[3]:="ccfcccfcccfcccfcccfcccfcccfccfcc";
   gBackground[4]:="fcccfcccfcccfcccfcccfcccfccfcccc";
   gBackground[5]:="ccfcccfcccfcccfcccfcccfcccfccfcc";
   gBackground[6]:="cccfcccfcccfcccfcccfcccfcccfccfc";
   gBackground[7]:="ccfcccfcccfcccfcccfcccfcccfccfcc";
   gBackground[8]:="cfcccfcccfcccfcccfcccfcccfccfccc";
   gBackground[9]:="cccfcccfcccfcccfcccfcccfcccfccfc";
   gBackground[10]:="ccfcccfcccfcccfcccfcccfcccfccfcc";
   gBackground[11]:="fcccfcccfcccfcccfcccfcccfccfcccc";
   gBackground[12]:="ccfcccfcccfcccfcccfcccfcccfccfcc";
   gBackground[13]:="cccfcccfcccfcccfcccfcccfcccfccfc";
   gBackground[14]:="cfcccfcccfcccfcccfcccfcccfccfccc";
   gBackground[15]:="ccfcccfcccfcccfcccfcccfcccfccfcc";
   gBackground[16]:="fcccfcccfcccfcccfcccfcccfccfcccc";
   gBackground[17]:="ccfcccfcccfcccfcccfcccfcccfccfcc";
   gBackground[18]:="cccfcccfcccfcccfcccfcccfcccfccfc";
   gBackground[19]:="cfcccfcccfcccfcccfcccfcccfccfccc";
   gBackground[20]:="ccfcccfcccfcccfcccfcccfcccfccfcc";
   gBackground[21]:="cfcccfcccfcccfcccfcccfcccfccfccc";
   gBackground[22]:="ccfcccfcccfcccfcccfcccfcccfccfcc";
   gBackground[23]:="cfcccfcccfcccfcccfcccfcccfccfccc";
   gBackground[24]:="ccfcccfcccfcccfcccfcccfcccfccfcc";
   gBackground[25]:="cfcccfcccfcccfcccfcccfcccfccfccc";
   gBackground[26]:="ccfcccfcccfcccfcccfcccfcccfccfcc";
   gBackground[27]:="cfcccfcccfcccfcccfcccfcccfccfccc";
   gBackground[28]:="ccfcccfcccfcccfcccfcccfcccfccfcc";
   gBackground[29]:="cccfcccfcccfcccfcccfcccfcccfccfc";
   gBackground[30]:="ccfcccfcccfcccfcccfcccfcccfccfcc";
   gBackground[31]:="cccfcccfcccfcccfcccfcccfcccfccfc";
   gBackground[32]:="cfcccfcccfcccfcccfcccfcccfccfccc";

 END CreateBitmaps;

 PROCEDURE DrawBitmap(bitmap: BitmapAr);
 (* ... *)
 END DrawBitmap;

 VAR
   c: CARDINAL;
BEGIN

  (* Initialise graphics. Coordinatesystem: (0,0) is the top left corner *)
  Window("bitmaps", SCREEN_SIZE, SCREEN_SIZE);


   CreateBitmaps();
   DrawBitmap(gHunter);


  (* tell user to press escape to finish the program... *)
  SetFont(1, _clrRED);
  Text("press ESC to quit", SCREEN_SIZE/2-50, 10);
  (* ...and program will wait here until user presses escape *)
  REPEAT
    Delay(25);
  UNTIL (GetKeyPressed(c) AND (c = VK_ESCAPE));
  (* finally close the window *)
  KillWindow();

END S5.

Exercise


X1

Exercise

VAR  gSeed: CARDINAL; (* deze globale variabele wordt bijgehouden om telkens de volgende waarde te berekenen *)

     PROCEDURE RandomCard(min, max: CARDINAL): CARDINAL;
     (* procedure geeft een random variabele terug tussen min en max *)
       VAR
         factor: REAL;
     BEGIN
        factor := (VAL(REAL, max - min) + 0.99999) / FLOAT(1013 - 1);
        gSeed := (gSeed * 351 + 138) MOD 1013;
        RETURN min + VAL(CARDINAL, VAL(REAL, gSeed) * factor);
     END RandomCard;


H1

Exercise

H2

Exercise

T1

Exercise