Общие пояснения

условие
1-я группа операторов
2-я группа операторов
нет
да
А
условие
1-я группа операторов
нет
да
В

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

Рисунок 3. Структуры А – полного и В – неполного ветвлений

Ветвящиеся алгоритмы могут быть построены как из стандартных структур ветвления (А), так и из неполных (В).

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

2. Реализация структур ветвления на Паскале осуществляется с помощью условных операторов "if".

 

Таблица 6. Запись "if" операторов на Паскале

Форма (А) запишется: Форма (В) с операторами по "да":
if <услов.истинно> then begin <операторы ветви 1> end else begin <операторы ветви 2> end; if <условие истинно> then begin <операторы ветви 1> end;
Форма (Б) с операторами по "нет" :
if <условие истинно> then goto Met; <операторы ветви 1>; Met: . . .

 


Примеры написания таких операторов:

if A>0 then Y:=sin(X) else Y:=cos(X);

if (A+B > C) and (B < 0) then { если требуется проверка}

Writeln('Ветвь 1') { нескольких условий, }

else { каждое отношение следует}

Writeln('Ветвь 2'); { заключать в скобки }

if Pr then {здесь Pr – логическая переменная,}

begin {если Pr равно TRUE выполнится этот блок}

Writeln(' При таких данных решения нет');

Pr:=FALSE;

end;

Если в качестве оператора одной из ветвей используется условный оператор, то можно выбирать один из трех возможных путей. Вообще, количество "if"-операторов должно быть на единицу меньше, чем возможных ветвей алгоритма. Например, если нужно задать Y=-1, при X<0, Y=0 при X=0 и Y=1 при X>0, такой алгоритм и соответствующий ему текст на Паскале будет выглядеть:

 

If X<0 then Y=-1

else

if Y>0 then Y=1

else Y=0;

 

Рисунок 4. Вложенный условный оператор

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

Таблица 7. Операции отношений

Операция Знак операции
Равно =  
Не равно <>  
Больше >  
Больше или равно (не меньше)    
Меньше <  
Меньше или рано (не больше) <=  
         

В качестве операций отношений для упорядоченных типов данных можно использовать шесть видов операций, приведенных в таблице N 7; для неупорядоченных типов разрешены только первые две операции. У всех одинаковый приоритет, причем он ниже, чем приоритеты любых других операций (арифметических и прочих), а результат всегда имеет логическое значение.

3. В программе на Паскале можно пользоваться константами, которые имеют не только значение, но и имя. Такие константы должны быть описаны в блоке описаний, в специальном разделе описаний констант. Использование таких именованных констант позволяет "вытащить" задание значений констант в начало программы, где их можно, при необходимости, изменить в одном месте. Пример раздела описаний констант:

CONST

MAXBALL = 5;

MINBALL = 2;

ERR = ' Ошибка в программе';

ABSNUL = -273.16;

В дальнейшем можно всюду вместо числового значения -273.16 использовать имя ABSNUL и т.д.

Существует ряд констант, которыми можно пользоваться без их описания. Некоторые из них приведены в таблице 8.

 

Таблица 8. Стандартные константы Турбо-Паскаля

Имя Тип Значение Назначение

 

TRUE boolean True "истина"
FALSE boolean False "ложь"
MAXINT integer +32767 Максимальное целое
MAXLONGINT longint +2147483647 Максимальное длинное целое
PI double 3.14159265358... Число p

 

4. В процессе работы программа пользуется данными, которые берет из ячеек памяти. Каким же образом эти значения попадают в эти ячейки? Существует всего три возможности. Во-первых, значения могут быть занесены в некоторые переменные в самый начальный момент при загрузке программы в память. Такие переменные называются типизированными константами (хотя по сути их правильнее называть инициализированными переменными). Во-вторых, переменная (ячейка памяти) может получить значение при выполнении оператора присваивания. Наконец, в переменную можно ввести значение с помощью процедуры ввода данных с внешнего устройства.

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

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

Read(<список переменных>); или

Readln(<список переменных>);

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

Примеры:

Read(N); {программа ждет, пока не будет набрано число на клавиатуре и не нажата клавиша <Enter>, после чего переменная с именем N получит набранное значение}

Read(A,B,C); {необходимо набрать через пробел три числа и нажать <Enter>, первое попадет в ячейку с именем A и т.д.}

Нельзя в списке имен писать константы или выражения.

Если в программе требуется выполнить ввод данных с клавиатуры, предварительно следует предусмотреть команды вывода на экран запроса, какие параметры и в каком порядке пользователь должен вводить, например:

Writeln('задай коэффициенты уравнения: A,B,C');

Readln(A,B,C);

или

Writeln('Сколько вариантов будем считать?');

Readln(N);

Разбор контрольного варианта