Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delphi / песни о паскале.pdf
Скачиваний:
63
Добавлен:
26.03.2016
Размер:
5.16 Mб
Скачать

Глава 14 Дважды два – четыре

Первые компьютеры назывались электронными вычислительными машинами (ЭВМ). Хотите — верьте, хотите — нет, но тогда на них не документы печатали и не фильмы смотрели, а вычисляли. С тех пор компьютеры научились многому и даже обыгрывают в шахматы чемпионов мира, однако, их способность к счету по-прежнему в цене.

Поможем братьям нашим меньшим

Пора и нам обратиться к вычислительным талантам компьютера. Не будем тратить попусту время, и по ходу дела соорудим полезную программу. Вы сможете испытать её на живом человеке, если найдёте первоклашку, зубрящего таблицу умножения. Уверен, что он с удовольствием подвергнет себя такому испытанию. Итак, наша очередная программа — экзаменатор. Суть её проста: компьютер предлагает ученику два числа и ждет от него ответа — произведения этих чисел. За правильный ответ ученика поощряют, а иначе его ждет «нахлобучка».

Числа и действия с ними

Скажу честно: знакомых нам типов данных — STRING и BOOLEAN не хватит для решения поставленной задачи. Для вычислений в Паскале припасены другие типы данных, один из которых называется INTEGER, что переводится как целое. Из названия следует, что переменные такого типа могут хранить целые числа (положительные и отрицательные), например 10, 25, -14. Переменные целого типа объявляют следующим образом:

var N, M : integer;

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

N := 19;

M :=-25;

M := 20 + 3*N;

Карифметическим операциям относятся:

сложение (+) и вычитание (–);

умножение (*) и деление (DIV);

нахождение остатка от деления (MOD).

Здесь DIV и MOD — это ключевые слова языка. Примеры деления и нахождения остатка показаны ниже (в комментариях указаны результаты).

96

Глава 14 Дважды два четыре

N := 10 div 2;

{ =5 }

M := 10 mod 2;

{ =0 }

N := 10

div 3;

{ =3 }

M := 10

mod 3;

{ =1 }

N := 10

div 4;

{ =2 }

M := 10

mod 4;

{ =2 }

N :=

10

div 5;

{ =2 }

M :=

10

mod 5;

{ =0 }

N :=

10

div 6;

{ =1 }

M :=

10

mod 6;

{ =4 }

 

 

 

 

 

 

 

 

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

Числовые переменные и выражения можно сравнивать между собой на равенство (=), неравенство (<>), больше (>), меньше (<), больше или равно (>=), меньше или равно (<=). При сравнении получается, как всегда, булев результат, например:

var X, Y: integer;

B: Boolean;

 

begin

 

X:=5;

Y:=10;

B:= X=Y;

{ B = FALSE }

B:= X<Y;

{ B = TRUE }

B:= X=Y-5;

{ B = TRUE }

end.

 

Акак быть с вводом и выводом числовых данных, нет ли тут сложностей?

Ксчастью, нет. Так же как и строки, числовые данные вводятся процедурой Readln, а печатаются процедурами Write и Writeln, например:

Readln(X);

Writeln(X);

Writeln(’Y=’, X+10);

В последнем операторе на экран выводится строковая константа ’Y=’ и результат сложения X+10.

Теперь вы снабжены всем необходимым для написания экзаменатора.

Алгоритм экзаменатора

Прежде всего, уточним алгоритм создаваемой программы. Живой экзаменатор сам придумывает примеры для умножения. Но нам это пока не под силу — маловато знаний — отложим этот вариант до следующей главы. А пока экзаменуемый будет сам «создавать себе проблемы», то есть будет вводить сомножители по запросу программы вручную. Пример диалога может выглядеть, например, так.

97

Глава 14 Дважды два четыре

Первый сомножитель A = 7

Второй сомножитель B = 7

Произведение A*B = 47

Ошибка, повтори таблицу умножения!

И так далее. Здесь подчеркнутые числа 7, 7 и 47 пользователь ввел сам. Разумеется, что задания надо решать многократно, в цикле. Для выхода из цикла нужен какой-то признак, сигнал. Пусть таким сигналом будет ввод нуля в качестве ответа. Тогда блок-схема программы получается такой (рис. 37).

 

 

Repeat

 

 

 

 

 

 

 

 

 

 

Запросить и ввести

 

 

 

 

сомножители и произведение

 

Завершить работу?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IF

 

Break

 

 

 

 

 

 

 

Нет

Да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Проверить решение,

 

 

 

 

 

вывести заключение на экран

 

 

 

 

 

 

 

 

 

 

 

Until

FALSE

Рис. 37 – Блок-схема программы проверки таблицы умножения

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

Экзаменатор, первый вариант

Вот теперь всё готово для написания следующей программы.

98

 

 

Глава 14

 

 

 

Дважды два четыре

 

 

 

 

 

{ P_14_1 – экзаменатор таблицы умножения, первый вариант }

 

 

var A, B, C : integer;

{ сомножители и произведение }

 

 

R: Boolean; { результат сравнения }

 

 

S: string;

{ сообщение для вывода на экран }

 

 

begin

 

 

repeat

{ ввод сомножителей и произведения } Write(’Первый сомножитель A = ’); Readln(A); Write(’Второй сомножитель B = ’); Readln(B); Write(’Произведение A*B = ’); Readln(C);

if C=0 then break; { завершение цикла, если C=0 } { проверяем правильность вычисления }

R:= A*B=C; { R=true, если верно } if R

then S:= ’Молодец, правильно!’

else S:= ’Ошибка, повтори таблицу умножения!’; Writeln(S);

until false; { бесконечный цикл }

end.

Запустите программу и проверьте её работу. В следующий раз мы научим её придумывать сомножители, — так будет честнее. А пока подведем итоги.

Итоги

Для вычислений в Паскале предусмотрены данные числового типа

(INTEGER).

К данным целого типа могут применяться четыре арифметических операции, а также операция нахождения остатка от деления.

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

Числовые данные вводятся оператором Readln и выводятся операторами

Write и Writeln;

Числовым переменным нельзя присваивать строковые значения и наоборот: строковым переменным нельзя присваивать числовые значения.

99

Соседние файлы в папке delphi