Informaticasite van het Lauwers College te Buitenpost                 © R.J. van der Beek
 
  Antwoorden hoofdstuk 6      


1a.
PROGRAM Kwadraat;                                  
   VAR getal, kwadraat : REAL;                   
   BEGIN                                           
      WRITE('Typ een getal: ');
      READLN(getal);      
      kwadraat =: getal * getal;
      writeln('Het kwadraat van het getal is ', kwadraat); 
      READLN;      
   END.  
b.
PROGRAM Kwadraat;                                  
   VAR getal, wortel : REAL;                   
   BEGIN 
      WRITE('Typ een getal: ');
      READLN(getal);      
      wortel =: sqrt(getal);
      writeln('De wortel van het getal is ', wortel); 
      READLN;      
   END.  


2.
PROGRAM opg2;                                  
   VAR r, omtrek, opp : REAL;                   
   BEGIN                                              
      WRITE('Geef de straal van een cirkel: ');
      READLN(r);      
      omtrek:=3.14 * 2 * r;
      opp:=3.14 * r * r;
      writeln('De omtrek is ', omtrek:6:2); 
      writeln('De oppervlakte is ', opp:6:2); 
      READLN;      
   END.
N.B. WRITE(omtrek:6:2) heeft tot gevolg dat er voor het afdrukken van omtrek 6 tekens worden gebruikt, waarvan 2 achter de komma.

WRITE(omtrek:0:2) heeft tot gevolg dat er voor het afdrukken van omtrek net zo veel tekens worden gebruikt als nodig is, waarvan 2 achter de komma.


3a.
PROGRAM opgE2;                               
   VAR r, omtrek, opp : REAL;                   
   BEGIN                                              
      WRITE('Geef een aantal seconden (onder de 32000): ');
      READLN(sec);      
      uren:=sec DIV 3600;
      sec:= sec - uren*3600;
      (of  sec := sec MOD 3600 )
      minuten:=sec DIV 60;
      sec:= sec - minuten*60;
      (of  sec := sec MOD 60 )
      write('Dat is ', uren, ' uren ');
      write(minuten, ' minuten ');
      writeln('en ', sec, ' seconden');
      READLN;      
   END. 


4a.
PROGRAM opg4;
    VAR  getal : INTEGER;
    BEGIN
       CLRSCR;
       WRITELN('Geef een positief getal ');
       READLN(getal);
       IF ( (getal MOD 3) = 0 ) THEN
          WRITELN('Dit getal is deelbaar door 3')
       ELSE
          WRITELN('Dit getal is niet deelbaar door 3');
    END.


5a.
PROGRAM opg5;
    VAR  g : INTEGER;
    BEGIN
       CLRSCR;
       RANDOMIZE;
       g:=RANDOM(6)+1;
       IF (g=6) then 
           WRITELN('Hoera je hebt een zes gegooid')
       ELSE
       	   WRITELN('Jammer, het was geen zes');
    END.


6a.
PROGRAM opg6;
    VAR  w : STRING;
    BEGIN
       CLRSCR;
       WRITE('Wat is stoel in het frans ? ');
       READLN(w);
       IF ( w='chaise') THEN
          WRITELN('Goedzo!')
       ELSE
          WRITELN('Fout sukkel!');
    END.


7a.
PROGRAM Minimum;                                  
   VAR getal1, getal2, getal3, getal4, kleinste : REAL;                   
   BEGIN 
      { inlezen van 4 getallen }
      READLN(getal1); READLN(getal2); READLN(getal3); READLN(getal4);       
      { bepalen van het minimum }
      IF (getal1 < getal2) THEN kleinste := getal1 ELSE kleinste := getal2;
      IF (getal3 < kleinste) THEN kleinste := getal3 ;
      IF (getal4 < kleinste) THEN kleinste := getal4 ;
      { afdrukken minimum }
      WRITELN('Het minimum is ', kleinste); 
      READLN;      
   END.  
b.
PROGRAM Minimum;                                  
  VAR getal1, getal2, getal3, getal4, getal5, kleinste : REAL;                   
  BEGIN 
    { inlezen van 5 getallen }
    READLN(getal1);READLN(getal2);READLN(getal3);READLN(getal4);READLN(getal5);      
    { bepalen van het minimum }
    IF (getal1 < getal2) THEN kleinste := getal1 ELSE kleinste := getal2;
    IF (getal3 < kleinste) THEN kleinste := getal3 ;
    IF (getal4 < kleinste) THEN kleinste := getal4 ;
    IF (getal5 < kleinste) THEN kleinste := getal5 ;
    { afdrukken minimum }
    WRITELN('Het minimum is ', kleinste); 
    READLN;      
  END.  
