Полстраницы тетради занимает таблица диапазонов: Byte 0..255, Integer −32768..32767, Real 2.9e−39..1.7e+38. Выглядит как справочник, который надо зубрить. На деле за таблицей одна мысль: у каждого ящика-переменной есть размер, и от размера зависит, что в него влезет. Разберём типы так, чтобы диапазоны запоминались, а не зубрились.
Чему научишься. После урока сможешь: разделить типы на скалярные и структурированные; выбрать целый тип по диапазону значений; посчитать div и mod, в том числе с отрицательным числом; отличить целое от вещественного по записи; объявить переменные нужных типов в разделе Var; назвать, что хранят Boolean, Char и String.
Вспомни. Переменная похожа на ящик с наклейкой-именем (урок 2.1). Раздел Var объявляет ящики до начала алгоритма (урок 3.1). Сегодня к наклейке добавляется второе слово: тип.
Классификация типов
Тип отвечает на два вопроса: что можно положить в ящик и сколько места он занимает. В тетради типы разложены по двум признакам. Первый: стандартные (встроены в язык: Integer, Real, Char) и определяемые пользователем (ты сам описываешь в разделе Type). Второй, важнее: скалярные (в ящике одно значение) и структурированные (в ящике набор значений).
ТИПЫ ДАННЫХ ПАСКАЛЯ скалярные (одно значение) структурированные (набор значений) ├─ целый Integer, Byte… ├─ массив array (глава 6) ├─ вещественный Real, Double… ├─ строка string (частично) ├─ символьный Char ├─ множество set ├─ логический Boolean ├─ запись record ├─ перечисляемый (свой список) └─ файл file └─ интервальный 'a'..'z' В этом семестре руками: целые, вещественные, Char, Boolean, String, массив.
Целые типы: пять ящиков разного размера
Целые числа хранятся без дробной части, и у каждого целого типа есть диапазон: от какого до какого числа влезет. Байт, самый маленький ящик: в него влезают числа от 0 до 255 (байт это 8 лампочек, каждая горит или нет: 2·2·2·2·2·2·2·2 = 256 вариантов). Чем больше байт занимает тип, тем шире диапазон. Половина типов «со знаком» (есть отрицательные), половина без.
ЦЕЛЫЕ ТИПЫ (как в тетради) тип диапазон размер знак ──────────┼──────────────────────────────┼────────┼────── Byte │ 0 … 255 │ 1 байт │ нет ShortInt │ −128 … 127 │ 1 байт │ есть Word │ 0 … 65535 │ 2 байта│ нет Integer │ −32768 … 32767 │ 2 байта│ есть LongInt │ −2147483648 … 2147483647 │ 4 байта│ есть Как запомнить: 1 байт = 256 вариантов, 2 байта = 65536, 4 байта ≈ 4,3 млрд. «Со знаком» — половина вариантов уходит в минус: 256 → −128…127.
Что будет, если положить в Byte число 300? Оно не влезет: компилятор откажет или число «перевернётся» через ноль. Поэтому тип выбирают по задаче: для возраста человека хватит Byte, для населения города нужен LongInt. На экзамене диапазоны спрашивают именно из этой таблицы.
Честная оговорка про среды. Таблица в тетради составлена по классическому Turbo Pascal, где Integer занимает 2 байта. В PascalABC.NET и в Free Pascal в режиме по умолчанию Integer занимает 4 байта, то есть равен LongInt из таблицы. На экзамене отвечай так, как в тетради; в программах, чтобы не думать о переполнении, для больших чисел бери LongInt явно.
Вещественные типы и запись с буквой e
Вещественные числа содержат дробную часть: 3.14, −0.5, 2.0. Дробная часть отделяется точкой, не запятой: 3,14 компилятор прочитает как два числа 3 и 14. Типов четыре, и различаются они точностью и диапазоном. Real из тетради базовый; Double и Extended точнее и шире.
ВЕЩЕСТВЕННЫЕ ТИПЫ (как в тетради)
Real 2.9e−39 … 1.7e+38
Single 1.5e−45 … 3.4e+38
Double 5.0e−324 … 1.7e+308
Extended 3.4e−4932 … 1.1e+4932
Запись с буквой e — «умножить на 10 в степени»:
1.7e+38 = 1.7 · 10³⁸ (единица и 38 нулей)
2.9e−39 = 2.9 · 10⁻³⁹ (очень близко к нулю)
Диапазон Real — от «почти нуля» до числа с 38 нулями.
Наизусть нужны сами имена типов и идея «e = степень десяти»,
цифры — по таблице.
div и mod: деление для целых
Для целых чисел есть два особых деления. div делит нацело: сколько раз одно число помещается в другое, остаток выбрасываем. mod оставляет только остаток. Как раздать 21 конфету пятерым: каждому по 4 (21 div 5 = 4), и одна остаётся (21 mod 5 = 1). Обычная косая черта / всегда даёт вещественный результат: 21 / 5 = 4.2.
div — ЧАСТНОЕ НАЦЕЛО, mod — ОСТАТОК (примеры из тетради)
21 div 4 = 5 4 помещается в 21 пять раз (5·4 = 20)
21 mod 5 = 1 21 = 4·5 + 1, остаток 1
4 div 8 = 0 8 не помещается в 4 ни разу
4 mod 8 = 4 остаток — само число
−2 mod 5 = −2 знак остатка = знак делимого
Проверка: a = (a div b)·b + (a mod b) → 21 = 5·4 + 1
Отрицательные числа, ловушка из тетради: −2 mod 5 = −2, а не 3. В Паскале знак остатка совпадает со знаком делимого. div и mod работают только с целыми: 7.5 div 2 компилятор не примет.
Операции отношения
Сравнения дают ответ да или нет, то есть логическое значение: это те же условия из ромбов главы 2, записанные знаками Паскаля. Шесть знаков: = равно, <> не равно, < меньше, > больше, <= меньше или равно, >= больше или равно. Обрати внимание: «не равно» пишется двумя знаками <>, а «равно» в сравнении одним =, не :=.
Boolean, Char, String
Boolean хранит ровно одно из двух: True или False. Это выключатель, и операции с ним те же, что в главе 1: not (¬), and (∧), or (∨) и xor (исключающее или: истина, когда значения разные). Char хранит один символ в апострофах: ‘A’, ‘7’, ‘ ‘. У каждого символа есть номер в таблице кодов, поэтому символы можно сравнивать: ‘A’ < ‘B’. String хранит цепочку символов до 255 штук: ‘Вася’, ‘Введите стороны’. Строка в апострофах, число без: ‘7’ это символ, а 7 число, их нельзя складывать.
ЧТО ЛЕЖИТ В ЯЩИКЕ КАЖДОГО ТИПА
Integer 42 целое, без точки
Real 3.14 с точкой (или 2.0 — тоже вещественное)
Boolean True или False, всего два значения
Char 'A' ОДИН символ в апострофах
String 'Вася' до 255 символов в апострофах
Раздел Var (из тетради):
Var a, b: Integer;
Q: Real;
s1, s2: String;
Несколько имён одного типа — через запятую, тип после двоеточия.
Контрольный вопрос. К какой группе типов относится массив (array)?
Подсказка: В одном ящике лежит одно значение или набор?
Онлайн-проверка ответа появится позже
Контрольный вопрос. Какое наибольшее число можно положить в переменную типа Byte? Впиши число.
Подсказка: Один байт даёт 256 вариантов, счёт с нуля.
Онлайн-проверка ответа появится позже
Контрольный вопрос. Вычисли 21 div 4. Впиши число.
Подсказка: Сколько раз четвёрка целиком помещается в 21? Остаток выбрось.
Онлайн-проверка ответа появится позже
Контрольный вопрос. Вычисли 21 mod 5. Впиши число.
Подсказка: Раздай 21 конфету пятерым поровну: сколько осталось?
Онлайн-проверка ответа появится позже
Контрольный вопрос. Какой из целых типов из таблицы вмещает отрицательные числа и при этом занимает только один байт?
Подсказка: Один байт занимают два типа; из них «со знаком» только один.
Онлайн-проверка ответа появится позже
Контрольный вопрос. Какой тип хранит ровно один символ в апострофах, например ‘A’? Впиши название типа латиницей.
Подсказка: Не строка (там до 255 символов), а её один кирпичик.
Онлайн-проверка ответа появится позже
Контрольный вопрос. Вычисли (−17) mod 5 по правилу Паскаля.
Подсказка: Сначала посчитай 17 mod 5, потом вспомни, чей знак у остатка.
Онлайн-проверка ответа появится позже
Контрольный вопрос. В программе хранится число жителей страны, до 150 миллионов. Какой целый тип из таблицы выбрать, чтобы число влезло и не тратить память зря?
Подсказка: Сравни 150 000 000 с верхней границей каждого типа.
Онлайн-проверка ответа появится позже
Контрольный вопрос. Компилятор принял три присваивания из четырёх и отказал в одном: число нельзя положить в ящик этого типа. На какой переменной он споткнулся?
Исходный код для этого задания:
Var n: Integer; x: Real; c: Char; ok: Boolean; Begin n := 7; x := 7; c := '7'; ok := 7; end.Подсказка: Проверь каждый ящик: в Integer число влезает; в Real целое 7 превратится в 7.0; в Char лежит символ ‘7’. Остаётся один тип, у которого всего два значения.
Онлайн-проверка ответа появится позже
Задание. Напиши раздел Var с переменными t, m, s (выбери целый тип так, чтобы 100 000 влезло) и два присваивания через div и mod, которые считают m и s. Протрассируй при t = 3725 и впиши через пробел два числа: сколько минут и сколько секунд, например 2 5.
Принято, если: (1) числа совпали; (2) выбран тип, в диапазон которого входит 100 000; (3) m считается через div, s через mod, у обоих делитель 60.Задача: по числу секунд t (целое, до 100 000) найти, сколько это полных минут и сколько секунд остаётся.
Пример: t = 125 → 2 минуты и 5 секунд.
Подсказка: Минуты: сколько раз 60 помещается в t целиком; секунды: что осталось. Для типа посмотри, у кого верхняя граница больше 100 000.
✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.
Онлайн-проверка ответа появится позже
Итог. Тип задаёт, что влезает в ящик и сколько он занимает. Скалярные типы хранят одно значение (целые, вещественные, Char, Boolean), структурированные хранят набор (массив, строка, запись, файл). Целые типы различаются диапазоном: Byte 0..255, ShortInt −128..127, Word 0..65535, Integer −32768..32767, LongInt ±2,1 млрд. Вещественные пишутся с точкой; буква e означает степень десяти. div даёт частное нацело, mod остаток со знаком делимого. Сравнения: = <> < > <= >=. Var объявляет ящики: имена через запятую, тип после двоеточия.
Что дальше
Ящики объявлены. Теперь научимся класть в них то, что вводит пользователь, и показывать результат на экране в нужном виде: Read, Write и форматы вывода a:5 и c:20:5. И соберём первую полноценную программу из тетради.
