Pascal: Занятие №2. Часть 1: Условный оператор в Паскале (If)

На занятии рассматривается условный оператор в Паскале (if). Объясняется, как использовать несколько условий в одной конструкции (AND и OR). Рассмотриваются примеры работы с оператором

Напоминаем, что данный сайт не претендует на полное изложение информации по теме. Целью портала является предоставление возможности усваивания материала на основе готовых решенных примеров по теме «Язык программирования Pascal» с практическими заданиями для закрепления материала. Представленные на сайте labs-org.ru задания по Паскалю выстроены последовательно по мере увеличения их сложности. Сайт labs-org.ru может быть использован учителями и преподавателями в качестве вспомогательного наглядного пособия.

Условный оператор в Паскале

До рассмотрения данной темы в основном использовались линейные алгоритмы в Паскале, характерные для весьма простых задач, когда действия (операторы) выполняются последовательно, одно за другим. Более сложные алгоритмы предусматривают использование конструкция ветвления.

Блок-схема условного оператора:
условный оператор в паскале блок-схема
Условный оператор в Паскале имеет следующий синтаксис:

Сокращенный вариант:

if условие then
   оператор;

Полный вариант:

if условие then
   оператор
else
   оператор;

Условный оператор в Паскале — if — служит для организации хода задачи таким образом, при котором изменяется последовательность выполнения операторов в зависимости от какого-либо логического условия. Логическое условие может принимать одно из двух значений: либо true (истина), либо false (ложь), соответственно, оно может быть либо истинным, либо ложным.

неполная форма ветвления

Составной оператор

Если при истинном условии необходимо выполнять несколько операторов, то их по правилам языка Pascal необходимо заключать в блок, начинающийся со служебного слова begin и заканчивающегося служебным словом end. Такой блок принято называть операторными скобками, а данную конструкцию — составным оператором:

Операторные скобки и составной оператор в Паскале:

if логическое выражение then
begin
     оператор1;
     оператор2;
end
else
begin
     оператор1;
     оператор2;
end;

Перевод с английского оператора условия облегчит понимание его использования:

IF THEN ELSE
ЕСЛИ ТО ИНАЧЕ

Условный оператор в Паскале
В условии (в логическом выражении) используются операторы отношения.
Рассмотрим список операторов отношения Паскаля:

  • больше >
  • меньше <
  • больше или равно в Pascal >=
  • меньше либо равно в Pascal <=
  • сравнение в Pascal =
  • не равно в Pascal <>
Пример: найти наибольшее из двух чисел
Вариант 1 Вариант 2
1_11 2

Подробно разобраться в работе условного оператора в Паскале можно, просмотрев видеоурок:
youTube

Пример: вычислить значение переменной у по одной из двух ветвей

условный оператор

Показать решение:

Pascal PascalABC.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
var
 x,y:real;
begin
writeln ('введите х');
read(x);
if x>0 then
 y:=ln(x)
else
 y:=exp(x);
writeln ('y=', y:6:2) 
{итоговое число будет занимать 6 позиций,
и в нем будет 2 знака после запятой}
end.
1
2
3
4
5
6
7
8
9
begin
var x:=readReal('введите х');
var y: real;
if x>0 then
 y:=ln(x)
else
 y:=exp(x);
writeln ('y=', y:6:2)
end.

Обратите внимание на то, как в данном примере выводится y. При выводе переменных типа real в pascal, можно использовать так называемый форматированный вывод, или запись с двумя двоеточиями:
y:6:2
- цифра после первого двоеточия (6) указывает на то, сколько знаков будет занимать число при выводе на экран
- цифра после второго двоеточия (2) указывает на то, сколько знаков после запятой вещественного числа будет выводиться

Таким образом, использование такой записи в pascal практически позволяет выполнить округление до сотых, тысячных и т.п.

Задача 0. Вычислить значение переменной у по одной из двух ветвей:
условный оператор в паскале

[Название файла: L2task0.pas]

Задача 1. В компьютер вводятся два числа. Если первое больше второго, то вычислить их сумму, иначе - произведение. После этого компьютер должен напечатать результат и текст ЗАДАЧА РЕШЕНА

[Название файла: L2task1.pas]

Задача 2. Дракон каждый год отращивает по три головы, но после того, как ему исполнится 100 лет - только по две. Сколько голов и глаз у дракона, которому N лет?

[Название файла: L2task2.pas]

Логические операции в Паскале (в логическом выражении)

Когда необходимо использовать двойное условие в Pascal, то понадобятся логические операции.

  • Логическая операция AND (И), поставленная между двумя условиями, говорит о том, что должны выполняться сразу оба эти условия (должны быть истинными). Логический смысл операции - "конъюнкция".
  • Поставленный между двумя условиями, знак OR (ИЛИ) говорит о том, что достаточно, если будет выполняться хотя бы одно из них (одно из двух условий истинно). Логический смысл операции - "дизъюнкция".
  • На языке Паскаль XOR - знак логической операции, имеющий смысл "строгая дизъюнкция" и указывающий на то, что необходимо, чтобы одно из двух условий выполнялось (истинно), а другое - не выполнялось (ложно).
  • Логическая операция NOT перед логическим выражением или переменной имеет смысл "отрицание" или "инверсия" и указывает на то, что если данная переменная или выражение истинны, то их отрицание — ложь и наоборот.
  • Таблица истинности, содержащая все возможные комбинации операндов:

    A B not A A or B A and B A xor B
    False False True False False False
    False True True True False True
    True False False True False True
    True True False True True False