c.
PROGRAM Maximum;                                  
  VAR getal1, getal2, getal3, getal4, getal5, grootste : REAL;                   
  BEGIN 
    { inlezen van 5 getallen }
    READLN(getal1);READLN(getal2);READLN(getal3);READLN(getal4);READLN(getal5);      
    { bepalen van het maximum }
    IF (getal1 > getal2) THEN grootste := getal1 ELSE kleinste := getal2;
    IF (getal3 > grootste) THEN grootste := getal3 ;
    IF (getal4 > grootste) THEN grootste := getal4 ;
    IF (getal5 > grootste) THEN grootste := getal5 ;
    { afdrukken maximum }
    WRITELN('Het maximum is ', grootste); 
    READLN;      
  END.  


8a.
PROGRAM opg8a;                                      
   VAR i:integer;                                           
   BEGIN                                                    
       CLRSCR;                                                  
       FOR I:=1 TO 30 DO WRITELN('Piet de Boer'); 
   END.  
b.
PROGRAM opg8b;                                      
   VAR i:integer;                                           
   BEGIN                                                    
       CLRSCR;                                                  
       FOR I:=1 TO 30 DO WRITE('Piet de Boer'); 
   END.    


9a.
PROGRAM opg9a;
   VAR  i : INTEGER;
   BEGIN
      CLRSCR;
      FOR i:=1 TO 10 DO
         WRITELN(i, 'x', '13 = ', 13*i);
   END.
b.   
PROGRAM opg9b;
   VAR  i , g : INTEGER;
   BEGIN
      CLRSCR;
      WRITE('Van welk getal wil je de tafel zien ? ');
      READLN(g);
      FOR i:=1 TO 10 DO
         WRITELN(i, 'x', g , ' = ', i*g);
   END.
c.   
PROGRAM opg9c;
   VAR  i , g : INTEGER;
   BEGIN
      CLRSCR;
      WRITE('Van welk getal wil je de omkeertafel zien ? ');
      READLN(g);
      FOR i:=10 DOWNTO 1 DO
         WRITELN(i, 'x', g , ' = ', i*g);
   END.


10a.
PROGRAM opg10;
    VAR  i, g, aantal : INTEGER;
    BEGIN
       CLRSCR;
       aantal:=0;
       RANDOMIZE;
       FOR i:=1 TO 600 DO
       BEGIN
          g:=RANDOM(6)+1;
          IF (g=5) then aantal:=aantal+1;
       END;
       WRITELN('Het aantal vijven was ', aantal);
    END.


11a.
PROGRAM opg11;
    VAR  i, g, max : INTEGER;
    BEGIN
       CLRSCR;
       WRITELN('Geef een positief getal ');
       READLN(g);
       max:=g;
       FOR i:=2 TO 10 DO
       BEGIN
          WRITELN('Geef een positief getal ');
          READLN(g);
          IF (g>max) then max:=g;
       END;
       WRITELN('Het grootste getal was ', max);
    END.


12a.
PROGRAM opg12;
    VAR  i, g, max, hoeveelste : INTEGER;
    BEGIN
       CLRSCR;
       max:=0; g:=1; i:=0;
       WHILE (g>0) DO
       BEGIN
          WRITELN('Geef een positief getal (0=stoppen) ');
          i:=i+1;
          READLN(g);
          IF (g>max) then 
          BEGIN max:=g;
                hoeveelste:=i;
          END;
       END;
       WRITELN('Het grootste getal was ', max);
       WRITELN('Dat was getal nummer ', hoeveelste);
    END.


