56 lines
1.2 KiB
ObjectPascal
56 lines
1.2 KiB
ObjectPascal
program sortThreeVariables(output);
|
||
|
||
type
|
||
{ this Extended Pascal data type may hold up to 25 `char` values }
|
||
line = string(25);
|
||
|
||
{ this procedure sorts two lines }
|
||
procedure sortLines(var X, Y: line);
|
||
{ nested procedure allocates space for Z only if needed }
|
||
procedure swap;
|
||
var
|
||
Z: line;
|
||
begin
|
||
Z := X;
|
||
X := Y;
|
||
Y := Z
|
||
end;
|
||
begin
|
||
{ for lexical sorting write `if GT(X, Y) then` }
|
||
if X > Y then
|
||
begin
|
||
swap
|
||
end
|
||
end;
|
||
|
||
{ sorts three line variables’s values }
|
||
procedure sortThreeLines(var X, Y, Z: line);
|
||
begin
|
||
{ `var` parameters can be modified at the calling site }
|
||
sortLines(X, Y);
|
||
sortLines(X, Z);
|
||
sortLines(Y, Z)
|
||
end;
|
||
|
||
{ writes given lines on output preceded by `X = `, `Y = ` and `Z = ` }
|
||
procedure printThreeLines(protected X, Y, Z: line);
|
||
begin
|
||
{ `protected` parameters cannot be overwritten }
|
||
writeLn('X = ', X);
|
||
writeLn('Y = ', Y);
|
||
writeLn('Z = ', Z)
|
||
end;
|
||
|
||
{ === MAIN ============================================================= }
|
||
var
|
||
A, B: line;
|
||
{ for demonstration purposes: alternative method to initialize }
|
||
C: line value '(from the "Wizard of OZ")';
|
||
begin
|
||
A := 'lions, tigers, and';
|
||
B := 'bears, oh my!';
|
||
|
||
sortThreeLines(A, B, C);
|
||
printThreeLines(A, B, C)
|
||
end.
|