Лабораторная работа 6

Процедуры и функции

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

Процедуры

Объявление процедуры начинается с ключевого слова ~procedure~, за которым следуют имя процедуры и список формальных параметров. Список параметров с указанием их типов заключается в круглые скобки. Перед параметрами, с помощью которых в вызывающую программу возвращается результат работы процедуры, ставится слово VAR. После строки с именем процедуры следует тело процедуры, содержащее раздел описаний процедцры и раздел исполняемых операторов процедуры.

program Lab6;

{ Объявление процедуры с именем pifagor }
procedure pifagor(a, b: real; var c: real);
begin
  c:=sqrt(a*a+b*b);  
end;

{ Объявление переменных главной программы }
var
  a, b, c : real;

{ Основная программа }
begin
  write('Введите длину катета a = '); readln(a);
  write('Введите длину катета b = '); readln(b);

  { Вызов процедуры. В третий параметр (с) записывается значение переменной c, вычисляемый внутри процедуры }
  pifagor(a,b,c);

  writeln('c = ', c:5:2);

end.

Функции

Функции - это подпрограмма, результатом работы которой является некоторое значение, подобное переменной. Функция, как и процедура, может иметь список параметров, следующих за именем функции в круглых скобках. Но если имя процедуры используется только для ее вызова, то с именем функции связывается ее значение. Для этого в теле любой функци нужно осуществить присваивание ей (её имени) вычисленного значения.

program Lab6;

{ Объявление функции, вычисляющей сумму квадратов катетов прямоугольного треугольника }
function pifagor(a, b: real): real;
begin
  { присваиваем результат работы функции её имени }
  pifagor:=sqrt(a*a+b*b);  
end;

{ Объявление переменных главной программы }
var
  a, b, c : real;

begin
  write('Введите длину катета a = '); readln(a);
  write('Введите длину катета b = '); readln(b);

  { Вызов функции }
  c:= pifagor(a, b);

  { Функция может использоваться в выражениях, как и любая встроенная функция (sin, cos, ...) }
  c:= 2*pifagor(a, b);   

end.

Пример задания

Составить программу на языке Паскаль для вычисления значения функции

y = \frac{\sin ax}{x^2 + a^2}

в точках x = {0.2, 0.7, 1.0, 1.2, 1.8, 2.0, 2.2} при заданных значениях a = {2, 2.5, 3, 7, 4.1, 4.9}. Нахождение значения функции f(x) при заданных значениях а оформить в виде подпрограммы. Результат вывести в виде двумерной таблицы.

program lab6;

{ Определяем тип данных -- вектор и двумерный массив }
type vector= array [1..20] of real;
     massiv= array [1..20,1..20] of real;

{ Объявление переменных }
var x,a:vector;
    i,j,k,n,m:integer;
    y:massiv;

{ Объявление процедуры, которая записывает двумерный массив в параметр y (тип массив) }
{ Входные параметры процедуры -- размеры массива и массивы x и a }
procedure p(n, m : integer; x, a : vector; var y : massiv);
begin
  for i:=1 to n do
    for j:= 1 to m do
      y[i,j]:=sin(a[j]*x[i])/(sqr(x[i])+sqr(a[j]));
end;

{ Тело основной программы }
begin

  Write ('Введите количество значений  x и a= ');
  Readln(n,m);

  { Ввод значений x }
  for i:=1 to n do
    begin
      Write ('Введите x[',i,']=');
      Readln(x[i]);
    end;
  { Ввод значений a }
  for j:= 1 to m do
    begin
      Write ('Введите a[',j,']=');
      Readln(a[j]);
    end;

  { Вызов процедуры p и заполнение массива y }
  p(n, m, x, a, y);

  { После того как массив заполнен, выводим его в виде таблицы}

  { Вывод шапки таблицы }
  writeln ('         Таблица');
  writeln('┌───────┬───────┬───────┬───────┬───────┬───────┬───────┐');
  write('│ x \ a │');

  { Вывод a в первой строке }
  for i:=1 to m do           
    write(a[i]:4:1,'   │');
  { Перевод строки }
  writeln;

  { Для каждой строки таблицы от 1 до n }
  for i:=1 to n do
    begin
      writeln('├───────┼───────┼───────┼───────┼───────┼───────┼───────┤');

      { вывод x в  первую колонку i-ой строки }
      write('|', x[i]:3:1,'    ','│');

      { вывод y в i-ой строке }
      for j:=1 to m do
        write(y[i, j]:7:3,'│');

      { Перевод строки }
      writeln;

    end;

  { Вывод подвала таблицы }  
  Writeln('└───────┴───────┴───────┴───────┴───────┴───────┴───────┘');

  { Ожидание, пока пользователь не нажмет Enter }
  readln;

end.


© 2018. All rights reserved.