13a. Door de opdrachten a:=7; b:=8; c:=9; d:=10; krijgt a de waarde 7, b de waarde 8, c de waarde 9 en d de waarde 10
Door de opdracht b:=a+c; krijgt b de waarde 16
Door de opdracht c:=c+d; krijgt c de waarde 19
Door de opdracht IF (a<10) THEN d:=20 ELSE d:=30; krijgt d de waarde 20, want a heeft de waarde 7 en is dus kleiner dan 10
Door de opdracht FOR I:=1 TO 3 DO c:=c+i; wordt de opdracht c:c+i; drie keer herhaald.
De eerste keer krijgt c de waarde 19+1, dus 20
De tweede keer krijgt c de waarde 20+2, dus 22
De derde keer krijgt c de waarde 22+3, dus 25
Uiteindelijk heeft a de waarde 7, b de waarde 16, c de waarde 25 en d de waarde 20
En die waarden worden afgedrukt.
b. Toegevoegd moet worden:
VAR a, b, c, d, i : INTEGER;


14a.
PROGRAM opg14a;
   VAR  i : INTEGER;
        g : ARRAY[1..10] OF INTEGER;
   BEGIN
      CLRSCR;
      FOR i:=1 TO 10 DO
      BEGIN
         WRITE('Geef getal nr. ',i:2, ' ');
         READLN(g[i]);
      END;
      WRITELN;WRITELN('In omgekeerde volgorde:');
      FOR i:=10 DOWNTO 1 DO
         WRITELN(g[i]);
   END.


15a.
PROGRAM opg15a;
VAR aantalgoed, i: integer;

PROCEDURE geefsom(VAR ag:integer);
VAR g1,g2,antwoord: INTEGER;  
BEGIN                                                                  
      g1:=RANDOM(5)+5;
      g2:=RANDOM(5)+5;                   
      WRITE(g1:2,'x',g2:2,' = ');
      READLN(antwoord);             
      IF (antwoord=g1*g2) THEN 
      BEGIN 
         WRITELN('Goed');           
         ag:=ag+1;                   
      END                                            
      ELSE
      BEGIN 
         WRITELN('Fout');                                                      
      END;                                                   
END;    
                                                                    
BEGIN                                                      
   CLRSCR;       
   RANDOMIZE;
   aantalgoed:=0;                              
   FOR i:=1 TO 10 DO                                      
   BEGIN 
      geefsom(aantalgoed);                               
   END;                                                   
   WRITELN;                                               
   WRITELN('Je had er ',aantalgoed:2,' goed');
END.


16a. Een hogere programmeertaal is een programmeertaal waarin je de opdrachten m.b.v. begrijpelijke (meestal engelse) termen kunt geven.
Voorbeelden: Pascal, Basic, Java
b. Het vertalen van de opdrachten, gegeven m.b.v. een hogere programmeertaal, in machinetaal
c. Machinetaal bestaat uit opdrachten die de processor rechtstreeks uit kan voeren, geschreven met enen en nullen (of hexadecimaal)
d. Assembler is hetzelfde als machinetaal, maar de opdrachten worden dan niet met nullen en enen (of hexadecimaal) geschreven, maar voor elke opdracht wordt een afkorting gebruikt
Die afkortingen worden wel mnemonics genoemd
e. een syntactische fout
f. aantal := aantal + 1;
g. VAR aantal: integer;
h. VAR w: string;
i. Een boolese variabele is een variabele die alleen de waarden TRUE en FALSE kan hebben (dus waar en niet waar)
j. Een globale variabele wordt in de kop van het hoofdprogramma gedeclareerd, en kan overal in het programma gebruikt worden, ook in procedures.
Een lokale variabele wordt in de kop van een procedure gedeclareerd, en kan alleen in die procedure gebruikt worden.
k. Een samengestelde opdracht bestaat uit een aantal opdrachten tussen begin en end.
Die groep wordt bijvoorbeeld herhaald, zodat duidelijk is welke opdrachten herhaald moeten worden.
l.
  • Bijvoorbeeld: for i=1 to 10 do
    Dit gebruik je als je precies weet hoe vaak het herhaald moet worden.
  • while ..... do
    Dit gebruik je als je niet precies weet hoe vaak het herhaald moet worden, maar wel onder welke voorwaarde.
    Die voorwaarde wordt vooraf gecontroleerd.
  • repeat ..... until
    Dit gebruik je als je niet precies weet hoe vaak het herhaald moet worden, maar wel onder welke voorwaarde.
    Die voorwaarde wordt achteraf gecontroleerd.
m. call by value: de waarde wordt aan de procedure doorgegeven, maar als de waarde in de procedure verandert dan is die veranderde waarde niet bekend in het programma als de procedure is afgelopen.
call by reference: wordt aan de procedure doorgegeven, en als de waarde in de procedure verandert dan is die veranderde waarde ook bekend in het programma als de procedure is afgelopen.
Hij moet gedeclareerd worden tussen de haakjes achter de procedurenaam, met het woordje VAR er voor


