Рассмотрим одну и ту же ситуацию при покупке товара:
Если товар качественный — то покупаем.
Если товар некачественный — то не покупаем.
Как видим на одну ситуацию мы тратим два варианта проверки условия.
Еще пример. Найти максимум из двух чисел:
Если А>В ТО максимум А;
Если В>А ТО максимум В;
Опять таки. Ситуация одна — ветвления — два.
А вот нельзя ли как-то сделать так, что бы коддить одну строку?
Внесем в наши ранее рассмотреннык команды слово ИНАЧЕ или по английски ELSE.
ЕСЛИ (товар качественный) — ТО покупаем ИНАЧЕ не покупаем;
ЕСЛИ (А>В) ТО максимум А ИНАЧЕ максимум В;
После слова ИНАЧЕ идут действия, которые выполняются если условие НЕ истинно, а ложно.Слова истина (TRUE) и ложь (FALSE) нам пригодятся в будущем. Жедательно их запомнить.
Так как же будут выглядеть наши программы в свете новых знаний?
Для одного действия вид будет такой:
If <условие истинно> Then <действие 1> Else <действие 2>
На выбор по несколько действий:
Вариант 1
IF <условие истинно> then BEGIN <действие 1>; <...>; <действие n>; END ELSE <действие 2>;
Вариант 2
IF <условие истинно> then <действие 1> ELSE BEGIN <действие 2>; <...>; <действие n>; END;
Вариант 3
IF <условие истинно> then BEGIN <серия 1>; <...>; <серия n>; END ELSE BEGIN <действие 2>; <...>; <действие n>; END;
ВАЖНО!!! Перед ELSE знак точка с запятой (;) НЕ СТАВИТСЯ.
Рассмотрим примеры из предыдущего материала.
Пусть дано 2 числа А и В, которые не равны между собой. Найти максимальное.
Ранее мы писал код так.
Если А>В ТО максимум А;
Если В>А ТО максимум В;
а теперь (как вариант)
Если А>В ТО максимум А ИНАЧЕ максимум В;
На паскале это будет выглядеть следующим образом (перевод на английский язык)
If (a>b) then max:=a; If (b>a) then max:=b;
или
If (a>b) then max:=a Else max:=b;
Еще раз обращаю Ваше внимание на то, что условие берётся в скобки.
Теперь полное решение задачи:
var a, b:real; max:real; BEGIN write('Nomber A=');readln(a); write('Nomber B=');readln(b); If (a>b) then max:=a; If (b>a) then max:=b; Writeln('Max nomber is', max); write('Press Enter to Exit'); readln; END.
var a, b:real; max:real; BEGIN write('Nomber A=');readln(a); write('Nomber B=');readln(b); If (a>b) then max:=a else max:=b; Writeln('Max nomber is', max); write('Press Enter to Exit'); readln; END.
Снова задача из ранее изученного. Дано 2 числа А, которые не равны между собой. Найти разницу между большим и меньшим.
var a, b:real; resalt:real; BEGIN write('Nomber A=');readln(a); write('Nomber B=');readln(b); If (a>b) then begin resalt:=a-b; writeln('Resalt=',resalt); end; If (b>a) then begin resalt:=b-a; writeln('Resalt=',resalt); end;; Write('Press Enter to Exit'); readln; END.
var a, b:real; resalt:real; BEGIN write('Nomber A=');readln(a); write('Nomber B=');readln(b); If (a>b) then begin resalt:=a-b; writeln('Resalt=',resalt); end else begin resalt:=b-a; writeln('Resalt=',resalt); end;; Write('Press Enter to Exit'); readln; END.
Задача: Дано 2 числа, найти частное от деления А на В.
Решение сделаем красиво. Если результат есть — пишем все зелеными буквами. ИНАЧЕ — аварийное сообщение выводим красными буквами.
Uses Crt; var a, b:real; div_ab:real; BEGIN ClrScr; write('Nomber A=');readln(a); write('Nomber B=');readln(b); if b<>0 then begin textcolor(green); div_ab:=a/b; Writeln('Resalt nomber is', div_ab:2:2); end; if b=0 then begin textcolor(red); Writeln('Error. Divizio by Zero'); end; write('Press Enter to Exit'); readln; END.
Uses Crt; var a, b:real; div_ab:real; BEGIN ClrScr; write('Nomber A=');readln(a); write('Nomber B=');readln(b); if (b<>)0 then begin textcolor(green); div_ab:=a/b; Writeln('Resalt nomber is', div_ab:2:2); end else begin textcolor(red); Writeln('Error. Divizio by Zero'); end; write('Press Enter to Exit'); readln; END.
Продолжим учить компьютер искать квадратный корень из целого числа. Из курса школы мы знаем, что добывать квадратный корень можно только из положительного числа.
Дано целое число А. найти корень квадратный из числа А и вывести с 3 знаками после запятой.
Сокращенная форма команды ветвления:
Uses Crt; var a:integer; resalt:real; BEGIN ClrScr; write('Nomber A=');readln(a); if (a>=0) then begin textcolor(green); resalt:=sqrt(a); Writeln('Resalt is', resalt:3:3); end; if (a<0) then begin textcolor(red); Writeln('Error. Argument < 0 '); end; write('Press Enter to Exit'); readln; END.
Полная форма команды ветвления:
Uses Crt; var a:integer; resalt:real; BEGIN ClrScr; write('Nomber A=');readln(a); if (a>=0) then begin textcolor(green); resalt:=sqrt(a); Writeln('Resalt is', resalt:2:2); end else begin textcolor(red); Writeln('Error. Argument < 0 '); end; write('Press Enter to Exit'); readln; END.
Что нужно запомнить:
1. Общую структуру команды для 1 действия
If <условие истинно> Then <действие 1> Else <действие 2>
На выбор по несколько действий:
If <условие истинно> then begin <действие 1>; <...>; <действие n>; end ELSE <действие 2>;
If <условие истинно> then <действие 1> ELSE begin <действие 2>; <...> <действие n> end;
If <условие истинно> then begin <серия 1>; <...>; <серия n>; end ELSE begin <действие 2>; <...> <действие n> end;
2. ВАЖНО!!! Перед ELSE знак точка с запятой (;) НЕ СТАВИТСЯ