Типы данных: целые, вещественные, div и mod, символы и строки

[Изображение: Ящики разного размера с наклейками типов: Byte, Integer, Real, Char, String]

Полстраницы тетради занимает таблица диапазонов: 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 конфету пятерым поровну: сколько осталось?

Онлайн-проверка ответа появится позже

Контрольный вопрос. Какой из целых типов из таблицы вмещает отрицательные числа и при этом занимает только один байт?

АByte
БShortInt
ВWord
ГInteger

Подсказка: Один байт занимают два типа; из них «со знаком» только один.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Какой тип хранит ровно один символ в апострофах, например ‘A’? Впиши название типа латиницей.

Подсказка: Не строка (там до 255 символов), а её один кирпичик.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Вычисли (−17) mod 5 по правилу Паскаля.

А3
Б−2
В2
Г−3

Подсказка: Сначала посчитай 17 mod 5, потом вспомни, чей знак у остатка.

Онлайн-проверка ответа появится позже

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

АWord
БInteger
ВLongInt
ГByte

Подсказка: Сравни 150 000 000 с верхней границей каждого типа.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Компилятор принял три присваивания из четырёх и отказал в одном: число нельзя положить в ящик этого типа. На какой переменной он споткнулся?

Исходный код для этого задания:

Var
  n: Integer;
  x: Real;
  c: Char;
  ok: Boolean;
Begin
  n := 7;
  x := 7;
  c := '7';
  ok := 7;
end.
Аn
Бx
Вc
Гok

Подсказка: Проверь каждый ящик: в 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. И соберём первую полноценную программу из тетради.

← Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева