Практическая работа №5
Тема. Программирование разветвленных алгоритмов.
Цель работы. Закрепить теоретические сведения о разветвленные алгоритмы, операторы передачи управления; научиться программировать ветвления.
Краткие теоретические сведения и методические указания
При программировании лiнийних алгоритмов в Pascal реализуется обычный порядок следования операторов. Но в реальных задачах очень часто требуется изменить его в зависимости от исходных данных или результатов промежуточных вычислений. В этом случае для организации разветвленных вычислительных процессов используются операторы передачи управления: безусловный (goto) и условный (if), а также оператор выбора (case).
Безусловный оператор передает управление на оператор с указанной меткой.
формат:
goto <метка>;
где <метка> - любой допустимый iдентификатор, а также последовательность цифр или цифр и букв; <метка> должна быть описана в разделе описания меток (label).
например,
...
Label 1;
...
begin
goto 1;
...
1: a = b + c;
...
Условный оператор обеспечивает выполнение или невыполнение какого-либо оператора в зависимости от условия.
формат:
if <условие> then <оператор1> else <оператор2>;
где <условие> - выражение логического типа. Если значение <условие> равно true, тогда выполняется <оператор1>, а <оператор2> игнорируется; если же значение <условие> равна false, тогда выполняется <оператор2>, а <оператор1> игнорируется.
например,
if x> y then z: = x else z: = y; {нахождения максимального из двух чисел}
<оператор1> (или <оператор2>) может быть и структурным, то есть группой операторов, заключенной в "операторные скобки" (begin и end).
Частным случаем условного оператора является оператор if <условие> then <оператор>; {else не содержит никаких действий}
например,
if x> y then
begin {сортировка двух цифр по возрастанию}
z = x; x = y; y = z
end;
В Pascal допустимая вложенность операторов if:
if <усл. 1> then if <усл. 2> then ...
else if <условий. N> then ...
else if <условий. K> then ... else ...;
Такая вложенность операторов if ограничивается только объемом доступной памяти компьютера. Оператор выбора (варианта) case позволяет сделать выбор из произвольного числа существующих вариантов.
формат:
case <выражение> of
<метка 1> <оператор 1>;
<метка 2> <оператор 2>;
...
<метка n> <операторn>
end;
где <выражение> - выражение любого скалярного типа, кроме действительного; <митка1>, <митка2> ..., <миткаn> - значение того же типа, что и <выражение>; эти метки в разделе label объявлять не надо.
Оператор case выполняется следующим образом: сначала вычисляется значение <выражение>, после этого выполняется оператор с той меткой, совпадает с этим значением, а все остальные операторы игнорируются; дальше управление передается оператору, следующем за служебным словом end. Если же оператора с такой меткой нет, то управление сразу передается на оператор, следующий за end.
Если для двух различных меток надо выполнить одно действие, тогда перед соответствующим оператором записываются обе метки (через запятую).
например,
case I of
1, 2 <оператор1>;
...
end;
Оператор case может содержать также служебное слово else и <выражение> интервальный типа.
например,
case I of
1 .. 10 ...; {действие после else выполняется в том случае,
11 .. 20 ...; если I <1 и I> 20}
else ...
end;
Если меток диапазонов несколько в одном операторе, тогда они также разделяются запятыми.
Примечания
1 Нельзя передавать управление из одной альтернативы оператора if на другую (то же для оператора case).
2 Нельзя извне оператора if входить на какую-либо его альтернативу с помощью оператора goto.
3 Нельзя входить в тело оператора case с помощью оператора goto.
4 Служебное слово end может иметь метку, например, 5: end. Если в программе есть оператор goto 5, тогда это означает, что будет выполняться передача на пустой оператор с меткой 5.
пример 3.1
Дано 10 вещественных чисел. Найти величину наибольшего из них.
Решение. Введем следующие обозначения: в переменную x действительного типа будем вводить очередной номер последовательности; действительной переменной max обозначим наибольшее из введенных чисел, целой переменной и - счетчик количества цифр.
Блок-схема алгоритма приведена на рис. 5.1
Program 5.1
uses crt;
label 4, 9; {метки}
const n = 10; {количество чисел}
var
i: integer; {счетчик количества введенных чисел}
max: real; {наибольшее число среди введенных}
x: real; {следующее число}
begin write {'исходные числа:'};
i = 1;
read (max); {ввод первого числа}
4: i = i + 1; if i> n then goto 9;
read (x); {ввод очередного числа}
if x> max then max: = x;
goto 4;
9: writeln; writeln ('результат:');
writeln ('max =', max: 6: 2)
end.
Пусть введено 10 цифр: 1.2; -3,4; 13,85; 10,4; -2,2; 4; 5; 8; 20; 1,1. Тогда результаты работы программы будут следующие:
Выходные числа: 1,2; -3,4; 13,85; 10,4; -2,2; 4; 5; 8; 20; 1,1.
Результат: max = 20,00
Вопросы для самопроверки
1 Какая алгоритмическая структура называется разветвленной?
2 Какие операторы используются для записи разветвленных алгоритмов?
3 Дать характеристику оператора goto.
4 Дать характеристику оператора if. Допускается или нет в Паскале вложенность операторов if?
5 Как выполняется оператор case? Допустимый <выражение> типа real?
6 Что такое пустой оператор?
варианты заданий
1 Данные два целых числа a и b. Найти их наибольший общий делитель.
2 Данные два действительных числа x и y. Напечатать номер квадрата на координатной плоскости, которому принадлежит точка (x, y).
3 Дано 5 действительных чисел: a1, a2, a3, a4, a5. Известно, что один из них отличное от четырех других, равных между собой. Найти номер этого числа.
4 Данные числа a, b, c. Определить, существует треугольник с такими сторонами.
5 Данный треугольник со сторонами a, b, c. Определить, какой он (остроугольный, прямоугольный, тупоугольный).
6 Данный треугольник со сторонами a, b, c. Определить, какой он (равносторонний, равнобедренный, разносторонний).
7 Данные числа a, b, c. Найти сумму наибольшего и наименьшего из них.
8 Данные числа a, b, c. Напечатать их в порядке убывания.
9 Данные числа a, b, c. Напечатать их в порядке возрастания.
10 Данные числа a, b, c, d. Определить, сколько из них отрицательных.
11 Данные числа a, b, c, d. Найти сумму положительных чисел.
12 Данные числа a, b, c. Определить, сколько из них одинаковых.
13 Данные числа a, b, c. Определить, можно составить из них арифметическую прогрессии.
14 Данные числа a, b, c. Определить, можно составить из них геометрическую прогрессии.
15 Дано положительное число N. Проверить, все ли его цифры различны; если нет, тогда сколько одинаковых?
16 Дано положительное трехзначное число N. Проверить, есть ли среди его цифр две одинаковые.
17 Дано положительное четырехзначное число N. Проверить, входит ли в запись этого числа цифра 9.
18 Дано целое положительное число N. Определить, сколько в нем цифр.
19 Дано положительное трехзначное число N. Если все цифры его различные, напечатать число, записанное теми же цифрами, но в обратном порядке.
20. Переменной х присвоить значение корня уравнения: arccos (1-lnx) = a, если такой существует. Значение a задать самостоятельно.