Арифметические операции с целыми числами. Переменные целого типа

Цель: дать понятие об операциях с целыми числами. Учить на частных примерах составлять блок-схемы и программы; вводить и выполнять программы, используя компиляторы BPW или Turbo Pascal.

Использовать программы: Barland Pascal for Windows (BPW) или Barland Pascal, или Turbo Pascal.

В языке Паскаль используются целые числа, к которым относятся все натуральные числа, образовавшиеся в процессе подсчета предметов: 1, 2, 3, 4, 5, 6, ...; отрицательные числа: ..., -6, -5, -4, -3, -2, -1 и число ноль: 0. Целые числа образуют следующий ряд:
..., -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, ...
В Паскале допускается диапазон целых чисел от -32768 до 32767.

Переменные, принимающие целые значения, записываются в разделе описаний с указанием типа integer (целый).

Например: var a, b, c, a1, b34, nomb: integer;

Значения другого типа этим переменным в одной программе присвоить нельзя.

1. Арифметические операции с целыми числами и переменными целого типа в языке Паскаль

 

Операция

Обозначение

Сложение

+

Вычитание

-

Умножение

*

Деление

a_div_b

Знак "_" означает пробел. Пробелы между именами переменных и названием операции (div) - обязательны. (Происходит от английского division - деление).
Остаток от деления a на b. a_mod_b
Кроме арифметических операций с целыми числами выполняются:

2. Операции отношения или сравнения

 

Знак

Наименование

Пример

Пояснение

Меньше

a < 6

a меньше 6

<=

Меньше или равно

b <= 23

b меньше или равно 23

Больше

x > 5

x больше 5

>=

Больше или равно

y >= 8

y больше или равно 8

=

Равно

c = 10

c равно 10

<> 

Не равно

d <> 3

d не равно 3


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

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

Ее значение

Примеры
записи

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

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

истина (true)

истина (true)

истина (true)

истина (true)

истина (true)

ложь (false)

ложь (false)

истина (true)

ложь (false)

истина (true)

ложь (false)

истина (true)

ложь (false)

ложь (false)

ложь (false)

ложь (false)

