Книга: Песни о Паскале
Глава 14 Дважды два – четыре
Разделы на этой странице:
Глава 14
Дважды два – четыре
Первые компьютеры назывались электронными вычислительными машинами (ЭВМ). Хотите – верьте, хотите – нет, но тогда на них не документы печатали и не фильмы смотрели, а вычисляли. С тех пор компьютеры научились многому и даже обыгрывают в шахматы чемпионов мира, однако, их способность к счету по-прежнему в цене.
Поможем братьям нашим меньшим
Пора и нам обратиться к вычислительным талантам компьютера. Не будем тратить попусту время, и по ходу дела соорудим полезную программу. Вы сможете испытать её на живом человеке, если найдёте первоклашку, зубрящего таблицу умножения. Уверен, что он с удовольствием подвергнет себя такому испытанию. Итак, наша очередная программа – экзаменатор. Суть её проста: компьютер предлагает ученику два числа и ждет от него ответа – произведения этих чисел. За правильный ответ ученика поощряют, а иначе его ждет «нахлобучка».
Числа и действия с ними
Скажу честно: знакомых нам типов данных – STRING и BOOLEAN – не хватит для решения поставленной задачи. Для вычислений в Паскале припасены другие типы данных, один из которых называется INTEGER, что переводится как целое. Из названия следует, что переменные такого типа могут хранить целые числа (положительные и отрицательные), например 10, 25, -14. Переменные целого типа объявляют следующим образом:
var N, M : integer;
Таким переменным можно присваивать выражения целого типа, состоящие из чисел, арифметических операций, скобок и других переменных, например:
N := 19; M :=-25;
M := 20 + 3*N;
К арифметическим операциям относятся:
• сложение (+) и вычитание (–);
• умножение (*) и деление (DIV);
• нахождение остатка от деления (MOD).
Здесь DIV и MOD – это ключевые слова языка. Примеры деления и нахождения остатка показаны ниже (в комментариях указаны результаты).
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.
Теперь вы снабжены всем необходимым для написания экзаменатора.
Алгоритм экзаменатора
Прежде всего, уточним алгоритм создаваемой программы. Живой экзаменатор сам придумывает примеры для умножения. Но нам это пока не под силу – маловато знаний – отложим этот вариант до следующей главы. А пока экзаменуемый будет сам «создавать себе проблемы», то есть будет вводить сомножители по запросу программы вручную. Пример диалога может выглядеть, например, так:
Первый сомножитель A = 7
Второй сомножитель B = 7
Произведение A*B = 47
Ошибка, повтори таблицу умножения!
И так далее. Здесь выделенные курсивом числа 7, 7 и 47 пользователь ввел сам. Разумеется, что задания надо решать многократно, в цикле. Для выхода из цикла нужен какой-то признак, сигнал. Пусть таким сигналом будет ввод нуля в качестве ответа. Тогда блок-схема программы получается такой (рис. 37).
Рис.37 – Блок-схема программы проверки таблицы умножения
Обратите внимание на условие в операторе цикла REPEAT-UNTIL, – оно равно FALSE. Такой цикл будет продолжаться бесконечно, и выйти из него можно лишь процедурой BREAK, как показано на блок-схеме.
Экзаменатор, первый вариант
Вот теперь все готово для написания следующей программы.
{ 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;
• Числовым переменным нельзя присваивать строковые значения и наоборот: строковым переменным нельзя присваивать числовые значения.
А слабо?
А) Найдите ошибки в следующей программе и объясните их.
var N, M : integer;
S : string;
begin
N:= ’10’;
S:= N + 5;
M:= S – 1;
if S=N then;
end.
Проверьте свои догадки, призвав на помощь компилятор.
Б) Перепишите программу «P_14_1», не прибегая к процедуре Break. В чем, по-вашему, слабость этого второго варианта? Можно ли обойтись в программе «P_14_1» без булевой переменной R и строковой S? Напишите такой вариант программы. Или слабо?
В) Пусть программа запросит три числа: A, B и C, а затем напечатает большее из них. Подсказка: примените булевы выражения вкупе с операциями сравнения, которые в булевых выражениях надо заключать в скобки, например:
if (A>=B) and (A>=C) then...
Примечание. Скобки ставят по той причине, что булевы операции можно выполнять и с числами, и такие операции приоритетней операций сравнения. О применении логических операций к числам сказано в главе 48.
Г) В стене прорублено прямоугольное сквозное отверстие со сторонами A и B. Пусть ваши программы разберутся, пройдет ли в него кирпич с ребрами X, Y, Z. Сделайте две программы для таких случаев:
• Известно, что A<B и X<Y<Z.
• Соотношение между сторонами неизвестно, и программе самой надо выяснить высоту и ширину, как отверстия, так и кирпича.
Д) Площадь земельного участка вычисляется умножением его сторон A и B. В программу вводятся стороны двух участков (A1, B1 и A2, B2), пусть она напечатает ширину и длину того участка, что больше по площади. Ширина должна быть не больше длины.
- Только для взрослых
- Детям до 16–ти
- Глава 1 Путь далек у нас с тобою…
- Глава 2 Вместо теории
- Глава 3 Консольный интерфейс
- Глава 4 Оружие – к бою!
- Глава 5 Программа номер один
- Глава 6 Подготовка к следующему штурму
- Глава 7 Развиваем успех
- Глава 8 Постоянные и переменные
- Глава 9 Переменные: продолжение знакомства
- Глава 10 Условный оператор
- Глава 11 Операторный блок
- Глава 12 Цикл с проверкой в конце
- Глава 13 Правда и кривда
- Глава 14 Дважды два – четыре
- Глава 15 Айда в Монте-Карло!
- Глава 16 Делу время, а потехе час
- Глава 17 И вновь за парту
- Глава 18 Аз, Буки
- Глава 19 Процедуры и функции: разделяй и властвуй
- Глава 20 Процедуры: первый опыт
- Глава 21 Отладка
- Глава 22 О передаче параметров
- Глава 23 Функции
- Глава 24 Криптография
- Глава 25 Текстовые файлы
- Глава 26 Я не читатель, – я писатель!
- Глава 27 Дайте кораблю минутный отдых!
- Глава 28 Редактор и справочная система
- Глава 29 Читайте по-новому
- Глава 30 Журнальная история
- Глава 31 Финал журнальной истории
- Глава 32 Порядковые типы данных
- Глава 33 Вещественные числа
- Глава 34 Структура программы
- Глава 35 Множества
- Глава 36 Множества в Паскале
- Глава 37 Ввод и вывод множеств
- Глава 38 Множества в «бою»
- Глава 39 Командная игра (массивы)
- Глава 40 Пристрелка на знакомых мишенях
- Глава 41 По порядку, становись!
- Глава 42 Кто ищет, тот всегда найдет
- Глава 43 Сортировка по-взрослому
- Глава 44 Строки
- Глава 45 Очереди и стеки
- Глава 46 Огромные числа
- Глава 47 Системы счисления
- Глава 48 Железная логика
- Глава 49 Сложные массивы
- Глава 50 Неспортивные рекорды (записи)
- Глава 51 Указатели в море памяти
- Глава 52 Динамические переменные
- Глава 53 Массив указателей
- Глава 54 Односвязные списки
- Глава 55 Слова, слова, слова…
- Глава 56 И снова очереди, и снова стеки…
- Глава 57 Графомания
- Глава 58 По графу шагом марш!
- Глава 59 Крупные проекты
- Глава 60 Мелкие хитрости
- Глава 61 «Кубики» программиста (ООП)
- Глава 62 Самое интересное только начинается!
- Приложение А Установка и настройка IDE Borland Pascal
- Приложение Б Консольная программа в среде Delphi
- Приложение В Особенности IDE Pascal ABCNet
- Приложение Г Зарезервированные слова
- Приложение Д Ошибки компиляции
- Приложение Е Ошибки исполнения
- Приложение Ж Директивы управления компиляцией
- Приложение З Назначение пунктов меню
- Приложение И Стандартная кодировка символов MS–DOS
- Приложение К Некоторые встроенные процедуры и функции
- Приложение Л Перечень программ
- Приложение М Пример олимпиадной задачи
- Библиография
- Содержание книги
- Популярные страницы
- Перемещать файлы удобнее, если запустить два экземпляра Проводника и разместить их окна бок о бок. Можно ли это делать а...
- Два вида задач руководителя
- Чтобы установить Service Pack 2, надо ли предварительно устанавливать Service Pack 1?
- Можно ли сравнить два файла?
- Как склеить два MP3-файла?
- Глава 33 Четыре маленьких шага к большим продажам на Amazon
- Три силы и четыре требования
- Два метода рекламы. И жизни
- Два вида статичной графики
- Четырехэтапное рукопожатие
- 11.4.1. Учебный пример: два способа написания программы калькулятора
- Модель четырех действий