Ветвления в Pascal.

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

Функции trunc, round в Pascal.

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

Ввод логических переменных с клавиатуры.

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

Циклы и массивы

Тип данных Char.

Тип CHAR (литерный, символьный). Этот тип задает конечное упорядоченное множество символов (литер), допускаемое в конкретной реализации языка.

Спецификация процедуры.

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

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

Принципы модульного программирования.

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

  • Нужно добиться, чтобы программный модуль был правильным и не зависел от контекста, в котором этот модуль будет использоваться.
  • Следует стремиться к тому, чтобы из модулей можно было формировать программу без каких-либо знаний о внутренней работе отдельно взятого модуля.

Для модуля должны быть известны: алгоритм решения задачи; область допустимых входных значений; область возможных выходных значений.
Каждый модуль должен решать одну задачу, то есть быть «кирпичиком», из которого строится программа. Вы можете программы для ноутбука скачать тут без заморочек. Как правило, использование модулей сокращает число глобальных переменных программы.
На рис. 1.4 в виде блок-схемы приведен проект будущей программы, имеющей линейную структуру.

procedurihЭта программа должна обеспечить ввод с клавиатуры двух матриц А и В, осуществить их умножение, результатом которого является матрица С, и вывести матрицу С на экран монитора. Тело программы содержит вызовы трех подпрограмм MOD1, MOD2, MOD3, имеющих один вход и один выход.
В таком представлении (рис. 1.4) процесс разработки программы сводится к последовательному программированию модулей, если разработчик один, или сразу всех, если разработчика три. Предположим, что MOD2 и MOD3 разработаны, а MOD1 — нет. В этом случае вместо MOD1 ставят «заглушку», то есть модуль имитирующий процесс работы MOD1.
Принципы модульного программирования реализуются в Паскале с помощью пользовательских процедур, представляющих собой оператор с уникальным идентификатором и списком формальных параметров, если они нужны.

Структура и синтаксис процедуры.

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

procedurih.

Допускаются описания процедур, выполняющих некоторые действия и не формирующих никаких результатов расчетов. Например: вывод на экран строки из звездочек или часто встречающихся сообщений.
Процедура, описанная пользователем, в общем случае имеет синтаксис:
PROCEDURE < имя > [(< список формальных параметров >)]; { Заголовок }
< Разделы описаний > { Тело процедуры }
BEGIN
< Раздел операторов >
END;
При обращении к процедуре указывается имя процедуры и список фактических параметров, порядок которых очень существенен, так как он должен строго соответствовать порядку, принятому в списке формальных параметров заголовка процедуры. Фактические параметры отделяются друг от друга запятыми и заключаются в круглые скобки. В общем случае список параметров процедур может отсутствовать.
Подстановка фактических параметров вместо формальных осуществляется механизмом замены, который обеспечивает многократное выполнение процедуры с различными исходными данными и помещает результаты вычислений в переменные, задаваемые пользователем.
Пример 7. Используя принцип модульного проектирования программ разработать программу вычисления произведения двух матриц С = А х В по формуле:

procedurih..

где Aj,k – элементы прямоугольной матрицы Amxp ; m – число строк матрицы Amxp ; р – число столбцов Amxp, и число строк матрицы Bpxn; Bk,j – компоненты матрицы Bpxn, n – число столбцов матрицы Bpxn; Сi,j – компоненты матрицы Cmxn, получаемые в результате умножения.


PROGRAM PR7;
TYPE     MAT = ARRAY [1..10, 1..10] OF REAL;
VAR AF, BF, CF: MAT; MF, NF, PF: INTEGER;
PROCEDURE  MOD1(CH:CHAR; VAR M, N: INTEGER; VAR W: MAT);
VAR I, J: INTEGER;
BEGIN   { Ввод матрицы W, размерностью M на N}
WRITELN('Введите размерность М и N матрицы ', СН);
READLN(M, N);
WRITELN('Введите матрицу', СН);
FOR I := 1 ТО М DO FOR J := 1 ТО N DO READ (W[I, J]);
END; {MODI }
PROCEDURE MOD2(M, P, N: INTEGER; A, B: MAT; VAR C: MAT);
VAR I, J, K: INTEGER;
BEGIN   {Умножение матриц А и В}
FOR I := 1  TO M
DO FOR J:=l TON DO BEGIN
C[I,J]:=0;
FOR K:=1 TO P
DO C[I,J]:=C[I,J] + A[I,K]*B[K,J]
END
END; {MOD2}
PROCEDURE  MOD3(CH: CHAR; M, N: INTEGER; W: MAT); VAR I. J: INTEGER;
BEGIN   { Отображение матрицы W, размерностью M на N }
WRlTELN('Матрица', СН, ':');
FOR I:=1 TO M
DO BEGIN
FOR J := 1 TO N DO WRITE(W[I, J]: 10:5);
WRITELN
END
END; {MOD3}
BEGIN {Тело программы}
MOD1('A', MF, PF, AF); { Ввод матрицы А, размерностью MF на PF}
MOD1('B', PF, NF, BF); { Ввод матрицы В, размерностью PF нa NF}
MOD2(MF, PF, NF, AF, BF, CF);      { Умножение матриц А и В }
MOD3('C', MF, NF, CF) { Отображение матрицы С, размерностью MF на NF}
END.


Предыдущая статья: Рекурсивные вычислительные процессы.
Оглавление: Лекции по Pascal. Часть 2.
Следующая статья: Спецификация процедуры.


   ГлавнаяПаскальЛекции по Pascal. Часть 2.Описание процедур.