Важно: Каждое из простых условий обязательно заключать в скобки.
Пример: Рассмотрим примеры логических операций в логических выражениях в Паскале
1
2
3
4
5
6
7
8
var n:integer;
begin
n:=6;
if (n>5) and (n<10) then writeln('истина');
if (n>7) or (n<10) then writeln('истина');
if (n>7) xor (n<10) then writeln('истина');
if not(n>7) then writeln('истина');
end.
Пример: Компания набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он для данной компании (вывести ответ «подходит» или «не подходит»).
Особенность: надо проверить, выполняются ли два условия одновременно.
Вариант 1 Вариант 2
1 сложные условия
Пример: Дано целое число A. Проверить истинность высказывания: «Число A является нечетным».
Открыть решение:

1
2
3
4
5
6
7
8
9
10
11
var
  a,b: integer;
begin
  write('Введите A: ');
  read(a);
  b := a mod 2;
  if b>0 then
     writeln('true')
  else
      writeln ('false')
end.

Или проще:

1
2
3
4
5
6
7
8
var
  a,b: integer;
begin
  write('Введите A: ');
  read(a);
  b := a mod 2;
  writeln(b>0);
end.
Задача 3. Дано целое число A. Проверить истинность высказывания: «Число A является положительным».

[Название файла: L2task3.pas]

Задача 4. Человек вводит в компьютер число. Если оно находится в интервале от 28 до 30, то нужно напечатать текст ПОПАЛ, если оно больше или равно 30 - то ПЕРЕЛЕТ, если оно находится на отрезке от 0 до 28, то НЕДОЛЕТ, если число меньше нуля — НЕ БЕЙ ПО СВОИМ

[Название файла: L2task4.pas]

  
Рассмотрим функции pascalABC.NET, которые возвращают логическое значение true или false:

n.Divs(m) возвращает True, если целое n делится на m без остатка (n mod m = 0);
n.DivsAll(m1, m2, ... mn) возвращает True, если целое n делится без остатка на каждое из m1, m2, ... mn;
n.DivsAny(m1, m2, ... mn) возвращает True, если целое n делится без остатка хотя бы на одно из m1, m2, ... mn;
n.InRange(a, b) - возвращает True, если для целого n верно, что a ≤ n ≤ b;
n.IsEven возвращает True, если целое n имеет четное значение;
n.IsOdd возвращает True, если целое n имеет нечетное значение;
n.NotDivs(m) возвращает True, если целое n не делится на m без остатка (n mod m <> 0).

Построение блок-схем по коду Паскаль

Теперь настало время вспомнить о том, что такое блок-схемы.
Блок схема - ориентированный граф, указывающий на последовательность операций, приводящую к решению поставленной задачи.

Существуют управляющие структуры трех типов:

блок-схема, следованиеследование блок-схема, ветвлениеветвление блок-схема, повторение или циклповторение или цикл

Две из трех представленных структур блок-схемы мы уже можем перевести в код Pascal.

Пример: Составить блок-схему вычисления значения величины С, определяемое по формулам: С=A+B, если A<=B и C=A-B, если A>B.

Результат:
блок схема ветвление

Задача 5. Составить блок-схему решения задачи 3

Пример: автобусный билет считают счастливым, если сумма трех первых цифр билета равна сумме трех последних цифр. Требуется составить блок-схему алгоритма определения билета, имеющего счастливый номер.
Открыть решение:

блок-схема с ветвлением
Задача 6. По составленной выше блок-схеме решить задачу на Pascal

[Название файла: L2task6.pas]

Задача 7. Дано двузначное целое число. Вывести сумму и произведение его цифр. Проверьте правильность вашей программы. Для нахождения цифр числа использовать операцию взятия остатка mod и операцию целочисленного деления div. Модуль числа - функция abs().

Пример результата:

Введите двузначное число: -12
Сумма цифр = 3
Произведение цифр = 2

[Название файла: L2task7.pas]

Задача 8. Дано трёхзначное целое число. Вывести все его цифры (порядок не имеет значения). Проверьте правильность вашей программы. Для нахождения цифр числа использовать операцию взятия остатка mod и операцию целочисленного деления div.

Пример результата:

Введите трёхзначное число: -123
Разряд сотен: 1
Разряд десяток: 2
Разряд единиц: 3

[Название файла: L2task8.pas]

Использование функции Assert (pascalAbc.net)
Пользовательский ввод практически всегда должен проверяться на корректность. Чтобы избежать в программе ошибки, необходимо использовать функцию assert(), в качестве параметра которой указывается условие, которое должно возвращать значение true.
Пример:

Выполнить: Даны координаты точки (x,y) на координатной плоскости ( ≠ 0, ≠ 0). Вывести номер четверти:

✍ Решение:

    var (x,y) := ReadInteger2;
    var quarter: integer;
    Assert((x<>0) and (y<>0), 'некорректный ввод'); //  True
    if x>0 then
      if y>0 then
        quarter := 1
      else 
        quarter := 4
    else
      if y>0 then
         quarter := 2
      else 
         quarter := 3;