Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Параметры



Параметры, перед которыми отсутствует зарезервированное слово 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...