Программирование Pascal. Ветвление.
Яндекс.Метрика
Разделы.
Условный оператор IF 
Определение. Разветвляющимся называется такой алгоритм, в котором выбирается один из нескольких возможных вариантов вычислительного процесса. Каждый подобный путь называется ветвью алгоритма.
Признаком разветвляющегося алгоритма является наличие операций проверки условия. Различают два вида условий - простые и составные.
Простым условием (отношением) называется выражение, составленное из двух арифметических выражений или двух текстовых величин (иначе их еще называют операндами), связанных одним из знаков:
   
<    - меньше, чем...
 
   >    - больше, чем...
    
<=    - меньше, чем... или равно
   
>=    - больше, чем... или равно
   
<>    - не равно
  
  =    - равно
 
В общем случае полная форма конструкции условного оператора имеет вид:
if  <логическое выражение>  then  <оператор 1> else    <оператор 2>
 
 
if
читается "иф"
переводится  "если"
then
читается "зэн"
переводится  "то"
else
читается "элз"
переводится  "иначе"
 
Условный оператор работает по следующему алгоритму.
Сначала вычисляется значение логического выражения, расположенного за служебным словом IF. Если его результат истина, выполняется <оператор 1>, расположенный после слова THEN, а действия после ELSE пропускаются; если результат ложь, то, наоборот, действия после слова THEN пропускаются, а после ELSE выполняется <оператор 2>.
 
Рассмотрим пример.
 
Задача.
 Вывести на экран большее из двух данных чисел.
 
Var
    x, y : integer;
{вводимые числа}
Begin
    writeln('Введите 2 числа ');
{вводим два целых числа через пробел}
    readln(x,y);
    if x>y
      then
          writeln (x)  {
если х больше y, то выводим х}
      else
          writeln (y) 
{иначе выводим y}
     
End.
Можно также использовать и сокращенную (неполную) форму записи условного оператора.
 Эта форма  используется тогда, когда в случае невыполнения условия ничего делать не надо.
Неполная форма условного оператора имеет следующий вид.
if  <логическое выражение>
 
then
      <оператор>
Тогда если выражение, расположенное за служебным словом IF. в результате дает истину, выполняются действия после слова THEN, в противном случае эти действия пропускаются.
Управляющая структура if может показаться негибкой, так как выполняемые действия могут быть описаны только одним оператором. Иногда может потребоваться выполнение последовательности операторов. В этом случае хотелось бы заключить всю последовательность в воображаемые скобки. В Паскале предусмотрен этот случай.
Если в качестве оператора должна выполниться серия операторов, то  они заключаются в операторные скобки begin-end. Конструкция Begin ... End называется составным оператором.
if  <логическое выражение>
  
then
      begin
         оператор 1;
         оператор 2;
         ...
      
end
  else
 
      
begin
        оператор 1;
        оператор 2;
         ...
      
end;
 
Определение. Составной оператор - объединение нескольких операторов в одну группу. Группа операторов внутри составного оператора заключается в операторные скобки (begin-end).
begin
    оператор 1;
    оператор 2;
end;
Перед служебным словом Else разделитель (точка с запятой) не ставится.
 
 
Примеры программ с IF
Составить программу, которая предлагает Ивану-Царевичу выбрать правильное направление пути.
У Ивана-Царевича есть три варианта дальнейшего пути:
направо,   - «Коня потеряешь»
налево,   - «Голову сложишь»
 вперед.    - «Невесту найдешь»
 
Var p :string;
Begin
WriteLn (‘Куда путь держишь?’);
ReadLn (p);
If p=‘направо’  then  writeLn (‘Коня потеряешь’);
If p=‘налево’  then  writeLn (‘Голову сложишь’);
If p=‘прямо’  then  writeLn (‘Невесту найдешь’);
ReadLn;
End.
пример выполнения программы
 
Куда путь держишь?
прямо
Невесту найдешь
Куда путь держишь?
направо
Коня потеряешь
 
Заданы длины сторон треугольника, определить, является ли этот треугольник прямоугольным.
 
Program sum3;
Var a,  b, c: real;
Begin
Readln ( a, b,с );
If a*a + b*b = c*c   then writeln (‘треугольник прямоугольный’)
else writeln (‘не прямоугольный’);
Readln;
End.
 
