Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл: Источник:
Скачиваний:
313
Добавлен:
04.03.2014
Размер:
154.11 Кб
Скачать

10 Параметры процедурного типа. Примеры использования.

Описатель типов:

Пример использования процедурного типа:

UnitUnit1;

interface

type tf=function(x:Real):Real;

Function Integral(F:tf; a,b:Real; N:Integer):Real;

implementation

Function Integral(F:tf; a,b:Real; N:Integer):Real;

var

i:Integer;

x,h:Real;

begin

Result:=0;

h:=(b-a)/N;

for I := 1 to N do

begin

Result:=Result+f(x);

x:=a+h*(i-1);

end;

end;

end.

Program Project2;

{$APPTYPE CONSOLE}

uses

SysUtils, Math,

Unit1 in 'Unit1.pas';

function SinX(x:Real):Real;

begin

SinX:=sin(x);

end;

function ExCos(x:Real):Real;

begin

Result:=Exp(-x)*cos(x);

end;

var

a,b:Real;

N:Integer;

BEGIN

Write(Rus('Введите a,b,N: '));

ReadLn(a,b,N);

WriteLn(Rus('Интеграл от Sin(x) на интервале ['),0,',',Pi:0:2,']=',Integral(SinX,0,Pi,N):5:4);

WriteLn(Rus('Интеграл от e^(-x)*cos(x) на интервале ['),a:0:1,',',b:0:1,']=',Integral(ExCos,a,b,N):5:4);

ReadLn;

END.

11 Локальные и глобальные переменные. Процедуры без параметров. Побочные эффекты. Примеры.

В соответствии с правилами языка Паскаль имя любой переменной должно быть предварительно описано, прежде чем оно будет использовано в разделе операторов. Наряду с программой раздел описаний присутствует и в подпрограмме. Одно и то же имя переменной, таким образом, может встретиться в обоих разделах описаний: и в программе, и в подпрограмме.

Переменные, описанные в подпрограмме, являются локальными, их область действия ограничивается только этой подпрограммой. Локальными могут быть и переменные, описанные в основной программе, в том случае, если они вновь описаны в подпрограмме. В этом случае это уже будут совершенно разные переменные.

Переменные, описанные в основной программе, но не описанные еще раз в подпрограмме, называют глобальными. В этом случае они доступны и в подпрограмме, т.е. их область действия не ограничена только основной программой (область их действия глобальна). Использование глобальных переменных позволяет разрабатывать и использовать подпрограммы без параметров. Приведем пример организации программы с подпрограммой без параметров.

Подпрограмма определяет в целочисленной матрице количество элементов, нацело делящихся на заданной число, и формирует из этих чисел одномерный массив.

  1. program proc2;

  2. {$APPTYPE CONSOLE}

  3. uses

  4. SysUtils;

  5. const mm=12; nn=9;

  6. type matr=array[1..mm,1..nn] of integer;

  7. mas=array[1..mm*nn] of integer;

  8. var a:matr; b:mas;

  9. i,j,m,n,k,l:integer;

  10. procedure celdel;

  11. var i,j:integer;

  12. begin

  13. k:=0;

  14. for i:=1 to m do

  15. for j:=1 to n do

  16. if a[i,j] mod l =0 then

  17. begin

  18. k:=k+1;

  19. b[k]:=a[i,j];

  20. end;

  21. end;

  22. begin

  23. writeln(Rus('Введите количество строк и столбцов матрицы m,n'));

  24. readln(m,n);

  25. writeln(Rus('Введите матрицу по строкам'));

  26. for i:=1 to m do

  27. begin

  28. for j:=1 to n do

  29. read(a[i,j]);

  30. readln;

  31. end;

  32. writeln(Rus('Введите делитель'));

  33. readln(l);

  34. celdel;

  35. writeln(Rus('Исходная матрица'));

  36. for i:=1 to m do

  37. begin

  38. for j:=1 to n do

  39. write(a[i,j]:4);

  40. writeln;

  41. end;

  42. if k=0 then writeln(Rus('Нет элементов, нацело делящихся на '),l)

  43. else

  44. begin

  45. writeln(Rus('Полученный массив'));

  46. for i:=1 to k do

  47. write(b[i]:4);

  48. end;

  49. readln;

  50. end.

В приведенном примере обмен данными между программой и подпрограммой производится благодаря глобальным переменным a,b,m,n,k,l.

Подпрограммы без параметров практически никогда не используются, так как неявная передача данных в подпрограмму и обратно приводит к большому количеству ошибок, которые трудно выявить и локализовать.

Использование глобальных переменных может приводить к появлению побочных эффектов. Побочными эффектами называют получение неверного результата, связанного с изменением (перевычислением) значения глобальной переменной в подпрограмме.

Соседние файлы в папке экзамен