2017-02-14

20. Запись вспомогательных алгоритмов на языке Паскаль. Процедуры

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

Видеоурок

 

Ранее мы изучили метод последовательного конструирования алгоритмов, при котором алгоритм последовательно разбивается на отдельные подзадачи, пока они не станут понятны исполнителю. А также мы узнали, что решение отдельных подзадач бывает удобно оформить в виде вспомогательных алгоритмов. Вспомним, что вспомогательным называется алгоритм, который целиком использован в составе другого алгоритма. Сегодня мы начнём применять эти знания при написании программ на языке Pascal.

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

В языке Pascal есть два вида подпрограмм: процедуры и функции. Сегодня мы узнаем, что такое процедура и как она записывается на языке Паскаль.

Процедурой называется подпрограмма, которая имеет произвольное количество входных и выходных параметров. То есть такая подпрограмма может принять на ввод одну или несколько переменных, и по выполнении команд вернуть одну или несколько переменных.

Схема работы процедуры

Процедуры записываются следующим образом… В начале идёт служебное слово Procedure, и через пробел указывается имя процедуры. Имя процедуры не должно совпадать с именем программы или переменных, остальные требования те же, что и к имени программы, то есть оно может содержать от 1 до 255 цифр, букв латинского алфавита и знаков подчёркивания, и должно начинаться с буквы латинского алфавита или знака подчёркивания. После имени процедуры в круглых скобках, как в разделе описания переменных, перечисляются сначала входные параметры с указанием типа, затем после служебного слова var перечисляются выходные параметры с указанием типа. В конце строки ставится точка с запятой. Если необходимы промежуточные переменные, то строкой ниже записывается раздел описания переменных процедуры, который, как и в основной программе, начинается со слова var. Далее, между служебными словами begin и end, следует тело процедуры. В данном случае после служебного слова end ставится точка с запятой.

Схематичная запись процедуры

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

Схематичная запись вызова процедуры

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

Задача: Три прямых на координатной плоскости заданы коэффициентами своих уравнений вида y = kx + b, при этом они образуют треугольник. Найти координаты вершин данного треугольника.

Построим математическую модель. Очевидно, что три прямые на координатной плоскости образуют треугольник, если никакие две из них не совпадают и не параллельны друг другу. А вершинами данного треугольника будут точки пересечения данных прямых. При этом, если прямые параллельны или совпадают, то коэффициенты k их уравнений будут равны. То есть, чтобы три прямые образовали треугольник, коэффициенты k их уравнений не должны совпадать.

Посмотрим, как же найти точку пересечения двух прямых. Для этого достаточно решить следующую систему уравнений. Где k1 и b1 – соответствующие коэффициенты первого уравнения, а k2 и b2 – второго.

Вычтем из первого уравнения второе и получим уравнение, из которого нам остаётся лишь выразить x, теперь остаётся лишь известную координату x подставить в любое из уравнений, допустим в первое, и получить координату y.

Составим блок-схему алгоритма решения задачи, при этом обозначим через k1, k2, k3 и b1, b2, b3 коэффициенты уравнений соответствующих прямых, а через xa, xb, xc, ya, yb, yc – соответствующие координаты вершин A, B и C. В качестве вспомогательного алгоритма оформим нахождение координат точки пересечения двух прямых.

Вначале нам нужно считать значения коэффициентов уравнений прямых, затем необходимо проверить, образуют ли они треугольник, то есть не равны ли между собой какие-нибудь два коэффициента k. Если равных коэффициентов не нашлось, нужно при помощи вспомогательного алгоритма, назовём его point, что в переводе с английского языка означает «точка», поочерёдно найти координаты точек пересечения прямых, которые будут являться вершинами треугольника, а затем вывести их на экран, если же какие-то коэффициенты k равны между собой, мы должны вывести на экран поясняющее сообщение о том, что заданные прямые не образуют треугольник.

Блок-схема алгоритма решения задачи

