Урок 8. Блок-схема оператора if


if

В предыдущих уроках мы рассмотрели наиболее простой, линейный тип алгоритмов. Напомню, что всего существует три типа: линейные, разветвляющиеся и циклические (алгоритмы с повторениями). В этом уроке я расскажу вам о втором типе алгоритмов — об алгоритмах с ветвлениями.

Ветвления

Ветвление – это команда алгоритма, в которой делается выбор, выполнять или не выполнять какую-нибудь группу команд в зависимости от условий.

Ветвление используется в двух случаях:

  1. Когда требуется пропустить определенную команду или группу команд.
  2. Когда нужно записать выбор тех или иных действий в зависимости от условия.

В блок-схеме условие ветвления изображается в ромбе, из которого обязательно выходят ДВЕ стрелки – первая (стрелка «Да») указывает на команды, которые будут выполняться в случае, если условие соблюдено; вторая (стрелка «Нет») – на команды, которые будут выполнены, если условие не соблюдено. Даже если команда, на которую указывает одна из стрелок (Чаще всего «Нет») отсутствует, стрелка все равно имеет место быть.

Алгоритм ветвления
Алгоритм с ветвлением, представленный в виде блок-схемы.

В словесной формулировке запись ветвления выглядит так:

ЕСЛИ <условие выбора > ТО <команды, выполняемые при соблюдении условия> ИНАЧЕ <команды, выполняемые при несоблюдении условия>

Реализация ветвления в Паскаль.

Как же реализовать ветвление в Паскаль? Проще, чем вы думаете:
if <условие выбора > then <команды, выполняемые при соблюдении условия> else <команды, выполняемые при несоблюдении условия>

Запомните! Перед else никогда не ставят точку с запятой!

Давайте поговорим об условии выбора. Понятно, что этологическое выражение. Если оно является правдой, то выполняется главная ветвь, если ложь, то боковая ветвь.

Задачи из блока if.

Рассмотрим несколько задач из сборника М.Э.Абрамяна «1000 задач по программированию».

If1. Дано целое число. Если оно является положительным, то прибавить к нему 1; в противном случае не изменять его. Вывести полученное число.

В данной программе даже не надо реализовывать боковую ветвь.

sXr13UnZ7bE

program if1;

var
  a: integer;

begin
  read(a);
  if a > 0 then Inc(a);
  write(a);
end.

If2. Дано целое число. Если оно является положительным, то прибавить к нему 1; в противном случае вычесть из него 2. Вывести полученное число.

if2

program if2;

var
  a: integer;

begin
  read(a);
  if a > 0 then Inc(a) else a -= 2;
  write(a);
end.

If3. Дано целое число. Если оно является положительным, то прибавить к нему 1; если отрицательным, то вычесть из него 2; если нулевым, то заменить его на 10. Вывести полученное число.

Для того чтобы решить эту задачу мы должны использовать вложенный if.

if3 510x648
Мы работаем в PascalABC.NET. Только в этой СР есть возможность написать а -= 2.
program if3;

var
  a: integer;

begin
  read(a);
  if a >= 0 then 
    if a = 0 then a := 10 else Inc(a) {перед else нет точки с запятой.}
   else a -= 2;
  write(a);
end.

If5. Даны три целых числа. Найти количество положительных и количество отрицательных чисел в исходном наборе.

if5
Длиннющая блок-схема. 🙂
program if5;

var
  a, b, c, plus, minus: integer;

begin
  write('Введите три целых числа: ');
  read(a, b, c);
  plus := 0;
  minus := 0;
  if a > 0 then Inc(plus) else Inc(minus);
  if b > 0 then Inc(plus) else Inc(minus);
  if c > 0 then Inc(plus) else Inc(minus);
  writeln('Количество положительных чисел - ', plus);
  writeln('Количество отрицательных чисел - ', minus);
end.

If30. Дано целое число, лежащее в диапазоне 1–999. Вывести его строку-описание вида «четное двузначное число», «нечетное трехзначное число» и т. д.

if30

program if30;

var
  a: integer;

begin
  write('Введите число: ');
  read(a);
  if Odd(a) then write('Нечетное ') else write('Четное ');
  if a >= 100 then write('трехзначное число') else
    if a < 10 then write('однозначное число') else write('двухзначное число');
end.

