Class09':


1. Определить, что будет выдано на печать:
type натур=1..maxint;
var m,n:натур;
function Н О Д (a,b : натур) : натур;
begin while a<>b do
if a>b then a:=a-b
else b:=b-a;
Н О Д :=a
end;
begin
m:=8; n:=6;
writeln(Н О Д(m,n), m, n);
end.

2. Что будет напечатано программой:
var c,d: integer;
procedure РАЗ (x,y:integer);
begin y:=x+1 end;
procedure ДВА(x:integer; var y:integer);
begin y:=x+1 end;
procedure ТРИ(var x,y:integer);
begin y:=x+1 end;
begin
c:=2; d:=0; РАЗ (sqr(c)+c,d); writeln(d);
c:=2; d:=0; ДВА (sqr(c)+c,d); writeln(d);
end.

a) Почему при изменинии в процедуре параметра-значения фактический параметр не меняет своего значения? Что надо сделать, чтобы он поменял значение? b) Допустимы ли обращения ТРИ(sqr(c)+c,d) и ТРИ(c,d)? Почему не выгодно объявлять параметр, не меняющийся в процедуре, параметром-переменной?

3. Пусть функция F(x) имеет вид:
Function F(x:real):real; begin v:=v*x; F:=sqr(v)+x end;
Какие результаты будут принимать два выражения F(x)+v и v+F(x).

4. Что будет напечатано программой?
а) программа ПЕЧАТЬ(результат);
var x,y:char;
процедура РАЗ(x:integer);
const y=true;
begin writeln(x,' ',y) end;
процедура ДВА;
var x:char;
begin x:=succ(y); y:='*'; writeln(x,' ',y) end;
begin x:='a'; y:='5';
РАЗ(8); writeln(x,' ',y);
ДВА; writeln(x,' ',y)
end.

b) программа ПЕЧАТЬ(результат);
var a,b,c,d:integer;
процедура РАЗ(var b:integer; c:integer);
var d: integer;
begin a:=5; b:=6; c:=7; d:=8;
writeln(a,b,c,d) end;
begin a:=1; b:=6; c:=3; d:=4;
РАЗ(a,b); writeln(a,b,c,d);
end.

5. type неотриц=0..maxint;
Найти значение: n!*m!/(n+m)!, где n и m - неотрицательные целые числа, использовать функцию вычисления факториала.