Deelprogramma’s en variabelen(2)

Het zal vaak voorkomen dat een programma op verschillende punten (min of meer) hetzelfde zal moeten uitvoeren. Denk bijvoorbeeld aan invoer of uitvoer.
Pascal, zoals ook vele andere talen, biedt de mogelijkheid om terugkerende code als een apart deelprogramma te maken.
Het voordeel is dat je het maar één keer hoeft te programmeren wat de kans op fouten minimaliseert. Op plaatsen waar je de code nodig hebt beperk je je tot een simpele aanroep.

In Pascal noem je zo’n deelprogramma een procedure. De syntax voor een procedure luidt:

procedure naam;

[var declaraties]

begin
[statements]
end;

Dus de procedure moet een (unieke) naam hebben, en voor de rest lijkt het heel erg op een “gewoon” Pascal-programma.
Eigenlijk is dat ook zo, want in een procedure mag je ook weer een procedure maken!
Laten we maar eens naar een voorbeeldje kijken: Voer een tekst in en zet deze gecentreerd in een kader.

program p7_1;
  var regel: string[60];

procedure horlijn;
  {maak een horizontale lijn van 70 x-en}
  var x: integer;
begin

  for x := 1 to 70 do
    write(‘x’);
  writeln;
end;

procedure kader;
  {maak een kader van x-en en zet de regel daarin gecentreerd neer}
  var l: integer;
begin

  horlijn;
  l := length(regel);
  write(‘x’);
  gotoxy(35 – (l div 2), wherey); {begin regel op pos 35 – helft lengte regel}
  write(regel);
  gotoxy(70, wherey);
  writeln(‘x’);
  horlijn;
end;

begin
  write(‘Geef een regeltje tekst: ‘);
  readln(regel);
  writeln;
  writeln;
  kader;
end.

Een aantal opmerkingen zijn hier wel op zijn plaats:
Opmerkingen plaats je tussen accolades ({ }) en worden door de compiler genegeerd. Dit mag over meerdere regels gebeuren.
De procedure horlijn moet duidelijk zijn.
In de procedure kader wordt eerst horlijn aangeroepen, simpelweg door horlijn in te tikken.
Met de functie length([string-variabele]) krijg je de lengte van de [string-variabele].
Met het statement gotoxy([x-pos], [y-pos]), zet je de cursor op de ‘juiste’ plaats neer, waarbij Pascal standaard uitgaat van een scherm van 25 regels bij 80 kolommen.
De functies wherex en wherey geven resp. de huidige x-positie (kolom) en y-positie (regel).
De div-operator bepaalt de gehele deling (dus het gehele deel van een staartdeling).
Nu moet je dit programma kunnen begrijpen.

Variabelen.

In het bovenstaande programma (program p7_1) zijn op verschillende plaatsen variabelen gedeclareerd.
De variabele regel is buiten de deelprogramma’s gedeclareerd en heet een globale variabele. Deze is overal zichtbaar en bruikbaar, dus zowel in het hoofdprogramma alsook in de deelprogramma’s.
De variabelen die in deelprogramma’s worden gedeclareerd (hierboven x en l) heten lokale variabelen en zijn alleen maar zichtbaar en bruikbaar in dat deelprogramma.
Verder geldt dat lokale variabelen een hogere prioriteit hebben als globale variabelen. Kijk maar naar het volgende voorbeeld:

program p7_2;
  var test: integer;

procedure DoeTest;
  var test: integer;
begin
  test := 10;
  writeln(‘DoeTest: test = ‘,test);
end;

begin
  test := 20;
  writeln(‘Hoofdprogramma: test = ‘,test);
  DoeTest;
  writeln(‘Hoofdprogramma: test = ‘,test);
end.

[Lussen] <– –> [Parameters en type-declaratie]