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

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

Строки в Паскаль.

Тип данных String (строковый тип) используется в Паскаль для обработки текстов. Если в одну переменную типа Char можно записать лишь один символ, то в переменную типа String можно записать до 255 символов.

Использование Var, Integer, Readln.

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

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

Многомерные массивы.

Индексы имеют еще одно свойство — чем больше объем массива, тем менее эффективна с ним работа, поэтому часто используют массивы массивов, то есть с двумя, тремя и более индексами для идентификации ...

Манипулирование строками STRING.

В языке Паскаль при работе с текстами чаще всего используются короткие строки типа STRING. Стандартные процедуры READLN(St), WRITE(St) и WRITELN(St) поддерживают ввод и вывод строк переменной длины ...

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

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

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

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

Для модуля должны быть известны: алгоритм решения задачи; область допустимых входных значений; область возможных выходных значений.
Каждый модуль должен решать одну задачу, то есть быть «кирпичиком», из которого строится программа. Вы можете программы для ноутбука скачать тут без заморочек. Как правило, использование модулей сокращает число глобальных переменных программы.
На рис. 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.Подпрограммы, определенные пользователем.