Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
osnovy_programmirovanija_v_srede_lazarus.pdf
Скачиваний:
185
Добавлен:
18.03.2015
Размер:
6.53 Mб
Скачать

Глава 3 Более сложные элементы языка

____________________________________________________________________

begin // начало основной программы

{задаем интервал на котором вычисляется интеграл}

a:= 0;

b:= pi/4;

eps:= 1e-5; // заданная точность вычисления интеграла

Simpson(a, b, eps); // вызов процедуры вычисления интеграла writeln(UTF8ToConsole('Нажмите любую клавишу'));

readkey;

end.

3.1.1.4 Способы передачи параметров

Передача параметров по значению

При таком способе передачи параметров в функцию или процедуру пере-

дается копия переменной. Внутри функции или процедуры можно менять зна-

чения переданных параметров, однако в вызывающей программе значения па-

раметров остаются неизменными.

Рассмотрим пример:

program parameters; {$mode objfpc}{$H+} uses

CRT, FileUtil; var

x, y: real; n: integer;

{Объявление процедуры с параметром}

procedure example(x, y: real; n: integer);

begin

x:= 1.5;

155

3.1 Общая структура Паскаль – программы

____________________________________________________________________

y:= 2.8; n:= 10;

end; begin

x:= 1; y:= 1; n:= 1;

writeln('x= ', x:0:2, ' y= ', y:0:2, ' n= ', n); example(x, y, n);

writeln('x= ', x:0:2, ' y= ', y:0:2, ' n= ', n);

writeln(UTF8ToConsole('Нажмите любую клавишу'));

readkey;

end.

Как видите, после вызова процедуры значения переменных x, y, n не изменились.

В предыдущих двух примерах мы использовали передачу параметров по значению.

Передача параметров по ссылке

Другая ситуация при передаче параметров по ссылке. В этом случае изме-

нение параметра внутри функции (процедуры) влечет за собой и изменение значения переменной в вызывающей программе. Для передачи параметра по ссылке нужно перед именем параметра в заголовке указать ключевое слово var. Рассмотрим предыдущий пример, но передадим параметры x и n по ссыл-

ке.

program parameters;

{$mode objfpc}{$H+}

uses

156

Глава 3 Более сложные элементы языка

____________________________________________________________________

CRT, FileUtil;

var

x, y: real;

n: integer;

{Объявление процедуры с параметром}

procedure example(var x: real; y: real; var n: integer); begin

x:= 1.5; y:= 2.8; n:= 10;

end; begin

x:= 1; y:= 1; n:= 1;

writeln('x= ', x:0:2, ' y= ', y:0:2, ' n= ', n); example(x, y, n);

writeln('x= ', x:0:2, ' y= ', y:0:2, ' n= ', n);

writeln(UTF8ToConsole('Нажмите любую клавишу'));

readkey;

end.

Здесь уже значения переменных x и n изменились!

Передача параметров-констант

Если при передаче параметров по значению внутри функции (процедуры)

их значения можно изменять, то при передаче параметров как констант внутри функции или процедуры их вообще невозможно изменить. При попытке их из-

157

3.1 Общая структура Паскаль – программы

____________________________________________________________________

менения компилятор выдаст ошибку. Для передачи параметра как константы нужно перед именем параметра задать ключевое слово const.

program parameters; {$mode objfpc}{$H+} uses

CRT, FileUtil; var

x, y: real; n: integer;

{Объявление процедуры с параметром}

procedure example(var x: real; y: real;

const n: integer);

begin

x:= 1.5;

y:= 2.8;

{Попытка изменить параметр-константу}

//n:= 10; // здесь, если убрать комментарий, компилятор укажет на ошибку end;

begin x:= 1; y:= 1; n:= 1;

writeln('x= ', x:0:2, ' y= ', y:0:2, ' n= ', n); example(x, y, n);

writeln('x= ', x:0:2, ' y= ', y:0:2, ' n= ', n);

writeln(UTF8ToConsole('Нажмите любую клавишу'));

readkey;

end.

158

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]