Ex
5.1REF INT
Ex
5.2REAL
Ex
5.3INT. Insert ENTIER or
ROUND before the r.
Ex
5.4x when the second
assignment is elaborated.
Ex
5.5
REF REAL.
2.5 with
mode REAL.
Ex
5.61.166666...
Ex
5.7REF[,]REAL.
Ex
5.8
[-2:0], but the bounds of n are [1:3]. The
assignment will cause a run-time error.
m[5,]:=m[,-1], but it
is unlikely that you would get what you wanted because the second
column overlaps the third row. Here is a solution guaranteed to work:-
[]INT temp = m[,-1]; m[5,]:=temp[@-2]
Ex
5.9size
equal to 5000 suffices. You need a counter for the primes. The
complete program is:-
PROGRAM ex5 9 CONTEXT VOID
USE standard
BEGIN
INT size=5000;
REF[]BOOL flags = LOC[2:size]BOOL;
FOR i FROM LWB flags TO UPB flags
DO
flags[i]:=TRUE
OD;
FOR i FROM LWB flags TO UPB flags
DO
IF flags[i]
THEN
FOR k FROM i*2 BY --i TO UPB flags
DO
flags[k]:=FALSE
CO Remove multiples of i CO
OD
FI
OD;
REF INT count = LOC INT:=0;
FOR i FROM LWB flags TO UPB flags
DO
IF flags[i] ANDTH (count+:=1)=365
THEN print(i)
FI
OD
END
FINISH
Ex
5.10
REF FLEX[]CHAR.
Ex
5.11
PROGRAM ex5 11 CONTEXT VOID
USE standard
BEGIN
REF STRING ss = LOC STRING;
FOR c FROM ABS "a" TO ABS "z"
DO
ss:="a"-REPR c; print((ss,newline))
OD
END
FINISH
Ex
5.12
REF FLEX[,]REAL f=
LOC FLEX[1:0,1:0]REAL;
f:=(5.0,10.0,15.0,20.0);
print((1 LWB f,1 UPB f,
2 LWB f,2 UPB f))
Ex
5.13
PROGRAM ex5 13 CONTEXT VOID
USE standard
BEGIN
REF REAL a = LOC REAL,
b = LOC REAL;
print(Enter two real numbers->");
read((a,b,newline));
print(("Their sum is",a+b,newline,
"Their product is",a*b))
END
FINISH
Ex
5.14
PROGRAM ex5 14 CONTEXT VOID
USE standard
BEGIN
REF STRING line = LOC STRING;
DO
read((line,newline));
IF UPB line = 0
THEN stop #terminate the program#
ELSE
FOR i
FROM UPB line BY -1 TO LWB line
DO
print(line[i])
OD;
print(newline)
FI
OD
END
FINISH
Ex
5.15REF[]REAL r= LOC[(REF INT s=LOC INT; read(s); s)]REAL
Ex
5.16
PROGRAM ex5 16 CONTEXT VOID
USE standard
BEGIN
REF INT number=LOC INT;
read(number);
REF[]INT multiple=LOC[number]INT;
read(multiple);
REF INT sum=LOC INT:=0;
FOR i TO number
DO
sum+:=multiple[i]
OD;
print(sum)
END
FINISH
Ex
5.17
PROGRAM ex5 17 CONTEXT VOID
USE standard
BEGIN
REF INT neg = LOC INT:=0,
pos = LOC INT:=0;
WHILE
REF INT i=LOC INT;
read((i.newline));
i /= 0
DO
(i < 0|neg|pos) +:= i
OD;
print(("Sum of negative integers =",
neg,newline,
"Sum of positive integers =",
pos,newline))
END
FINISH
Ex
5.18
PROGRAM ex5 18 CONTEXT VOID
USE standard
BEGIN
REF STRING line = LOC STRING;
WHILE
read((line,newline));
UPB line /= 0
DO
REF INT v=LOC INT:=0;
FOR i TO UPB line
DO
v+:=ABS line[i]*i
OD;
print((line,v,newline))
OD
END
FINISH
Ex
5.19
[100]CHAR rc
FLEX[1:0]INT fi
BOOL b:=TRUE
Ex
5.20
REF INT a=LOC INT, b=LOC INT, c=LOC INT
REF REAL x=LOC REAL;
REF[]CHAR y=LOC[5]CHAR;
REF[,]REAL z=LOC[3,3]REAL
REF FLEX[]CHAR s=LOC FLEX[1:0]CHAR
Ex
5.21REF[]INT m=LOC[1000]INT; [1000]INT m
Ex
5.22
PROGRAM ex5 22 CONTEXT VOID
USE standard
BEGIN
REAL sum:=0.0, salary, INT num:=0;
WHILE read(salary); salary /= -1.00
DO
sum+:=salary; num+:=1
OD;
print(("Average salary=",sum/num))
END
FINISH
Ex
5.23
PROGRAM ex5 23 CONTEXT VOID
USE standard
BEGIN
BOOL in word:=FALSE,
STRING line;
INT line start, line finish;
INT word start, word finish;
read((line,newline));
line start:=LWB line;
line finish:=UPB line;
WHILE line[line start]=blank
&
line start<=UPB line
DO
line start+:=1
OD;
WHILE line[line finish]=blank
&
line finish>=line start
DO
line finish-:=1
OD;
line:=line[line start:line finish]
+blank;
FOR c FROM LWB line
WHILE c <= UPB line
DO
CHAR lc = line[c];
IF lc /= blank & NOT in word
THEN word start:=c; in word:=TRUE
ELIF lc = blank & NOT in word
THEN SKIP
ELIF lc /= blank & in word
THEN SKIP
ELSE #lc = blank & in word#
word finish:=c-1;
in word:=FALSE;
print((line[
word start:word finish],
newline))
FI
OD
END
FINISH
Notice that both word start and word finish are
made to refer to new values before being used. This is a good check
that you are writing the program properly. Notice also that the four
possible states of the compound condition on line 26 are carefully
spelled out on lines 28, 30 and 32.
Sian Mountbatten 2012-01-19