|
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.
|