Урок 7. Логика в Паскаль. Тип Boolean


boolean

Здравствуйте, дорогие читатели нашего сайта! Сегодня, мы поговорим о логических переменных типа Boolean в Паскаль, логических операциях и решим пять задач.

Для чего нужна логика в Паскаль? Вы, я надеюсь, уже научились писать простейшие линейные программы, и сейчас, наверняка, задаетесь вопросом, как же написать нелинейную программу? Для того чтобы программа была нелинейной в Паскале, как и в других языках программирования, используют логические выражения, которые принимают значения true или false. То есть, на место любого отношения в Паскале ставится  true или false. Например,

var 
  A: integer;
begin
  A := 5;
  write(A > 0); {Будет выведено True.}
end.

Список операторов отношения:

  • больше: >
  • меньше: <
  • больше либо равно: >=
  • меньше либо равно: <=
  • равно: =
  • неравно: <>

Для того чтобы записать результат логического выражения, нам требуется специальная переменная. Эта переменная будет иметь тип boolean, она может принимать два значения — true или  false. Как создавать простые условие вы уже поняли, но как создавать сложные условия? Для этого используются специальные логические операции: and, or, not и xor. Давайте разберем каждую операцию отдельно и составим таблицы истинности. Примем за 1 —  true, а за 0 — false.

And, или конъюнкция.

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

Or, или дизъюнкция.

Истинно, если хотя бы одно простое высказывание истинно.

Xor, или строгая дизъюнкция.

Xor
Истинно, если ровно одно из двух простых высказываний истинно.

Not, или инверсия.

Not
Если высказывание истинно, то его отрицание — ложь и наоборот.

Задачи Boolean.

Закрепим полученные знания, решив пару задачек.

Boolean1°. Дано целое число A. Проверить истинность высказывания: «Число A является положительным».

program Boolean1;

var
  a: integer;

begin
  write('Введите число A: ');
  read(a);
  writeln('Число A является положительным - ', a > 0); {Простое высказывание.}
end.

Boolean2. Дано целое число A. Проверить истинность высказывания: «Число A является нечетным».

Для того чтобы узнать, является ли данное число нечетным в Паскале предусмотрена специальная функция Odd, которая возвращает true, если число нечетное и false, если число четное.

program Boolean2;

var
  a: integer;
  b : boolean;

begin
  write('Введите число A: ');
  read(a);
  b := Odd(a);
  writeln('Число A является нечетным - ', b); { Можно обойтись и без b }
end.

Boolean3. Дано целое число A. Проверить истинность высказывания: «Число A является четным».

Для того чтобы узнать является ли число нечетным, используем уже известную нам функцию, затем инвертируем результат.

program Boolean3;

var
  a: integer;
  b : boolean;

begin
  write('Введите число A: ');  { 6 }
  read(a);
  b := Odd(a); { False }
  writeln('Число A является четным - ', not b); { True }
end.

Boolean7°. Даны три целых числа: A, B, C. Проверить истинность высказывания: «Число B находится между числами A и C».

program Boolean7;

var
  a, b, c: integer;
  b1, b2: boolean;

begin
  write('Введите число A, B, C: ');
  read(a, b, c);
  b1 := (B > A) and (B < C);   
  b2 := (B > C) and (B < A);  { Надо учитывать оба варианта }
  writeln('Число B находится между числами A и C - ', b1 or b2);
end.

Boolean10°Даны два целых числа: A, B. Проверить истинность высказывания: «Ровно одно из чисел A и B нечетное». 

Используем xor.

program Boolean10;

var
  a, b: integer;
  c :boolean;

begin
  write('Введите число A, B: ');
  read(a, b);
  c := (Odd(a)) xor (Odd(b)); { Сколько скобок :) }
  writeln('Ровно одно из чисел A и B нечетное - ', c); 
  end.

Boolean23. Дано четырехзначное число. Проверить истинность высказывания: «Данное число читается одинаково слева направо и справа налево».

Используем знания, полученные в этом уроке.

Итак, данная задача проверяет является ли введенное четырехзначное число палиндромом. Наверняка, самый известный палиндром — фраза Мальвины: «А роза упала на лапу Азора.» (Попробуйте прочитать это предложение справа налево)

program Boolean23;

var
  a, b, c, d, e, f: integer;
  b1, b2: boolean;

