Лабораторная работа № 2. Программирование алгоритмов с ветвлениями

Программирование алгоритмов с ветвлениями

Задачи лабораторной работы

Вопросы, изучаемые в работе

· Построение простейшей программы с ветвлениями.

· Изучение условных операторов.

· Использование именованных констант.

· Использование операторов ввода для исходных данных.

Задание (общее ко всем вариантам).

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

Оформить отчет по лабораторной работе по образцу первой работы, но текст программы распечатать из оболочки Турбо-Паскаля.

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

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

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

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

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

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

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

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

 
  Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru

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

 
  Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru

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

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

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;

Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Если в качестве оператора одной из ветвей используется условный оператор, то можно выбирать один из трех возможных путей. Вообще, количество "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;

Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru

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

Вид функции При условии Данные для проверки
 
  Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru

 
  Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru

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 Веществ.функция   Вычисление натурального логарифма

Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Блок-схема алгоритма

               
   
нет
 
нет
 
 
да
 
да

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



Текст программы

PROGRAM Lab_2;

{ Лабораторная работа N 2 Вариант N 31

А.Я.Умненькая, ст. гр. Я-007 }

CONST

C=2.13;

VAR

A,B,F,R :real;

BEGIN

Writeln('Значения аргументов A и B ?');

Readln(A,B);

R:=A+B;

if R>C then

F:= Sin(R)+1.0/R

else

if R<C then

F:= cos(A)-ln(-R)

else

F:= exp(R)/C;

Writeln(' Рез-т: ',F:8:4);

END.

Результаты расчетов

Рез-т: -0.4154

Рез-т: 0.2328

Рез-т: 3.9506

Варианты заданий

Таблица 11. Варианты заданий лабораторной работы № 2

№ вар. Вид функции При условии Данные для проверки
A B Результат
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru -4.0 -1.0 4.52 0.25 2.1353 4.2500 -0.9983
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru 0.77 2.88 1.01 1.99 7.04 6.8061 -3.9833 0.7888
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru 2.10 10.2 3.0 -1.2 0.02 1.0 1.9341 0.6930 2.4975
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru 0.01 0.01 1.11 0.5 2.0 -2.22 0.5001 -0.3070 -2.3881
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru 65.43 0.11 -2.13 1.33 -3.13 4.1626 -0.2293 0.4416
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru -2 -1.0   -2 1.0   8.1400 -0.1610 1.3491  
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru 0.11 0.55 5.45 0.4500 0.0029 0.4170
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru 2.22 0.5 0.5 2.22 0.1 1.3429 0.4510 0.9418
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru 1.5 0.5 0.2 0.5 1.5 0.01 3.0562 0.9983 0.8600
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru -1 -3 -1.0 1.0 0.0 1.2091 -0.4620 -1.6797
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru 1.1 3.3 2.2 -1.2 -1 4.9914 6.1148 -5.7770
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru -1 0.0 -2 1.0 -0.23 -7.5470 0.2256 1.4042
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru 2.5 3.14 -1 2.1 -0.0085 7.8897 -0.1335
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru   -1 -0.1 1.0556 -0.1110 0.0000
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru 2.5 1.5 -0.2 1.5 -1.5 0.1310 2.5105 -1.7101
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru -1 0.5 2.3 9.5 -0.0354 -0.0248 0.9996
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru 3.5 -3.5 2.5 -2.5 2.5000 0.0396 0.8223
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru -1.5 -1 -2 0.5 2.4973 -3.0000 0.3336
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru 1.5 -1.5 -2 -5.8 3.1602 -2.3872 -0.4959
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru -1 0.5 1.0 4.1212 -0.2264 3.8982
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru 1.8 0.5 -0.2 0.8 1.7 0.0000 0.8771 -0.3002
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru -12.3 2.5 -89.9 4.5 -0.5 48.5200 0.0805 32.0000
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru -10 3.5 -5.5 -0.5589 1.6094 85.2480
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru -1.88 1.25 5.5 -0.66 0.13 -0.02 0.9370 0.9916 -0.1233
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru 11.1 3.9 0.87 1.55 0.06 1.0160 25.3045 0.5003
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru - 0.5 - 1.7 3.55 3.1 1.1526 -0.0551 1.1299
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru -0.08 1.89 2.40 0.28 4.92 - 2.4 -1.9599 1.5006 1.3569
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru A + B > 17.33 A + B < - 17.33 в остальных случаях 10.3 - 20.6 2.48 13.8 -0.6 - 1.75 -12.0952 0.6730 0.0421
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru 5.77 - 3.96 1.0 - 1.85 2.04 0.1 0.6055 1.6708 2.0833
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru 2.77 0.84 - 1.39   0.88 - 3.58 - 0.42   5.4488 18.227 7.9204  
Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru Лабораторная работа № 2. Программирование алгоритмов с ветвлениями - student2.ru 3.2 0.34 0.68 - 3.58 0.13 -0.4154 -0.2328 3.9506

Наши рекомендации