Практическая часть работы
Пример №1
Рассмотрим задачу определения количества корней квадратного уравнения по дискриминанту (рисунок 4).
Блок-схема |
Программа |
|
Пример .1. Анализ дискриминанта квадратного уравнения program Diskr; var A,B,C,D: real; begin write('Введите коэффициенты А,В,С:'); readln(A,B,C); D:=SQR(B)-4*A*C; if D >= 0 then if D > 0 then writeln('Два вещественных корня') else writeln('Один вещественный корень') else writeln('Нет ещественных корней'); readln end. В этой задаче используется вложенный оператор if. Пример .1.1.Вычисление корней квадратного уравнения Program Quad; var А.В.С: real;{ Переменные для хранения коэффициентов } D:rеаl; { Переменная для дискриминанта } X1,Х2: real;{ Переменные для получения корней } begin writeln('Введите коэффициенты А, В, С:'); readln(A.B.C); D:=Sqr(B) - 4*А*С; if D < 0 then writeln('Уравнение не имеет вещественных корней') else if D=0 then writeln('У уравнения один корень', -В/(2*А):б:2) else {Ниже идет составной оператор } begin Х1:=(-В + Sqrt(D))/(2*А); Х2:=(-В -Sqrt(D))/(2*A); Writeln('У уравнения два корня:', X1:6:2, Х2:6:2) end: readln end. |
ЗАПОМНИТЕ! При использовании вложенных операторов if слово else относится к последнему if, у которого нет еще else
Блоки операторов
Управляющая структура if ... then может показаться негибкой, так как после служебного слова then должен стоять только один оператор. Если вы напишете два оператора подряд (например, if х<>0 then у:=1/х; х:=0;), то второй оператор выполнится в любом случае, независимо от проверяемого условия.
Если требуется выполнить последовательность действий (несколько операторов подряд), то ее заключают в блок, образуемый операторами begin и end.
Пример:
if X > 3 then begin S1; S2; S3; S4 end;
Здесь S1-S4 символически обозначают операторы. Эта группа (begin S1; S2; S3; S4 end) называется составным оператором, или операторной скобкой. Она как бы говорит компилятору, что данный блок операторов нужно рассматривать как единое целое.
Пример 2 Рассмотрим задачу: ввести три числа А, В, С и определить, равны ли введенные числа.
Блок-схема |
Программа |
|
Пример 2 Проверка равенства трех чисел, введенных с клавиатуры . Program Мх; var А,В,С: integer; begin writeln(' Введите 3 числа:'); readln(A.B.C); if (А = В) and (А = С) then writeln('Числа равные') else writeln('Числа не равны'); readln end. |
Пример №3 _Вычисление значения составной функции
Пусть нам необходимо вычислить значение y по формуле:
Ниже приведена графическая схема алгоритма решения данной задачи и программа на языке программирования Pascal.
В этой программе впервые встречается условный оператор и служит для выбора формулы вычисления y в зависимости от введенного значения x.
Блок-схема |
Программа |
|
program z1; var x,y:real; begin writeln('Введите x:'); readln(x); if x>0 then y:=x*x*x+3 else y:=x*sin(x); writeln(y); end. |
Ветвление по ряду условий (оператор case)
Оператор if позволяет выполнять переходы на ту или иную ветвь по значению булевского (логического) условия. Используя несколько операторов if, можно производить ветвление по последовательности условий.
Пример 4 Преобразование введенного целого числа из диапазона (0..4) в его словесное представление
Program Digit; var Num: integer; begin write('Введите число:'); readln(Num); if Num = 0 then writeln('Нуль'); if Num = 1 then writeln('Один'); if Num = 2 then writeln('Два '); if Num = 3 then writeln( 'Три '); if Num = 4 then writeln('Четыре'); readln end.
Выполним ту же задачу, используя другую управляющую структуру — оператор выбора case ... of. Формат записи оператора таков:
Case <выражение порядкового типа> of <значение1>:<оператор1>; <значениеN>:<операторN> else <оператор> end
Пример 4.1 Использование структуры case ... of для перевода целого числа в его словесное представление
Блок-схема |
Программа |
|
Program Digit; var Num: integer; begin write('Введите число:'); readln(Num); case Num of 0: writeln('Нуль'); 1: writeln('Один'); 2: writeln('Два' ); 3: writeln('Три '); 4: writeln('Четыре') end; readln end. Переменная Num является селектором в операторе case. По значению селектора происходит переход на соответствующую метку. |
Селектор должен принадлежать к порядковому типу (то есть он не может иметь тип real)!
При переходе на метку может выполняться целый блок операторов, который оформляется с помощью структуры begin ... end.
При записи меток в операторе case можно использовать интервальный тип. Например, интервал для латинских заглавных букв записывается: 'A'. .'Z'. Если нужно учесть строчную латиницу, то интервал для меток будет выглядеть так: 'A'. .'Z','a'. .'z'.
Пример .5. Определение номера квартала по введенному номеру месяца
Program Digit; var Num:integer; begin write('Введите номер месяца:'); readln(Num); case Num of 1,2,3 : writeln('Первый квартал'); 4,5,6 : writeln('Второй квартал'); 7.. 9 : writeln('Третий квартал'); { метка 7..9 - интервал чисел от 7 до 9: то же самое, что и 7,8,9} 10..12: writeln('Четвертый квартал') else writeln('Некорректный ввод') end; readln end.
Пример №6 Определить является ли введенное с клавиатуры число четным или нечетным.
program pr7;
var n:integer;
begin
writeln('Введите число');
read(n);
case n mod 2 of
1: writeln(n,'- нечетное');
0: writeln(n,'- четное');
end;
end.
Пример №7 Следующая программа по номеру месяца определяет время года.
program pr8;
var month: integer;
begin
writeln('Введите число - номеp месяца');
read(month);
case month of
12,1,2: writeln(month,' - зимний месяц');
3,4,5: writeln(month,' - весенний месяц');
6,7,8: writeln(month,' - летний месяц');
9,10,11: writeln(month,' - осенний месяц');
else writeln('Пpо это мне неизвестно!');
end;
end.
Пример №8 Составим программу, имитирующую работу простейшего калькулятора, выполняющего четыре арифметических действия.
program pr9;
var
op: char ;{Арифметическая операция}
x,y,z: real;{Операнды и результат}
begin
write('x,y=');
readln(x,y);
write('Введите аpифметическую опеpация:');
readln(op);
case op of
'*': begin z := x* y; writeln('z=',z);end;
'/': begin z := x/ y; writeln('z=',z);end;
'+': begin z := x+y; writeln('z=',z);end;
'-': begin z := x- y; writeln('z=',z);end;
else writeln('Увы! Это не аpифметическая опеpация.' );
end;
end.
Выводы
1. Существуют задачи, решение которых включает анализ логического условия. Такие задачи описываются разветвляющимся алгоритмом (сравните с линейным алгоритмом).
2. При ветвлении анализируется логическое выражение и, в зависимости от его результата, выполняется та или иная ветвь алгоритма.
3. В Паскале оператор ветвления называется if. Он имеет две формы записи — полную и неполную.
4. При полной форме записи if в случае истинности логического условия выполняется один блок программы (после слова then), а в случае ложности — другой (после слова else).
5. При неполной записи оператора if блок else опускается.
6. При переходе на ту или иную ветвь алгоритма после анализа логического условия возможно выполнение блока операторов, который оформляется с помощью структуры begin ... end.
7. Точка с запятой слева и справа от then и от else не ставится.
8. В случае, когда анализируемое выражение может иметь более двух значений, и при разных значениях нужно выполнять разные инструкции, используют оператор case.
9. Оператор case должен заканчиваться ключевым словом end. Это один из тех редких случаев, когда количество операторов begin в программе не будет совпадать с количеством операторов end
10. Чтобы текст программы был более понятен, вложенные (подчиненные) блоки операторов принято оформлять со сдвигом вправо, лесенкой. При каждом следующем вложении операторы сдвигают еще на несколько позиций вправо.
