I would get as far away from global variables as possible look at the following case:
program new;
function DoubleThenAdd(a, b : integer) : integer;
Var
i, x, y : integer;
begin
x := a + a;
y := b + b;
Result := x + y;
end;
procedure DoSomething;
Var
i, x, y : integer;
begin
for i := 0 to 5 do
begin
x := x + 2;
y := y - 1;
WriteLn(DoubleThenAdd(x, y));
end;
end;
begin
DoSomething;
end.
program new;
Var
i, x, y : integer;
function DoubleThenAdd(a, b : integer) : integer;
begin
x := a + a;
y := b + b;
Result := x + y;
end;
procedure DoSomething;
begin
for i := 0 to 5 do
begin
x := x + 2;
y := y - 1;
WriteLn(DoubleThenAdd(x, y));
end;
end;
begin
DoSomething;
end.
They have different outputs just because of global/local vars, a very contrived case but could happen