Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Параметры, перед которыми отсутствует зарезервированное слово var и за которыми следует тип, называются параметрами-значениями. Например, в описании
procedure korrect (s, к: real; x: integer);
s, k, x –параметры-значения. Фактический параметр, соответствующий параметру-значению, может быть выражением соответствующего типа, например:
korrect (2.5, (х + 2)/5, 1);
Изменение формальных параметров-значений не влияет на значения соответствующих фактических параметров.
Параметры, перед которыми следует ключевое слово var и за которым следует тип, называются параметрами-переменными. Например, в описании
procedure obr(var s, k: real; var x: integer);
s, k, x – параметры-переменные. Фактический параметр, соответствующий параметру-переменной, может быть только переменной, например:
obr(a, b, k);
где а, b – переменные вещественного типа, а k –целого типа.
Любые изменения в значении формального параметра-переменной отражаются на фактическом параметре.
Параметр-переменная используется в том случае, если значение должно быть передано из процедуры в вызывающий блок.
Пример. Решить два квадратных уравнения и ,
считая, что его дискриминант неотрицателен.
program primer1;
uses crt;
var y 1, y 2, z l, z 2: real;
{текст процедуры для нахождения корней квадратного уравнения }
procedure sq(a, b, с: real; var x l, x 2: real);
var d: real;
begin
d:= b * b – 4* a * c;
x 1:=(– b + sqrt(d))/(2* a);
х 2:= ( – b – sqrt(d))/(2* a);
end;
{операторы основной программы}
begin clrscr;
sq(5.7, –1.2, –8.3, y 1, y 2);
sq(2.4, 3.4, –8.4, z l, z 2);
writeln(¢корни y 1, y 2 =¢, y l: 6: 2, y 2: 6: 2);
writeln(¢корни z l, z 2 =¢, z l: 6: 2, z 2: 6: 2);
readkey
end.
Если в процедуру необходимо передать массив, то в этом случае фактическим параметром является имя массива. Обратим внимание на то, что в заголовке процедуры для указания типов формальных параметров могут использоваться только имена типов.
Нельзя (!) записать так:
procedure sum(a: array[l..5] of real; var s: real);
Как же написать одну процедуру для обработки двух массивов одного типа, имеющих разное число элементов?
Пример. Вычислить z = (s + к) * (s 1+ k 1), где s, k – сумма и количество отрицательных элементов a (10), s 1, k 1 – сумма и количество отрицательных элементов массива b (8).
program primer 2;
uses crt;
type vect = array [1..10] of real;
{Значение верхней границы индекса равно максимальному числу элементов двух массивов а, b }
var а, b: vect; i, k, k 1: integer; s, s 1: real;
{Процедура для фиктивного массива х с числом элементов п, где п <= 10 вычисляет сумму (sum) и количество (col) отрицательных элементов}
procedure sumcol (x:vect; n:integer; var sum:real;
var col:integer);
var i:integer;
begin sum:= 0; col:= 0;
for i:=1 to n do
if x [ i ]< 0 then
begin sum:= sum + x [ i ];
соl:= соl + 1;
end
end;
begin clrscr;
writeln(¢ввeдитe массив а(10)¢);
for i:= 1to 10 do read(a[ i ]);
writeln(¢введите массив b (8)¢);
for i:= 1 to 8 do read(b [ i ]);
{в процедуру передается массив а длиной 10}
sumcol(a, 10, s, к);
{в процедуру передается массив b длиной 8}
sumcol(b, 8, s l, k 1);
z:= (s + k)*(s l + k l);
writeln(¢z=¢, z: 6: 2);
readkey
end.
Такой подход можно применить и для двумерных массивов.
Дата публикования: 2014-11-28; Прочитано: 222 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!