begin
  write('Введите число четырехзначное число: ');
  read(e);
  a := e div 1000;
  b := e mod 1000 div 100;
  c := e mod 100 div 10;
  d := e mod 100 mod 10;
  f := d * 1000 + c * 100 + b * 10 + a;
  writeln('Данное число является палиндромом - ', f = e);
end.

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

  1. http://i1.wp.com/learnpascal.ru/wp-content/uploads/2014/01/Untitled_artwork-2.png Ошибочка вышла, третья и четвертая строка

  2. Также бы хотелось задания для «самостоятельной работы», т.к . просто смотря на чужое решение — мало чего поймешь. Оставлять в конце каждого урока две-три задачи и решение под спойлер, пусть думают

  3. А в решении задач не хватает комментирования кода, ибо для новичка, если он не смог решить задачу, важно не решение, а объяснение кода

  4. Спасибо огромное!!! Учитель математики(совместительство-информатика! Для меня вы- находка!). В учебниках сложно, а у вас все понятно!

  5. в планах. но планы слегка амбициозные. если интересно, то наши планы изложены в «о сайте»
    «

  6. Спасибо, следить буду за вашим сайтом, в амбициозных планах есть видеоуроки(лекции), к примеру?)

  7. В самом первом примере у вас ошибка.Где write(a>5); надо write(i>5);
    write(A > 0); {Будет выведено True.}

  8. Исправьте, пожалуйста «var
    i: integer;
    begin
    i := 5;
    write(А > 0); {Будет выведено True.}
    end.», а то сразу вводит в ступор :p

  9. В 10 задании в строке пропущена выводимая переменная с

    writeln(‘Ровно одно из чисел A и B нечетное — ‘, );

  10. var
    a, b, c, d, e, f: integer;
    b1, b2: boolean;

    begin
    write(‘Введите число четырехзначное число: ‘);
    read(e);
    a := e div 1000;
    b := e mod 1000 div 100;
    c := e mod 100 div 10;
    d := e mod 100 mod 10;
    f := d * 1000 + c * 100 + b * 10 + a;
    writeln(‘Данное число является палиндромом — ‘, f = e);
    end.
    Зачем нужно вводить переменные Boolean?

  11. Незачем. На скорую руку отредактированный старенький код. Обычное дело 🙂

  12. var
    a: integer;
    b1: boolean;
    begin
    read(a);
    b1 := (a div 1000 = a mod 10) and (a div 100 mod 10 = a mod 100 div 10);
    writeln(b1);
    end.

    Переменных не многовато в примере?

  13. b1, b2: boolean; — зачем это строка нужна,если значения b1 и b2 не используются?Подскажите пожалуйста)

  14. var m,c,n:integer;
    label 1; //Создаем метку для перехода.
    begin
    read(n); //Вводим нужное число
    c:=0;
    1:if n>0 then begin m:=n mod 10; c:=c*10+m; n:=n div 10; goto 1; end; //Создаем цикл с помощью Goto.
    write(c); //получаем зеркальное отражение числа, которое мы ввели. И не важно значение числа!!!
    end.

  15. Здравствуйте, почему не работает данный код? Прочитал последнее задание и пытался решить сам. Всегда пишет FALSE
    program Palindrome;

    {$APPTYPE CONSOLE}
    uses
    SysUtils;
    var
    number,result1,result2,result3,result4: integer;
    logicresult:boolean;
    procedure divmod(x: integer);
    begin
    result1 := x div 1000;
    result2 := (x — result1*1000) div 100;
    result3 := (x — result1*1000 -result2*100) div 10;
    result4 := x mod 10
    end;

    procedure logic(answer:boolean);
    begin
    if ((result1=result4) and (result2=result3)) then
    answer:= true
    else
    answer:= false
    end;

    begin
    writeln(‘Checking numbers on being Palindrome’);
    write(‘Enter your number: ‘);
    readln(number);
    divmod(number);
    logic(logicresult);
    writeln(‘Your numbers are: ‘,result1, ‘, ‘,result2, ‘, ‘, result3, ‘, ‘, result4);
    writeln(‘Your number is palindrome? ‘, logicresult);
    readln
    end.

  16. При попытке использовать функцию Odd пишет » Нет перегруженной подпрограммы с такими типами параметров» Что с этим делать?

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

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