Als ik het goed begrijp moet het een spelletje worden waarin kinderen sommen moeten oplossen; en je wil geloof ik weten hoe je kan opslaan wat voor soort sommen je wilt maken, en hoe je daar later mee kan rekenen.
Het probleem is dat Pascal geen functie heeft om een expressie in een string te evalueren, dus dat zul je (helaasch) zelf moeten maken. Je kan het naar smaak object-georienteerd doen (elke operator wordt dan een object), of je kan het met een jump-table doen.
Eenvoudig (niet erg net) voorbeeld:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
| function RandomOp : char;
begin
case Random(4) of
0 : Result := '+';
1 : Result := '-';
2 : Result := '*';
3 : Result := '/';
else Result := '/';
end;
end;
function PlusFunction(a, b : Real) : Real;
begin
Result := a + b;
end;
function MinusFunction(a, b : Real) : Real;
begin
Result := a - b;
end;
function TimesFunction(a, b : Real) : Real;
begin
Result := a * b;
end;
function DivFunction(a, b : Real) : Real;
begin
Result := a / b;
end;
type
TCalcFunction = function(a, b : Real) : Real;
var
Jumps : Array[char] of TCalcFunction;
Input : String;
DesiredOp : Char;
a, b, c : Real;
Guess : Real;
begin
Randomize;
FillChar(Jumps, 0, SizeOf(Jumps));
Jumps['+'] := @PlusFunction;
Jumps['-'] := @MinusFunction;
Jumps['*'] := @TimesFunction;
Jumps['/'] := @DivFunction;
repeat
WriteLn('Wat voor soort sommen wil je? +, -, *, / of leeg voor willekeurig');
ReadLn(Input);
If Length(Input) > 0 then
DesiredOp := Input[1]
else
DesiredOp := RandomOp;
until DesiredOp in ['+', '-', '*', '/'];
a := Random(100);
b := Random(100);
c := Jumps[DesiredOp](a, b);
WriteLn('Hoeveel is', a, DesiredOp, b, '?');
ReadLn(Guess);
If Guess = c then
WriteLn('Goed!')
else
WriteLn('Fout! Het goede antwoord was', c);
end. |
Deze code werkt alleen als je Delphi gebruikt (Turbo Pascal 7.0 misschien ook, weet ik niet zeker). Zoniet, dan moet je in de functies Result := vervangen door <FunctieNaam> :=.
Verder is de I/O niet echt top geregeld; ik weet niet zeker of het mogelijk is om Reals zo te ReadLn'en namelijk. Maar het illustreert het idee.