Напишем программу по данной блок-схеме. Назовём её triangle, что в переводе с английского языка означает «треугольник». В разделе описания переменных укажем, что нам понадобятся переменные коэффициентов уравнений и также координат вершин, по смыслу задачи понятно, что данные необязательно будут целыми числами, поэтому укажем их тип: real. Запишем тело программы. Вначале выведем на экран поясняющее сообщение о том, что это программа нахождения координат вершин треугольника по уравнениям прямых его сторон. Далее для всех коэффициентов уравнений выведем на экран запросы на ввод и запишем команды их считывания… Теперь проверим корректность ввода данных, то есть образуют ли данные прямые треугольник. Для этого запишем условный оператор с составным условием: (k1<> k2) and (k2<>k3) and (k1<>k3).

Запишем блок команд для выполнения условия. Если данные прямые образуют треугольник, вызовем процедуру point. Саму процедуру оформим позже. Процедура должна принимать в качестве входных параметров коэффициенты уравнений двух прямых, в данном случае для первых двух k1, b1 и k2, b2. Выходными параметрами будут координаты точки пересечения прямых, в данном случае xa и ya. Так мы нашли координаты вершины А. Таким же образом, найдём координаты остальных двух вершин… Далее выведем координаты на экран, оформив вывод соответствующим образом… Теперь для случая, если начальное условие не выполняется, выведем на экран сообщение о том, что заданные прямые не образуют треугольник.

Исходный код основной программы

Теперь между разделом описания переменных и телом программы оформим процедуру для нахождения точки пересечения двух прямых. Запишем служебное слово procedure, и название процедуры point, после которого в круглых скобках запишем входные параметры. Обратим внимание, что имена параметров процедуры могут совпадать с именами переменных в основной программе. Потому имена входных и выходных параметров, а также промежуточных переменных выбираются для решения заданной подзадачи. Входными параметрами будут коэффициенты двух уравнений прямых k1, b1 и k2, b2, все типа real. Теперь запишем служебное слово var и перечислим выходные параметры – ими будут координаты точки x и y, которые так же будут принадлежать к типу real. Промежуточных переменных для решения подзадачи нам не потребуется.

Между служебными словами begin и end запишем тело процедуры. Оно будет содержать всего две команды – расчёты координат точек по формулам, которые мы вывели в математической модели.

Исходный код процедуры нахождения координат точки пересечения прямых

Придумаем несколько тестов для программы. Для примера возьмём уравнения прямых и сразу же построим их графики. y = 4x, y= –3x + 7, и y=x/2. Построив данные прямые на координатной плоскости, мы можем определить, что вершинами треугольника, который образуют прямые, являются точки с координатами 0;0, 1;4 и 2;1.

Рисунок теста

Придумаем ещё один тест при котором прямые не образуют треугольник. Для этого зададим две параллельные прямые с уравнениями: y = 4x и y = 4x – 10, и ещё одну прямую с уравнением y = x.

Рисунок теста

Введём данные из первого теста в программу… Координаты точек, которые вывела программа, совпадают с координатами, полученными на графике.

Результат работы программы по первому тесту

Введём данные из второго теста… Программа вывела поясняющее сообщение о том, что заданные прямые не образуют треугольник. Результаты тестов соответствуют ожидаемым – задача решена верно.

Результат работы программы по второму тесту

Важно запомнить:

·      Вспомогательные алгоритмы на языке Pascal записываются в виде подпрограмм.

·      Подпрограмма – это именованная последовательность команд.

·      Подпрограммы в языке Pascal делятся на процедуры и функции.

·      Процедура – это подпрограмма, которая имеет произвольное количество входных и выходных параметров.

Мы научились оформлять вспомогательные алгоритмы в виде процедур и использовать их при решении задач.

Окончательный код программы:


article

Авторизация
Логин:
Пароль:

Добро пожаловать,
гость сайта!

Статистика по сайту:

Сегодня сайт уже посетили 92 чел.

Количество всех статей на сайте: 463.

Количество online-тестов: 214.