42 lines
1.6 KiB
Text
42 lines
1.6 KiB
Text
begin % suffix number with st, nd, rd or th as appropriate %
|
|
|
|
string(2) procedure ordinalSuffix ( integer value number ) ;
|
|
begin
|
|
integer numberRem100;
|
|
numberRem100 := number rem 100;
|
|
if numberRem100 >= 10 and numberRem100 <= 20 then begin
|
|
% numbers in the range 10 .. 20 always have "th" %
|
|
"th"
|
|
end
|
|
else begin
|
|
% not in the range 10 .. 20, suffix is st, nd, rd or th %
|
|
% depending on the final digit %
|
|
integer numberRem10;
|
|
numberRem10 := number rem 10;
|
|
if numberRem10 = 1 then "st"
|
|
else if numberRem10 = 2 then "nd"
|
|
else if numberRem10 = 3 then "rd"
|
|
else "th"
|
|
end if_numberRem100_in_10_to_20__
|
|
end ordinalSuffix ;
|
|
|
|
% tests ordinalSuffix, displays the suffix for all numbers in from .. to %
|
|
procedure testSuffix ( integer value from, to ) ;
|
|
begin
|
|
integer count;
|
|
count := 0;
|
|
for testValue := from until to do begin
|
|
writeon( i_w := 4, s_w := 0, " ", testValue, ordinalSuffix( testValue ) );
|
|
count := count + 1;
|
|
if count rem 8 = 0 then write()
|
|
end for_testValue ;
|
|
if count rem 8 not = 0 then write();
|
|
write()
|
|
end testSuffix ;
|
|
|
|
begin % task %
|
|
testSuffix( 0, 25 );
|
|
testSuffix( 250, 265 );
|
|
testSuffix( 1000, 1025 )
|
|
end
|
|
end.
|