пример выполнения программы
 
Длина первой стороны
3
Длина второй стороны
4
Длина третьей стороны
5
треугольник прямоугольный
Вложенные операторы if.
При решении задач часто приходится рассматривать не два, а большее количество вариантов. Это можно реализовать, используя несколько условных операторов. В этом случае после служебных слов Then и Else записывается новый условный оператор.
Итак, когда оператор if появляется внутри другого оператора if, они считаются
вложенными. Такое вложение используется для уменьшения числа необходимых проверок. Этот метод часто обеспечивает большую эффективность, однако одновременно он уменьшает наглядность программы. Не рекомендуется использовать более одного-двух уровней вложения if. За вторым уровнем вложения становится трудно восстановить последовательность проверки условий каждым условным оператором.
Пример
Снаряд должен попасть  в промежуток между 30 и 40 км.
Если он попадает в данный промежуток то появляется надпись «Попал», иначе если не долетел «Недолет» или «Перелет»
 
if x >= 30 then
     
if x <= 40 then 
          writeln (‘Попал') - 
вложенный условный оператор
     else writeln (‘Перелет')
   else
     writeln ('Недолет');
 
Примеры программ
var a,b :integer;
 imya : string;
 d :char;
 begin
 Writeln ('Как тебя звать?');
 Readln (imya);
 Writeln ('Чем займемся ',imya,'  сложением или умножением?');
 Readln (d);
 If d='+' then  
begin
Writeln ('Введите первое число');
 Read(a);
 Writeln ('Введите второе число');
 Read(b);
  Writeln ('Сумма чисел = ',a+b);
 end
  else  
begin
   Writeln ('Введите первое число');
 Read(a);
 Writeln ('Введите второе число');
 Read(b);
  Writeln ('Произведение чисел = ',a*b);
  end;
  end.
 
 
Диалог с компьютером
 
Компьютер : «Как тебя звать?»
Пользователь: «Вася»
Компьютер: Чем займемся Вася сложением или умножением?»
Пользователь вводит знак «+» или «*»
Если «+»:
Компьютер: «Введите первое число»
а
Компьютер: «Введите второе число»
b
Компьютер: Сумма чисел = ……»
Если «*»:
Компьютер: «Введите первое число»
а
Компьютер: «Введите второе число»
b
Компьютер: Произведение  чисел = ……»
program qq;
    var x: integer;
    begin
   writeln('Введите возраст');
   read ( x );
   if x >= 25 then
     if x <= 40 then 
          writeln ('Подходит')
     else writeln ('Не подходит')
   else
     writeln ('Не подходит');
    end.
Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ «подходит» или «не подходит»).
 
Сложные условия
Логические операции not, and, or.
Сложное условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций:
not – НЕ (отрицание, инверсия)
and – И (одновременное выполнение условий)
or – ИЛИ (выполнение хотя бы одного из условий)
 
Порядок выполнения (приоритет = старшинство)
выражения в скобках
not
and
or
<, <=, >, >=, =, <>
Особенность – каждое из простых условий обязательно заключать в скобки.
Пример
 
if not (a > b) or (c <> d) and (b <> a)
then begin
  ...
end
Сравните программы:
вложенное условие
 
var x: integer;
    begin
   writeln('Введите возраст');
   read ( x );
   if x >= 25 then
     
if x <= 40 then 
          writeln ('Подходит')
     else writeln ('Не подходит')
   else
     writeln ('Не подходит');
    end.
составное условие
 
var x: integer;
    begin
   writeln('Введите возраст');
   read ( x );
   if
(x >= 25)and ( x <= 40 )
then 
          writeln ('Подходит')
     else writeln ('Не подходит')
    end.
Примеры программ с сложными условиями.
Человек вводит с клавиатуры строку, смысл которой - приветствие при встрече. Компьютер тоже должен ответить приветствием.
Отвечать нужно в соответствии со следующей таблицей:
VAR     a,b     :String;     {a-ПРИВЕТСТВИЕ ЧЕЛОВЕКА, b-ОТВЕТ КОМПЬЮТЕРА}
BEGIN
    ReadLn (a);
    
if  a=‘Привет'                                        then Writeln (‘Привет ‘);
    
if  (a='Здорово‘) OR (a='Здравствуйте')        
then Writeln ('Здравствуйте‘);
    
if(a='Добрыйдень')OR(a='Приветик')OR(a='Салют')    then Writeln ('Салют‘);
    
END.
   Оператор варианта case
В Паскале есть специальный оператор, который позволяет делать выбор одной из нескольких возможностей. Рассмотрим программу, спрашивающую у ученика его отметку по чистописанию и реагирующую на нее подходящим текстом:
 
VAR
     Otmetka: Integer;
begin
    WriteLn ('Какую отметку ты получил по чистописанию?');
    ReadLn (Otmetka);
   
CASE otmetka OF     {Перевод: В СЛУЧАЕ ЕСЛИ отметка РАВНА...}
        1,2        :WriteLn('Кошмар!');
        3        :WriteLn('Неважно');
        4        :WriteLn('Неплохо');
        5        :WriteLn('Молодец!')
;
        
ELSE     WriteLn('Таких отметок не бывает')
    
END                                {Конец оператора CASE}
end.
Основой программы является оператор варианта CASE (читается "кэйс", переводится "случай"). Предлог OF читается "эв". Весь оператор CASE нужно понимать так:
В СЛУЧАЕ ЕСЛИ отметка РАВНА
    1 или 2     печатай 'Кошмар!'
    3           печатай 'Неважно'
    4           печатай 'Неплохо'
    5           печатай 'Молодец!'
    ИНАЧЕ        печатай 'Таких отметок не бывает'
КОНЕЦ оператора case
 
В
процессе исполнения оператора case компьютер сравнивает значение переменной Otmetka по очереди со всеми значениями, перечисленными перед двоеточиями. Наткнувшись на совпадающее значение, он выполняет оператор, стоящий после двоеточия. На этом исполнение оператора case завершается. Если же совпадающего значения так и не нашлось, то выполняется оператор, стоящий после слова else (в нашей программе он полезен на тот случай, если ученик болен манией величия и вводит число 6). После else может стоять и цепочка операторов, записанных через точку с запятой.
У оператора case есть существенное ограничение - переменная, стоящая после слова case, должна быть так называемого
порядкового типа.
в качестве переменной-селектора можно использовать переменную целого (integer) или символьного (char) типа.
 
Var
    a  : integer;
Begin
    writeln('Введите цифру ');
    readln(a);
    case a of
        0 : write ('ноль');
        1 : writeln ('один');
        2 : writeln ('два');
        3 : writeln ('три');
        4 : writeln ('четыре');
        5 : writeln ('пять');
        6 : writeln ('шесть');
        7 : writeln ('семь');
        8 : writeln ('восемь');
        9 : writeln ('девять')
        else writeln ('Это число не является цифрой');
   end;
End.
Написать программу преобразования цифр в слова.
 
Пример вывода программы
 
Введите цифру
ф
Это число не является цифрой
Введите цифру
5 -пять
6 -шесть
1 -один
 
Самостоятельная работа
 1.Написать программу вычисления стоимости покупки с учетом скидки. Скидка в 10% предоставляется, если сумма покупки больше 1000 руб. Ниже представлен рекомендуемый вид экрана во время работы программы
 
Введите сумму покупки  1200
Вам предоставляется скидка 10%
Сумма покупки с учетом скидки: 1080.00 руб
 
2. Написать программу, которая сравнивает два числа, введенных с клавиатуры. Программа должна указать, какое число больше, или, если числа равны, вывести соответствующее сообщение.
 
Введите два целых числа
 34    67
34 меньше 67.
 
3. Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ  до 25 лет – «Еще молод», старше 40 – «Пора на покой», 25 – 40 – «Вы нас устраиваете». )
 
4. Написать алгоритм, который по номеру дня недели - целому числу от 1 до 7
 выдавать в качестве результата
название  уроков в классе в соответствующий день.
 
 
 
   
статьи
       практика
       Тесты
       задания В
       заданияС
 
   
Обзоры
       Циклы в Pascal
       Без имени
Флеш - презентация "Условные опрераторы Pascal.