Тема 7. Организация подпрограмм.
Описание и использование процедур и функций.

Вариант 7.

ЗАДАНИЕ 1.

Даны три вектора A(5), B(5) и C(5) (элементы векторов - целые числа). Векторы А, В и С определяют координаты трех точек в абстрактном 5-ти мерном пространстве. Составьте программу, определяющую расстояния между этими точками.

Расстояние между элементами n-мерного пространства (метрика) определяется следующим образом:

 ,    
где
||...|| - обозначает норму вектора X-Y.

Норма вектора (евклидова норма) определяется выражением -



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

Ввод элементов векторов и вывод векторов на экран оформите в виде процедур, а вычисление разности двух векторов и нормы - в виде функции.

Ниже приведена примерная структура программы:
(имена типов, переменных, процедур и функций Вы можете изменить по своему усмотрению)

CONST
   n = 5; { размер векторов }
TYPE

   vector = array[1..n] of integer;
VAR
  A, B, C : vector;


PROCEDURE InputVector( var V : vector );
VAR
   Описание локальных переменных;
BEGIN
   Ввод элементов массива V
END;

PROCEDURE PrintVector( V : vector );
VAR
   Описание локальных переменных;
BEGIN
   Вывод массива V на экран (в строчку)
END;

FUNCTION Subtraction( V1, V2 : vector ) : vector;
VAR
   Описание локальных переменных;
BEGIN
   Вычисление разности векторов V1-V2
END;

FUNCTION ENorm( V : vector ) : real;
VAR
   Описание локальных переменных;
BEGIN
   Вычисление евклидовой нормы вектора V
END;

BEGIN
   Вызов процедуры InputVector для ввода элементов матриц A, B и C;
   Вызов процедуры PrintVector для вывода на экран матриц A, B и C;
   Вызов функций ENorm и Subtraction для вычисления
   расстояний между точками (A,B), (A,C) и (B,C)
END.

Замечания.

1. Обратите внимание, что в разделе описания TYPE объявлен новый тип с именем vector. В данном случае введение нового типа является необходимым, поскольку в используемых процедурах и функциях в качестве их параметров выступают массивы. Правила языка Паскаль не допускают конструирование типов при описании параметров процедур и функций, а также при указании типа возвращаемого значения (в случае функции). Тип должен быть представлен не конструкцией, а идентификатором (именем). Так, например, было бы не верно написать заголовок процедуры InputVector следующим образом:

PROCEDURE InputVector( var V : array[1..n] of integer );

2. При описании процедур InputVector и PrintVector   используются различные способы передачи параметров. В заголовке процедуры InputVector формальный параметр V описан как "параметр-переменная" (перед идентификатором стоит ключевое слово var). В этом случае любые изменения значения переменной V (формального параметра) в теле процедуры приводят к соответствующим изменениям значений переменных A, B и C, которые выступают в качестве фактических параметров при вызове процедуры InputVector:

InputVector( A ); InputVector( B ); и т.д.

Целью процедуры PrintVector является лишь вывод значений переменных на экран, а не их модификация, поэтому формальный параметр V описан как "параметр-значение"  (перед идентификатором ключевое слово var отсутствует). При этом,  если в теле процедуры значения переменной V будут изменены, то это не приведет к изменению значения фактического параметра.

 

ЗАДАНИЕ 2.

Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от xmin до xmax с шагом dx с точностью e.

Каждая строка таблицы должна содержать значение аргумента, значение функции и количество просуммированных членов ряда. Операции ввода исходных данных, вычисления функции с помощью ряда Тейлора и табулирования функции реализовать в виде отдельных подпрограмм (процедур и функций).

Вопросы для защиты работ (6-7 темы):

1. Что называется подпрограммой?
2. Каковы основные принципы выделения подпрограмм?
3. Какие виды подпрограмм используются в языке Паскаль?
4. Что называется формальными и фактическими параметрами подпрограммы?
5. Чем отличается вызов функции от вызова процедуры?
6. Что такое локальные и глобальные переменные?
 

Назад к списку