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

Вариант 10.

ЗАДАНИЕ 1.

Составьте программу, вычисляющую следующее выражение:

A = (B + C)·(C + D),

где B, C и D - квадратные матрицы размером (n x n).

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

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

CONST
   n = ... ; { размер матриц }
TYPE

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


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

PROCEDURE PrintMatrix( M : matrix );
VAR
   Описание локальных переменных;
BEGIN
   Вывод массива М на экран в виде матрицы
END;

PROCEDURE SumMatrices( M1, M2 : matrix; var M3 : matrix );
VAR
   Описание локальных переменных;
BEGIN
   Вычисление суммы матриц ( M3=M1+M2 );
END;

PROCEDURE MuliplyMatrices( M1, M2 : matrix; var M3 : matrix );
VAR
   Описание локальных переменных;
BEGIN
   Вычисление произведения матриц ( M3=M1*M2 );
END;

BEGIN
   Вызов процедуры InputMatrix для ввода элементов матриц B, C и D;
   Вызов процедуры PrintMatrix для вывода на экран матриц B, C и D;
   Вызов функций SumMatrix и MultiplyMatrix для вычисления
   заданного выражения;
   Вызов процедуры PrintMatrix для вывода матрицы А на экран;
END.

Замечания.

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

PROCEDURE InputMatrxi( var M : array[1..n, 1..n] of integer );

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

InputMatrix( B ); InputMatrix( C ); и т.д.

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

 

ЗАДАНИЕ 2.

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

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

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

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

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