Полная команда ветвления

Рассмотрим одну и ту же ситуацию при покупке товара:
Если товар качественный — то покупаем.
Если товар некачественный — то не покупаем.
Как видим на одну ситуацию мы тратим два варианта проверки условия.
Еще пример. Найти максимум из двух чисел:
Если А>В ТО максимум А;
Если В>А ТО максимум В;
Опять таки. Ситуация одна — ветвления — два.
А вот нельзя ли как-то сделать так, что бы коддить одну строку?

Внесем в наши ранее рассмотреннык команды слово ИНАЧЕ или по английски ELSE.
ЕСЛИ (товар качественный) — ТО покупаем ИНАЧЕ не покупаем;
ЕСЛИ (А>В) ТО максимум А ИНАЧЕ максимум В;
После слова ИНАЧЕ идут действия, которые выполняются если условие НЕ истинно, а ложно.Слова истина (TRUE) и ложь (FALSE) нам пригодятся в будущем. Жедательно их запомнить.
Так как же будут выглядеть наши программы в свете новых знаний?
Для одного действия вид будет такой:

If <условие истинно> Then <действие 1> Else <действие 2>

На выбор по несколько действий:


  1. Вариант 1

     IF <условие истинно> then BEGIN
     <действие 1>;
     <...>;
     <действие n>;
     END
     ELSE <действие 2>;
  2. Вариант 2

    IF <условие истинно> then <действие 1>
     ELSE BEGIN
     <действие 2>;
     <...>;
     <действие n>;
     END;
  3. Вариант 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 знак точка с запятой (;) НЕ СТАВИТСЯ

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

0 0 vote
Article Rating
Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments