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

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

Использование вложенного оператора If.

Условные операторы в Pascal можно вкладывать друг в друга. Для этого используется вложенный оператор IF. Рассмотрим это на примере программы, которая будет считать количество корней квадратного уравнения.

Перевод числа из десятичной системы счисления в шестнадцатеричную.

Напишем программу, которая вводит с клавиатуры целое число в диапазоне от 0 до 15 и преобразует его к шестнадцатеричной системе счисления. Напомню, что в шестнадцатеричной системе счисления числа в диапазоне от 0 до 9 соответствуют таким же числам в ...

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

Работа со строковыми данными.

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

Итерационные циклы.

Если число повторений заранее не известно и решение о завершении цикла принимается на основе анализа некоторого условия, то такой повторяющийся вычислительный процесс называется итерационным циклом.

...

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

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

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

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

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