Var a,b:integer;
function f(x:integer):integer;
begin f:=x; a:=0 end;
function g(var x:integer):integer;
begin g:=x; x:=0 end;
{ ********* main program ********** }
begin
ClrScr;
a:=1; writeln(' 1) ',a+f(a));
writeln(' 2) ',f(a)+a);
b:=2; writeln(' 3) ',g(b)=g(b))
end.
Пример 4.
program exzampl4;
var c:char;
procedure p(x,y:char);
begin
y:=succ(x)
end;
procedure q(x:char;var y:char);
begin
y:=succ(x)
end;
{ ********** main program *********** }
begin
c:='+'; p('2',c);
writeln(' 1) ',c);
c:='+'; q('2',c);
writeln(' 20 ',c)
end.
Пример 5.
program exzampl5;
var a,b,c:integer;
procedure p(var x,y:integer);
var c:integer;
begin
c:=x; x:=y; y:=c
end;
procedure q(var x,y:integer);
begin
c:=x; x:=y; y:=c
end;
{ ********** main program ************ }
begin
a:=1; b:=2; c:=3;
p(a,b); writeln('a=',a,' b=',b,' c=',c);
a:=1; b:=2; c:=3;
q(a,b); writeln('a=',a,' b=',b,' c=',c);
end.
Пример 6.
program exzampl6;
var a:integer;
function f(x:real):real;
begin
f:=x;
if x<0 then f:=f+1
end;
procedure p(var x,y:real);
begin
x:=x*y
end;
{ ********** main program ************* }
begin
p(a,f(-7)); writeln('a=',a)
end.
Пример использования подпрограммы ввода двумерных массивов из различных файлов.
Пусть заданы две матрицы A(2x3) и B(3x3):
Для начала следует создать два файла a.pas и b.pas, в которые записать коэффициенты матриц A и B соответственно.
Программа ввода из массивов из файла может быть записана следующим образом:
uses crt;
type matr=array[1..3,1..3] of integer;
Var a,b:matr;
i,j:byte;
procedure input(var c:matr; m,n:byte; f:string);
var i,j:byte;
t:text;
begin
assign(t,f);
reset(t);
for i:=1 to m do
for j:=1 to n do read(t,c[i,j]);
close(t)
end;
begin
clrscr;
input(a,2,3,'a.pas');
input(b,3,3,'b.pas');
for i:=1 to 2 do begin
for j:=1 to 3 do write(' ',a[i,j]);
writeln
end;
writeln;
for i:=1 to 3 do begin
for j:=1 to 3 do write(' ',b[i,j]);
writeln
end;
end.
Рассмотрим пример, когда исходные одномерные массивы различной длины определяются как типизированные константы, а затем их надо обработать одной функцией или процедурой.
Задание:
В массивах A(8) и B(5) найти произведение элементов. элементы массива, где это произведение окажется меньше – увеличить в два раза.
uses crt;
const a:array[1..8] of real=(-2.3,4.2,-1.5,5.7,0.8,6.1,3.5,9.7);
b:array[1..5] of real=(10.3,7.2,0.04,-3.6,-4.1);
Var I:byte;
function mult(c:array of real):real;
Var I:byte; p:real;
begin
p:=1;
for i:=low(c) to high(c) do p:=p*c[i];
mult:=p
end;
begin
clrscr;
if mult(a)<mult(b) then begin writeln('massiv A');
for i:=1 to 8 do begin
a[i]:=a[i]*2;
write(' ',a[i]:5:1)
end
end
else begin writeln('massiv B');
for i:=1 to 5 do begin
b[i]:=b[i]*2;
write(' ',b[i]:5:1)
end
end
end.
ответ