Остановимся немного подробнее на операции целочисленного деления (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.
Блок-схема программы

Рис. 3
Программа

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.
Дальнейшая работа программы понятна.
Надо заметить, что такого типа блок-схемы и программы называются линейными. Блок-схема в этом случае представляет один столбик, состоящий из блоков начала (конца), ввода (вывода) и выполнения команд, содержащих арифметические операции и функции.

4. Комментарии

 

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


Комментарии - это тексты, объясняющие программу, но не влияющие на ее исполнение. Это различные объяснения, заголовки отдельных частей программы и т.д. Компьютер печатает комментарии вместе с текстом программы, но, выполняя программу, игнорирует их. Программа выполняется так, словно комментариев нет.

В нашей программе комментариев нет и это делает ее непонятной для других. Паскаль предусматривает располагать комментарии между фигурными скобками { ... } или между круглыми скобками со звездочками (* ... *). Всё, что находится в скобках, при выполнении программы игнорируется, но сохраняется в программе.
Почему допускается два способа записи комментариев?
Представьте себе ситуацию, когда внутри одного комментария надо разместить еще комментарий. Если внутри фигурных скобок будут размещены такие же скобки  то будет выдана ошибка, тоже произойдет и при такой записи: , т. е. запись комментария в комментарии с помощью одинаковых обозначений комментария недопустима.
Зато совершенно свободно вы можете сделать запись комментария в комментарии с помощью разных обозначений, например:
{ ... (* ... *) ... } или так (* ... { ... } ... *).
Правил для написания комментариев не существует. Однако, можно дать некоторые
рекомендации
по использованию комментариев в различных частях программы.

Вот несколько характерных случаев, когда комментарии желательны.

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

Program bid;
{Программа определения большего из двух чисел}
{автор программы Иванов Александр Петрович}
{программа составлена 12.10.1993}
{программа доработана 20.10.1993}
{программа протестирована 20.10.1993}

2. В описаниях переменных указывается назначение переменных:

var
a,{первое число}
b,{второе число}
c,{их наибольший общий делитель} ...

3. Объясняются действия, смысл и назначение которых непонятны:
c := a mod b {остаток от деления a на b}
d := b*b - 4*a*c {вычисление дискриминанта квад. ур-я}

В программе желательны короткие и ясные комментарии. В противном случае текст программы может затеряться среди комментариев и программа станет еще менее ясной.

Составим программу для первого примера на основе второго способа.
Он основан на применении двух операций с целыми числами - деления (div) и нахождения остатка от деления (mod).
Посмотрите на примере, в чём состоит математика этого способа.
Находим цифру единиц:        342 mod 10 = 2.
Делим заданное число на 10, при этом уже найденная цифра единиц "отбрасывается":                                                         342 div 10 = 34.
Находим цифру десятков:      34 mod 10 = 4.
Делим, оставшееся число 34 на 10, при этом цифра десятков "отбрасывается", а результатом будет цифра сотен:
34 div 10 = 3.
Дальнейшие операции такие же, как и в первом способе.

Программа

Program Problem;
uses WinCrt;
var
a, c, s, d, e, b, r : integer;
    begin
write("Введите трехзначное число "); readln(a);
c := a;  {Запоминается первоначальное число}
e := a mod 10; (* Цифра единиц *)
a := a div 10;
d := a mod 10; (* Цифра десятков *)
s := a div 10; (* Цифра сотен *)
b := e*100 + d*10 + s;
(* Число, записан. в обратном пор. *)
r := c - b; (* Разность чисел *)
writeln("Искомая разность равна ", r)
    end.

ВЫВОДЫ

В программе можно использовать комментарии, которые записываются в фигурных скобках { ... } или в круглых скобках со звездочкой (* ... *). Повторная запись одних и тех же скобок недопустима. При записи комментария в комментарии надо использовать разные скобки.

Операция a mod b выдает остаток от деления a на b. Если деление происходит нацело, то результат операции равен нулю.

Задание 1

 

1. Введите эти две программы в компьютер и выполните. Измените вторую программу так, чтобы для определения цифр трехзначного числа надо было бы делить только на 10 (в приведенных программах используется деление на 100 и на 10).


2. Применяя этот способ, составьте программу, которая подсчитывает сумму и произведение цифр введенного четырехзначного числа.

Пример 2. Дано целое число n  10. Написать программу получения последней и предпоследней цифр записи этого числа.

Алгоритм

Для получения последней цифры числа достаточно найти остаток от деления этого числа на основание системы счисления, в которой записано это число, в нашем случае, мы имеем десятичную систему счисления, значит надо найти остаток от деления на 10.
Например
4538 mod 10
получим 8.
В общем виде:                                     a := n mod 10
Следует помнить, что операция mod («остаток от деления») не изменяет значения первоначального числа (4538 или n). А значит, чтобы найти предпоследнюю цифру числа надо «отбросить» последнюю цифру (что легко делается с помощью целочисленного деления на основания системы), а затем снова выполнить операцию «остаток от деления» на основание системы.
Например
4538 div 10
получим 453, далее, 453 mod 10, получим 3.
n := n div 10;
b := n mod 10

Блок-схема


Рис. 4

Задание 2

Используя блок-схему, составьте и выполните программу на Паскале.

Упражнения

 

1. Исходя из заданного объявления переменных a, b и c, укажите, что будет в них содержаться после выполнения каждой из шести приводимых ниже последовательностей предложений. Для проверки напишите небольшую программу.

var
a, b, c : integer;

(а)
a := 100 div 11;
b := 100 div 10;
c := 100 div 9

(г)
a := 90 div 8;
b := 85 div 8;
c := 80 div 8

(б)
a := 120 div 1;
b := 200 mod 150;
c := 20 div 3 * 8

(д)
a := 5;
b := a * 10 div 8;
c := a * b mod 4

(в)
a := 200 mod 60;
b := 200 mod 40;
c := 200 mod 400

(е)
a := 2 + 20 mod 3;
b := 2 + 19 mod 3;
c := 2 + 18 mod 3

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

var
i, j, k, m : integer;

(а)
i := 6;
j := i div 2;
k := i * j div 3;
writeln(i, ‘ ‘, j, ‘ ‘, k)

(в)
j := 15;
k := 16;
i := j div 3;
m := k mod j;
k := k + 3;
writeln(i, ‘ ‘, j, ‘ ‘, k, ‘ ‘, m)

(б)
m := 50 mod 11;
k := m mod 4;
j := k * 10 div 3;
i := j div 2;
writeln(i, ‘ ‘, j);
writeln(k, ‘ ‘, m)

(г)
i := 10;
j := 3;
k := i div j;
m := i - k * j;
writeln(i, ‘ ‘, j, ‘ ‘, k, ‘ ‘, m)

Автор: Тишин Владимир Иванович

Виселица, или Балда

Виселица, или Балда Эта известная старинная игра чрезвычайно азартна и полезна. Напоминаем правила игры: один игрок загадывает слово, указывая, из какой оно области (фрукт, транспорт, мебель), и обозначает его первую и последнюю буквы, а пропущенные буквы между ними заменяет черточками. Например, слово "апельсин" будет выглядеть так: а _ _ _ _ _ _ н  ...

Гравитация от Ньютона до Эйнштейна

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

Спорангии, антеридии и архегонии

Репродуктивные (лат. reproductio — воспроизведение) органы являются наиболее специализированными образованиями, выполняющими функцию бесполого (спорангии) или полового (антеридии, архегонии, а у покрытосеменных — цветки) размножения. Спорангии — одноклеточные (у водорослей) или многоклеточные (у высших растений) органы, в которых образуются споры. У моховидных ...

Высокое Средневековье

Высокое Средневековье — период европейской истории, продлившийся приблизительно с 1000 по 1300 гг. Эпоха Высокого Средневековья сменила Раннее Средневековье и предшествовала Позднему Средневековью. Основной характеризующей тенденцией этого периода стало быстрое увеличение численности населения Европы, что привело в свою очередь к резким изменениям в социальной, политической и других ...