REF INT
REAL
INT
. Insert ENTIER
or
ROUND
before the r
.
x
when the second
assignment is elaborated.
REF REAL
.
2.5
with
mode REAL
.
1.166666
...
REF[,]REAL
.
[-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]
size
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
REF FLEX[]CHAR
.
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
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))
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
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
REF[]REAL r= LOC[(REF INT s=LOC INT; read(s); s)]REAL
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
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
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
[100]CHAR rc
FLEX[1:0]INT fi
BOOL b:=TRUE
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
REF[]INT m=LOC[1000]INT;
[1000]INT m
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
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 FINISHNotice 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