17a.
PROGRAM opg17a; 
VAR woord,bn:STRING;
    {declaratie van de file:}
    f:TEXT; 
BEGIN 
CLRSCR; 
{ denk er om dat het pad naar het bestand er bij moet
  dat zal bij jou waarschijnlijk een andere map zijn}
bn:="D:\informaticasite\gedicht.txt";
{het bestand met de ingevoerde naam wordt opgezocht}
ASSIGN(f,bn); 
{de leeswijzer wordt aan het begin van het bestand gezet}
RESET(f);
REPEAT 
   READLN(f,woord); 
   WRITELN(woord); 
   {dit wordt herhaald net zolang tot het einde bereikt is} 
UNTIL (EOF(f));
{het bestand wordt afgesloten}
CLOSE(f); 
end.
b.
PROGRAM opg17b; 
VAR bn, naam, adres, plaats : STRING;
    {declaratie van de file:}
    f:TEXT; 
BEGIN 
	CLRSCR;
	WRITE("Geef je naam    ");
	READLN(naam);
	WRITE("Geef je adres    ");
	READLN(adres);
	WRITE("Geef je woonplaats    ");
	READLN(plaats);
	{ het pad van de gegevens moet er bij
	Bij jou is dat waarschijnlijk een andere map }
	bn := "D:\informaticasite\gegevens.txt";
	ASSIGN(f,bn); 
	{de schrijfwijzer wordt aan het begin van het bestand gezet}
	REWRITE(f);
	WRITELN(f,naam); 
	WRITELN(f,adres);
	WRITELN(f,plaats);
	CLOSE(f); 
end.


18a.
program opg18a;

var aantal: integer;
   getallen: array [1..10] of integer;

procedure invoeren;
var i, g: integer;
begin
   for i:=1 to 10 do
   begin
      write("Geef getal nummer ",i:2,"        ");
      readln(g);
      getallen[i]:=g;
   end;
end;

procedure verwissel(var a:integer; var b:integer);
var hulp: integer;
begin
   hulp:=a;
   a:=b;
   b:=hulp;
end;

procedure maakdoorloop(var ietsverwisseld:boolean);
var i: integer;
begin
   ietsverwisseld:=false;
   for i:=10 downto 2 do
   begin
      if (getallen[i-1]>getallen[i] ) then
      begin
         verwissel(getallen[i-1],getallen[i]);
         ietsverwisseld:=true;
      end;
   end;
end;

procedure sorteer;
var ietsverwisseld: boolean;
begin
	repeat
	   maakdoorloop(ietsverwisseld)
	until (ietsverwisseld=false);
end;

procedure drukaf;
var i:integer;
begin
   writeln;writeln;writeln("de gesorteerde lijst:");
   for i:=1 to 10 do
   writeln(getallen[i]);
end;


begin
   invoeren;
   sorteer;
   drukaf;
end.
b.
program opg18b;

var getallen: array [1..10] of integer;

procedure invoeren;
var i, g: integer;
begin
   for i:=1 to 10 do
   begin
      write("Geef getal nummer ",i:2,"        ");
      readln(g);
      getallen[i]:=g;
   end;
end;

procedure verwissel(var a:integer; var b:integer);
var hulp: integer;
begin
   hulp:=a;
   a:=b;
   b:=hulp;
end;

procedure zoekkleinste(teller:integer; var nummerkleinste: integer);
var i,kleinste: integer;
begin
   kleinste:=getallen[teller];
   nummerkleinste:=teller;
   for i:=teller to 10 do
   begin
      if (getallen[i]<=kleinste ) then
      begin
         kleinste:=getallen[i];
         nummerkleinste:=i;
      end;
   end;
end;

procedure sorteer;
var i, nummerkleinste: integer;
begin
for i:=1 to 9 do
   begin
      zoekkleinste(i,nummerkleinste);
      verwissel(getallen[i],getallen[nummerkleinste]);
   end;
end;

procedure drukaf;
var i:integer;
begin
   writeln;writeln;writeln("de gesorteerde lijst:");
   for i:=1 to 10 do
   writeln(getallen[i]);
end;


begin
   invoeren;
   sorteer;
   drukaf;
end.