Вот и все! Не забывайте кликать по кнопочкам и добавлять наш сайт в закладки!

  1. http://i2.wp.com/learnpascal.ru/wp-content/uploads/2014/02/if30.jpg?resize=510%2C819
    Где идет проверка на a>10 знаки спутали (> и <)

  2. Рад помочь, хорошему сайту =) Вы потом такие же уроки по другим языкам выкладывайте… Например С++…

  3. времени не хватает. может года через три — четыре learnc откроем, а может learnpython

  4. Вы будете смеяться, но весь этот сайт — результат двухлетней работы пары школьников. Сейчас мы уже в институте, и времени на все это решительно не хватает. Наверное, ничего так и не появится. А возможно, пройдет еще несколько лет, и мы все же решим осуществить что-нибудь такое. Кто знает 🙂

  5. Я, на самом деле, даже подумывала на каникулах написать пару статей про алгоритмы.
    Различные сортировки и реализации каких-нибудь примитивненьких структур вроде кучи, деревьев и т.д.
    Но как-то руки так и не дошли 🙁

  6. Даны два угла треугольника (в градусах). Определить, существует ли такой треугольник, и если да, то будет ли он прямоугольным

  7. Смысл тогда в такой задаче? оно в любом случае будет трехзначным

  8. Спасибо огромное вашему сайту, буду так же с нетерпением ждать на С++
    вы лучшие

  9. Как придать цикличность этой программе?

    program calc;
    uses crt;
    var a, b, sum, min, umn, del: real;
    begin
    write (‘Введите 2 числа(через пробел)’);
    read(a,b);
    sum := a+b;
    min := a-b;
    umn := a*b;
    del := a/b;
    writeln (‘Сложение = ‘,sum);
    writeln (‘Вычитание = ‘,min);
    writeln (‘Умножение = ‘,umn);
    write (‘Деление = ‘,del:5:1);
    readkey;
    end.

  10. If5. Даны три целых числа. Найти количество положительных и количество отрицательных чисел в исходном наборе.
    А что если в вашу блок-схему попадет 3 нуля? Вывод будет 3 отрицательных?

  11. После введения chose1=Нет,программа исполняет комманды при условии chose1=Да,что делать?
    program justtryit;
    var
    name:string;
    chose1:string;
    chose2:string;
    chose3:string;

    begin
    Writeln(‘Имя: ‘);
    Readln(name);
    Writeln(name,’ сегодня ты попадешь в странную страну,в которой есть страх и голод,выживешь или нет,все зависит от твоего выбора’);
    Writeln(‘Ты готов?(Да/Нет): ‘);
    Readln(chose1);
    if chose1=’Нет’ then
    Writeln(‘Чтоже,тогда закрывай программу’);
    if chose1=’Да’ then
    Writeln(‘Тогда начнем’);
    Writeln(‘Ты просыпаешся в кровати от стука в окно.’);
    Writeln(‘Тебе страшно,но интересно,ведь ты живешь на 6 етаже:Спать дальше/Подойти к окну’);
    Readln(chose2);
    if chose2=’Подойти к окну’ then
    Writeln(‘Только подошел к окну и увидел тварь с черными глазами и она потянулась за тобой в окно’);
    if chose2=’Спать дальше’ then
    Writeln(‘Ты все испортил,скучный чел’);
    Readln;
    end.
    И еще,у меня при запуске проги через ЕХЕ файл,рус яз не одображается,что делать?

  12. Прошу исправить If5. Правильное решение этой задачи выглядит вот так:
    program if5;

    var
    a, b, c, plus, minus: integer;

    begin
    write(‘Введите три целых числа: ‘);
    read(a);
    read(b);
    read(c);
    plus := 0;
    minus := 0;
    if a > 0 then Inc(plus)
    else if a 0 then Inc(plus)
    else if b 0 then Inc(plus)
    else if c < 0 then Inc(minus);
    writeln('Количество положительных чисел: ', plus);
    writeln('Количество отрицательных чисел: ', minus);
    end.

  13. у вас просто другой алгоритм и тем более вы тоже забыли приравнять ваши условия к 0
    var
    a, b, c, plus, minus: integer;

    begin
    write(‘Введите три целых числа: ‘);
    read(a);
    read(b);
    read(c);
    plus := 0;
    minus := 0;
    if a >= 0 then Inc(plus)
    else if a = 0 then Inc(plus)
    else if b = 0 then Inc(plus)
    else if c < 0 then Inc(minus);
    writeln('Количество положительных чисел: ', plus);
    writeln('Количество отрицательных чисел: ', minus);
    end.

  14. var

    a, b, c, plus, minus: integer;

    begin

    write(‘Введите три целых числа: ‘);

    read(a, b, c);

    plus := 0;

    minus := 0;

    if a >= 0 then Inc(plus) else Inc(minus);

    if b >= 0 then Inc(plus) else Inc(minus);

    if c >= 0 then Inc(plus) else Inc(minus);

    writeln(‘Количество положительных чисел — ‘, plus);

    writeln(‘Количество отрицательных чисел — ‘, minus);

    end.
    там вы знак равно забыли если не будет >=0 то когда будете вводить три 0 то оно воспримет ее как отрицательное число

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *