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

Требования к программе

· Программа должна содержать комментарий по форме, указанной в работе № 1.

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

· Значения аргументов вводятся с клавиатуры, перед вводом должен стоять оператор запроса аргументов.

· Проверку программы выполнить для всех ветвей алгоритма.

· При выводе результата, одновременно выводить значения аргументов.

· Вывод результата выполнять по формату :8:4.


 
 

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

 
 

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

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

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;

 

Условиями, определяющими какую ветвь алгоритма выполнять, являются логические выражения, принимающие значение 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);

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

Задание

Написать программу вычисления и вывода на экран (по формату :8:4) значения функции по значениям аргументов A и B, величины которых вводятся с клавиатуры операторами ввода. Проверить ее работу для каждой ветви алгоритма заданием соответствующих исходных данных.


Таблица 9. Данные задания 31 варианта

Вид функции При условии Данные для проверки
 
 

 
 

3.2 0.34 А 0.68 -3.58 0.13 В -0.4154 -0.2328 3.9506 F

Таблица 10. Таблица распределения памяти

Имя Тип Р-р,байт Назначение
Lab_2 Имя программы   Вычисление заданной функции
F Веществ. Результат
A Веществ. Аргумент
B Веществ. -"-
C Веществ.константа   2.13
R Веществ. Рабочая переменная
sin Веществ.функция   Вычисление синуса
cos Веществ.функция   Вычисление косинуса
exp Веществ.функция   Вычисление экспоненты
ln Веществ.функция   Вычисление натурального логарифма

Блок-схема алгоритма

 

 

                   
   
нет
 
нет
 
   
да
 
да
 
 
Рисунок 5. Алгоритм 31-го варианта