Паскаль. Основы программирования

Логические операции




Логическая операция

Ее значение

Примеры

записи

Значение примера

AND

Логическое "И"

(x<7)   and

(x>3)

x меньше 7 и x больше 3 (3<x<7)

OR

Логическое "ИЛИ"

(y>100) or  (y<10)

y больше 100 или

y меньше 10

(y<10, y>100)

NOT

Логическое "НЕ"

not (x=2)

не x равно 2

Правила  использования  операций  AND  и  OR (Таблица  истинности)

a

b

a and

b

a or

b

истина

истина

истина

истина

истина

ложь

ложь

истина

ложь

истина

ложь

истина

ложь

ложь

ложь

ложь

Остановимся немного подробнее на операции целочисленного деления (div) и операции, выдающей остаток от деления (mod).

Так, результатом целочисленного деления 17 на 5 будет 3:

17 div 5 = 3, а результатом деления меньшего числа на большее, будет 0:

46 div

200 = 0.

Делаем вывод, что при целочисленном деление дробная часть отбрасывается, сам термин "целочисленное деление" или "деление нацело" говорит сам за себя.

Операция  a div b  осуществляет целочисленное деление целого a на целое b.

Дробная часть при этом отбрасывается.

 

Еще одна интересная операция - остаток от деления a на b.

Понятно, что остатком от деления 17 на 5 будет число 2:

17 mod 5 = 2,

а вот чему будет равен остаток от деления меньшего числа на большее, например, 46 mod 200? 

Оказывается, в этом случае, результатом операции будет число 46. Вот другие примеры:

       34 mod

125 = 34,

120 mod 6 = 0.

Интересно, что остаток от деления любого целого числа на 10 будет равен  последней  цифре этого числа:

543 mod 10 = 3, 45 mod 10 = 5, 7 mod 10 = 7.

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

Пример 1. Найти разность между трехзначным числом и числом, составленным из тех же цифр, но взятых в обратном порядке.

При решении этой задачи, надо помнить, что компьютер не знает десятичной и позиционной формы записи чисел, так для него совершенно неизвестно, сколько в числе 342 сотен, десятков и единиц.
Это известно нам, потому что с раннего возраста мы используем такую форму записи чисел. Мы условились считать, что на первом месте слева стоит цифра единиц, на втором - цифра десятков, на третьем - цифра сотен и т.д.

Компьютеру это неизвестно! Он любое число переводит на язык двух цифр -



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

Способ первый достаточно простой. Сущность которого в следующем.

Для определения цифры сотен делим данное число на 100 и остаток отбрасываем, т. е. выполняем целочисленное деление.

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

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

Далее из заданного числа вычитаем полученное новое. Например, для числа 342. Выполним целочисленное деление числа на 100, получим цифру сотен:

342 div 100 = 3;

вычитаем из 342 сотни 3*100 и результат делим на 10 - получим цифру десятков:

(342 - 3*100) div

10 = 4;

наконец, вычитаем из заданного числа сотни и десятки, получаем цифру единиц:

342 - 3*100 - 4*10 = 2.

Для записи числа в обратном порядке, умножаем цифру единиц 2 на 100 и складываем с цифрой десятков, умноженных на 10 (4*10) и прибавляем цифру сотен 3. Получим новое число, записанное теми же цифрами, но в обратном порядке:

2
100 + 4
10 + 3 = 243.

Вычитаем: 342 - 243 = 99.

Программа

Program Problem1;

    uses WinCrt;

    var

       a, s, d, e, b, r : integer;

    begin

       write('Введите трехзначное число '); readln(a);

       s := a div 100;

       d := (a - s*100) div 10;

       e := a - s*100 - d*10;

       b := e*100 + d*10 + s;

       r := a - b;

       writeln('Искомая разность равна ', r)

    end.

Программа достаточно проста и понятна.

В разделе описаний переменным a, s, d, e, b, r устанавливается целый тип - integer.

Вводится трехзначное число и присваивается переменной a.

Переменной s присваивается результат целочисленного деления введенного числа a на 100. Это значение есть цифра сотен. Переменная d получает значение цифры десятков:

d := (a - s*100) div

10,

переменная e - это цифра единиц:

e := a - s*100 - d*10.

Дальнейшая работа программы понятна.


Содержание раздела