- •Полный обучающий курс
- •Содержание
- •Ввод-вывод Занятие 1. Язык программирования Паскаль. Знакомство со средой программирования Турбо Паскаль. Основные понятия. Первая программа. Оператор присваивания.
- •Запуск интегрированной среды программирования.
- •Оператор присваивания. Арифметические выражения
- •Порядок выполнения операций
- •Основные определения. Типы данных.
- •Типы данных.
- •Сложные типы
- •Занятие 2. Ввод - вывод. Операторы Read (Readln), Write (Writeln). Простейшие линейные программы
- •Операторы Write и WriteLn
- •Операторы Read и ReadLn
- •I Арифметические функции
- •II Функции преобразования типов
- •III Функции для порядковых типов
- •IV Процедуры для порядковых типов
- •Графика Занятие 1: Графический режим. Инициализация графического режима. Построение точки, линии.
- •1) Инициализация графики, подготовительные работы, управление цветом, закрытие режима:
- •Система координат в графическом режиме.
- •Занятие 2: Построение дуги, окружности, прямоугольника, эллипса.
- •Установка стиля и цвета закраски. Закрашивание фигур.
- •Занятие 3: Вывод текста.
- •Занятие 4. Процедуры рисования закрашенных фигур.
- •Для любопытных. Окно в графическом режиме. Решение задач.
- •Операторы условия и выбора Занятие 1. Разветвляющиеся алгоритмы. Оператор условия If. Разветвляющиеся алгоритмы
- •Занятие 2. Логический тип данных. Логические операции not, and, or. Нахождение значений логических выражений. Самостоятельная работа. Логический тип данных
- •Самостоятельная работа
- •Занятие 3. Вложенные условные операторы. Решение задач.
- •I Выберите с учителем задачи для самостоятельного решения из предложенного списка:
- •II Выберите с учителем задачи для самостоятельного решения из предложенного списка:
- •Занятие 4. Оператор выбора case. Решение задач.
- •Занятие 5. Оператор безусловного перехода Goto. Решение задач.
- •Занятие 6. Контрольная работа
- •Для любознательных
- •Контрольные вопросы
- •Циклы Занятие 1. Циклические алгоритмы. Цикл с предусловием.
- •Цикл с предусловием.
- •Задачи для самостоятельного решения
- •Занятие 2. Цикл с предусловием в графике.
- •Задачи для самостоятельного решения
- •Занятие 3. Контрольная работа
- •Занятие 4. Цикл с постусловием repeat.
- •Задачи для самостоятельного решения
- •Занятие 5. Работа с клавиатурой. Стандартные процедуры read и readLn. Стандартные функции readKey и KeyPressed; их применение в циклах.
- •Стандартная функция readKey
- •Стандартная функция KeyPressed
- •Занятие 6. Цикл со счетчиком.
- •Занятие 7-8. Самостоятельное решение задач.
- •Процедуры и функции Занятие 1. Понятие подпрограммы. Процедуры и функции. Стандартные подпрограммы. Примеры употребления подпрограмм в решении задач.
- •Занятие 2. Формальные и фактические параметры. Вызов по ссылке и по значению. Локальные и глобальные переменные и подпрограммы Формальные и фактические параметры
- •Вызов по ссылке и по значению
- •Параметры-значения
- •Локальные и глобальные переменные и подпрограммы.
- •Занятие 3. Процедуры.
- •Занятие 4. Процедуры в графическом режиме.
- •Занятие 5. Функции.
- •Различие между процедурами и функциями.
- •Задачи для самостоятельного решения
- •Занятие 6. Решение задач
- •Для любознательных. Особенности использования процедур и функций.
- •Заголовок модуля
- •Интерфейсная часть
- •Реализационная часть
- •Инициализационная часть
- •Рекурсия Занятие 1. Понятие рекурсии.
- •Занятие 2. Примеры задач рекурсивного решения в текстовом и графическом режимах.
- •Занятие 3. Косвенная рекурсия.
- •Занятие 4. Решение задач
- •Для любознательных. Ханойские башни. Задача о разрезании прямоугольника
- •Анализ рекурсивных алгоритмов
- •Особенности отладки и компиляции программ, содержащих процедуры и функции
- •Одномерные массивы Занятие 1. Понятие массива. Одномерные массивы. Способы задания одномерных массивов
- •Способы задания одномерных массивов
- •Занятие 2. Доступ к элементам массива
- •Изменение значения некоторых элементов
- •Нахождение номеров элементов с заданным свойством
- •Нахождение количества элементов с заданным свойством
- •Есть ли в данном массиве элементы с данным свойством?
- •Занятие 3. Удаление элементов из одномерного массива.
- •Задачи для самостоятельного решения
- •Занятие 4. Вставка элементов в одномерный массив. Вставка одного элемента
- •Вставка нескольких элементов
- •Задачи для самостоятельного решения
- •Занятие 5. Перестановка элементов массива. Перестановка двух элементов
- •Перестановка части массива
- •Работа с несколькими массивами.
- •Занятие 6. Самостоятельное решение задач.
- •Двумерные массивы Занятие 1. Понятие двумерного массива. Описание типа массива. Формирование значений элементов массива случайным образом.
- •Формирование значений элементов массива случайным образом и с клавиатуры и вывод их на экран
- •Занятие 2. Работа с элементами массива.
- •Нахождение количества элементов с данным свойством
- •Определить, отвечает ли заданный массив некоторым требованиям
- •Изменение значений некоторых элементов, удовлетворяющих заданному свойству
- •Заполнение массива по правилу
- •Задачи для самостоятельного решения
- •1. Найти сумму и количество элементов с заданным условием (хранить эти значения в массивах):
- •2. Найти и вывести на экран индексы заданных элементов массива (если их нет выдать соответствующее сообщение):
- •3. Используя функцию булева типа, определить:
- •4. Измените исходный массив в соответствии с заданием:
- •5. Решите задачу на заполнение массива по определенному правилу.
- •Занятие 3. Вставка и удаление строк и столбцов.
- •Вставка строк и столбцов
- •Удаление строк и столбцов
- •Задачи для самостоятельного решения
- •Занятие 4. Перестановка элементов массива.
- •Задачи для самостоятельного решения
- •Занятие 5. Самостоятельное решение задач.
- •I. Заполнение и анализ элементов массива
- •II. Работа с одномерным и двумерным массивами
- •Занятие 6. Контрольная работа
- •Для любопытных. Графические программы с применением массивов.
- •Методы сортировки массива Занятие 1. Сортировка массива. Способы сортировки массива.
- •Занятие 2. Сортировка вставкой. Сортировка выбором.
- •Сортировка выбором
- •Занятие 3. Сортировка методом простого обмена. Рекурсивная сортировка
- •Cортировка массива с помощью рекурсии.
- •Занятие 4. Сортировка методом слияний.
- •Для любопытных. Рекурсивная сортировка слиянием
- •Занятие 5-6. Самостоятельное решение задач.
- •Строки Занятие 1. Тип данных char. Операции над символами
- •Задачи для самостоятельного решения
- •Занятие 2. Строка. Тип данных string. Строковые переменные, их описание. Длина строки. Операции над строками
- •Задачи для самостоятельного решения
- •Занятие 3. Стандартные функции для работы со строками (concat,copy,length, pos,upcase). Функция Length
- •Функция Upcase
- •Функция Copy
- •Функция Pos
- •Функция Concat
- •Задачи для самостоятельного решения
- •Задачи для самостоятельного решения
- •Занятие 5. Контрольная работа
- •Занятие 6. Решение задач.
- •Для увлеченных программированием. Бегущая строка. Пример программы осыпающихся букв. Строки в графическом режиме.
- •Множества Занятие 1. Множественный тип данных. Множество. Элемент множества. Способы задания множества. Объединение множеств. Разность множеств. Пересечение множеств.
- •Занятие 2. Логические операции над множествами: проверка принадлежности элемента множеству, проверка включения элемента в множество, сравнение множеств.
- •Занятие 3. Примеры решений задач на применение множества.
- •Занятие 4. Самостоятельное решение задач.
- •Запись Занятие 1. Комбинированный тип данных. Запись. Описание записи. Доступ к полям записи. Оператор With. Примеры решения задач
- •Занятие 2. Самостоятельное решение задач
- •Занятие 3. Сортировка записей.
- •Занятие 4. Записи с вариантами.
- •Дополнительно. Решение задач
- •Файлы Занятие 1. Файлы. Виды файлов. Типизированные файлы
- •Процедуры и функции для работы с файлами любого типа
- •Примеры решения задач
- •Занятие 2. Процедуры и функции для работы с типизированными файлами
- •Функция ioResult
- •Занятие 3. Самостоятельное решение задач
- •I Выберите с учителем одну из предложенных ниже задач (тип Integer, real)
- •II Выберите с учителем одну из предложенных ниже задач (тип char)
- •III Выберите с учителем одну из предложенных ниже задач (тип string)
- •IV Выберите с учителем одну из предложенных ниже задач (тип record)
- •Занятие 4. Процедуры и функции работы с файлами. Решение задач
- •Тeкстовые файлы Занятие 1. Тeкстовые файлы, их описание и основные отличия от типизированных файлов.
- •Занятие 2. Способы обмена с текстовыми файлами.
- •Операции чтения из файла
- •Операции записи в файл
- •Логическая функция Eoln
- •Процедура открытия файла для дополнения
- •Занятие 3. Стандартные текстовые файлы Input и Output. Примеры задач
- •Занятие 4. Самостоятельное решение задач
- •Для любознательных. Текстовый режим. Модуль crt. Работа с цветом. Работа с экраном и курсором
- •Нетипизированные файлы Занятие 1. Нетипизированные файлы. Их отличия. Процедуры blockread и blockwrite.
- •Занятие 2. Решение задач
- •Занятие 3. Использование типизированных файлов в качестве нетипизированных
- •Занятие 4. Использование текстовых файлов в качестве нетипизированных.
- •Занятие 5. Примеры решения творческих задач
- •Для любознательных. Дополнительные процедуры и функции работы с файлами
- •Внешние устройства в качестве файлов.
- •Граф Занятие 1. Основные понятия.
- •Занятие 2. Представление деревьев. Основные операции над деревом.
- •Занятие 3. Самостоятельное решение задач.
- •Занятие 4. Идеально сбалансированное дерево.
- •Стек Занятие 1. Стек. Отличия стека от списка. Основные операции со стеком.
- •Занесение элемента в стек
- •Извлечение элемента из стека
- •Примеры решения задач.
- •Занятие 2. Самостоятельное решение задач
- •Занятие 3. Очереди. Основные операции над очередью.
- •Занесение элемента в очередь
- •Извлечение элемента из очереди
- •Примеры решения задач
- •Занятие 4. Самостоятельное решение задач
- •Занятие 5. Кольцо. Формирование кольца. Основные операции над кольцом.
- •Формирование кольца
- •Обход кольца
- •Занятие 6. Примеры решения задач с применением динамической структуры кольцо. Творческая работа.
- •Список Занятие 1. Список. Создание списка путем добавления элементов в конец списка. Просмотр списка.
- •Просмотр списка
- •Занятие 2. Создание списка путем вставления элементов в начало.
- •Занятие 3. Упорядочивание списка. Вставление элемента в середину списка.
- •Занятие 4-5. Примеры задач, решаемых с помощью списка. Решение задач.
- •Занятие 6. Удаление элемента из списка.
- •Занятие 7. Зачет.
- •Динамические структуры данных Занятие I. Динамические структуры данных. Статические и динамические переменные. Адреса. Указатели и их объявление.
- •Указатели и их объявление
- •Занятие 2. Присвоение значений указателю. Оператор @ с переменной. Оператор @ с параметром процедуры, переданным по значению. Оператор @ с параметром процедуры, переданным по ссылке.
- •Занятие 3. Список. Создание списка путем добавления элементов в конец списка. Просмотр списка
- •Занятие 4. Создание списка путем вставления элементов в начало.
- •Занятие 5. Упорядочивание списка. Вставление элемента в середину списка.
- •Примеры задач, решаемых с помощью списка
- •Занятие 6. Удаление элемента из списка.
Занятие 3. Самостоятельное решение задач.
Выберите с учителем одну из предложенных задач.
1. Создайте программой числовое двоичное дерево. Опишите рекурсивную логическую функцию, проверяющую наличие заданного числа в сформированном дереве. В программе используйте подпрограммы.
2. Создайте программой числовое двоичное дерево. Опишите рекурсивную числовую функцию, подсчитывающую сумму элементов дерева. В программе используйте подпрограммы.
3. Создайте программой числовое двоичное дерево. Опишите функцию, которая находит наибольший элемент непустого дерева. В программе используйте подпрограммы.
4. Напишите программу, содержащую процедуру, которая каждый отрицательный элемент дерева заменяет на положительный, а положительный превращает в ноль.
5. Напишите программу, содержащую процедуру, которая каждый элемент дерева возводит в квадрат.
6. Создайте программой символьное двоичное дерево. Опишите функцию, возвращающую строку, сформированную на базе этих символов. В программе используйте подпрограммы.
7. Создайте программой символьное двоичное дерево. Опишите логическую функцию, проверяющую, есть ли в непустом дереве хотя бы два одинаковых символа. В программе используйте подпрограммы.
8. Создайте строковое двоичное дерево. Опишите функцию, возвращающую строку, сформированную на базе символов, встречающихся в каждой строке дерева. В программе используйте подпрограммы.
9. Создайте двоичное дерево записей. Проверьте выбранное поле записей на равенство. В программе используйте подпрограммы.
10. Создайте программой два числовых двоичных дерева. Опишите рекурсивно и нерекурсивно логическую функцию, входными параметрами которой являются два дерева, проверяющую на равенство эти деревья. В программе используйте подпрограммы.
Занятие 4. Идеально сбалансированное дерево.
В дереве поиска можно найти место каждого элемента, двигаясь от корня и переходя на левое или правое поддерево в зависимости от значений встречающихся данных.
Использование деревьев поиска значительно сокращает время решения задачи.
Правильно организованным деревом считается идеально сбалансированное дерево, то есть для каждой его вершины количество вершин в левом и правом поддереве различаются не более чем на 1.
Сформируем идеально сбалансированное дерево, элементами которого являются N чисел, вводимых с клавиатуры.
Поскольку требуется построить идеально сбалансированное дерево, то его узлы в процессе построения должны распределяться равномерно. Сформируем правило равномерного распределения узлов при известном их числе:
• Взять один узел в качестве корня.
• Построить левое поддерево с числом узлов n1=N div 2 тем же способом.
• Построить правое поддерево с числом узлов n2=N-n1-1 тем же способом.
Program BalansTree;
Uses
Crt;
Type
Pt = ^Node;
Node = record
Data : integer;
Left, Right : Pt;
end;
Var
n : integer;
kd : Pt;
f : text;
Function Tree(n : integer) : Pt;
Var
NewNode : Pt;
x, n1, n2 : integer;
Begin
if n=0
then
Tree := Nil
else
begin
n1 := n Div 2;
n2 := n–n1–1;
read(f,x);
new(NewNode);
with NewNode^ do
begin
Data := x;
Left := Tree(n1);
Right := Tree(n1);
end;
Tree := NewNode;
end;
End;
Procedure PrintTree(t : Pt; h : integer);
Var
i : integer;
Begin
if t<>nil
then
with t^ do
begin
PrintTree(Left, h+1);
for i := 1 to h do
write(' ');
writeln(Data:6);
PrintTree(Right, h+1);
end;
End;
Begin
ClrScr;
assign(f, 'c:\f.pas');
reset(f);
write('n=');
readln(n);
kd := Tree(n);
PrintTree(kd, 0);
readln;
End.
Задание. Наберите программу, протестируйте ее, вставьте комментарий, приготовьтесь объяснить учителю принцип построения идеально сбалансированного дерева.
Поиск и включение элемента в дерево.
Задача. Задана последовательность слов. Определить частоту вхождения каждого из слов в последовательности.
Для решения задачи любое слово ищется в дереве, которое на начальном этапе пусто. Если слово найдено, то счетчик его вхождений увеличивается на 1, если нет, то слово включается в дерево с единичным значением счетчика.
Program Poisk;
Uses
Crt;
Type
Words = ^WordTree;
WordTree = record
Data : string;
k : integer;
Left, Right : Words;
end;
Var
n : integer;
kd : Words;
x : string;
f : text;
Procedure Tree(x : string; Var p : Words);
Begin
if p=nil
then
begin
new(p);
with p^ do
begin
k := 1;
Data := x;
Left := Nil;
Right := Nil;
end;
end;
else
if x>p^.Data
then
Tree(x. p^.Left)
else
if x<p^.Data
then
Tree(x. p^.Right)
else
Inc(p^.k);
End;
Procedure PrintTree(t : Words; h : integer);
Var
i : integer;
Begin
if t <> Nil
then
with t^ do
begin
PrintTree(Left, h+1);
for i := 1 to h do
write(' ');
writeln(Data, ',(', k, ')');
PrintTree(Right, h+1);
end;
End;
Begin
ClrScr;
assign(f, 'c:\f.dan');
reset(f);
write('n=');
readln(n);
kd := Nil;
while n>0 do
begin
readln(f,x);
Tree(x, kd);
Dec(n);
end;
close(f);
PrintTree(kd, 0);
readln;
End.
Эта задача называется задачей поиска по дереву с включением.
Задание. Наберите программу, протестируйте ее, вставьте комментарий, приготовьтесь объяснить учителю принцип поиска по дереву с включением. По желанию можете усложнить текст задачи, усовершенствовать ее решение или внести еще какие-либо изменения.
Удаление из дерева.
Непосредственное удаление элемента из упорядоченного дерева реализуется достаточно просто, если эта вершина является конечной или из нее выходит только одно ребро. Для этого нужно изменить соответствующую ссылку у предшествующей вершины.
Если же из удаляемой вершины выходит две ветви, то нужно найти подходящую вершину дерева, которую можно было бы вставить на место удаляемой вершины.
Из вышесказанного следует, что процедура удаления элемента из дерева должна различать три случая.
1. Удаляемая вершина имеет два поддерева. В этом случае удаляемый элемент нужно заменить либо на самый правый элемент его левого поддерева, либо на самый левый элемент его правого поддерева. При этом они должны иметь не больше одного потомка.
2. Удаляемая вершина имеет не более одного поддерева (0 или 1).
3. Удаляемой вершины в дереве нет.
Просмотрите рекурсивную процедуру DelTree, которая отыскивает элемент с заданным ключом и удаляет его. В процедуре DelTree описана процедура d1, которая работает только в первом из трех перечисленных случаев.
Вспомогательная процедура d1 "движется" по правой ветви левого поддерева исключаемого элемента q^ и заменяет значение ключа в q^ на соответствующее значение из самого правого элемента r^ левого поддерева.
Type
Pt = ^Node;
Node = Record
Data : integer;
Left, Right : Pt;
End;
Procedure DelTree(x : integer; Var p : Pt);
Var
q : Pt;
Procedure D1(Var r : Pt);
Begin
if r^.Right <> Nil
then
d1(r^.Right)
else
begin
q^.Data := r^.Data;
q := r;
r := r^.Left;
Dispose(q);
end;
End;
Begin
if p=nil
then
writeln('Элемента с ключом ', x, 'в дереве нет.')
else
if x<p^.Data
then
DelTree(x, p^.Left)
else
if x>p^.Data
then
DelTree(x, p^.Right)
else
begin
q := p;
if q^.Right = Nil
then
begin
p := q^.Left;
dispose(q);
end;
else
if q^.Left = Nil
then
begin
p := q^.Right;
dispose(q);
end;
else
D1(q^.Left)
end;
End;
Задание. Наберите программу, протестируйте ее, вставьте комментарий, приготовьтесь объяснить учителю принцип удаления элемента из дерева.
Выберите задачу для решения из предложенных ниже.
1. Удалите из дерева все равные между собой элементы. В программе используйте подпрограммы.
2. Удалите из дерева все повторяющиеся элементы. В программе используйте подпрограммы.
3. Постройте два дерева. Проверьте, является ли одно из них поддеревом другого. Если "да", то удалите это поддерево. В программе используйте подпрограммы.
4. Постройте два дерева. Проверьте, является ли одно из них поддеревом другого. Если "нет", то включите это поддерево. В программе используйте подпрограммы.
5. Используя очередь или стек, вычислите среднее арифметическое всех элементов непустого дерева Т и удалите все элементы меньшие этого числа. В программе используйте подпрограммы.
6. Используя очередь или стек, поменяйте местами максимальный и минимальный элементы непустого дерева Т, все элементы которого различны. В программе используйте подпрограммы.
7. Используя очередь или стек, напечатайте все элементы дерева Т по уровням: сначала – из корня дерева, затем (слева направо) – из вершин, дочерних по отношению к корню, затем (также слева направо) – из вершин, дочерних по отношению к этим вершинам, и т.д. В программе используйте подпрограммы.
8. Используя очередь или стек, найдите в непустом дереве Т длину (число ветвей) пути от корня до ближайшей вершины с элементом Е. Если такого элемента не обнаружено, то выдайте на экран соответствующее сообщение. В программе используйте подпрограммы.
9. Используя очередь или стек, подсчитайте число вершин на n-ом уровне непустого дерева Т (корень считайте вершиной 0-го уровня). В программе используйте подпрограммы.
10. Объедините два дерева в одно идеально сбалансированное. В программе используйте подпрограммы.
Задачи для самостоятельного решения (на усмотрение учителя)
1. Напишите программу, содержащую процедуру или функцию, которая присваивает параметру Е элемент из самого левого листа непустого дерева (лист – вершина, из которой не выходит ни одной ветви), используя очередь или стек. В программе используйте подпрограммы.
2. Напишите программу, содержащую процедуру или функцию, которая находит в непустом дереве длины (число ветвей) путей от корня до всех вершин, используя очередь или стек. В программе используйте подпрограммы.
3. Напишите программу, содержащую процедуру или функцию, которая подсчитывает число вершин на каждом уровне непустого дерева (корень считать вершиной 0-го уровня). В программе используйте подпрограммы.
4. Напишите программу, содержащую процедуру или функцию, которая определяет максимальную глубину непустого дерева Т, т.е. число ветвей в самом длинном из путей от еорня дерева до листьев. В программе используйте подпрограммы.
5. Напишите программу, содержащую процедуру, которая строит Т1 – копию дерева Т. В программе используйте подпрограммы.
6. Напишите программу, содержащую процедуру Create(T,n), где n – положительное целое число, которая строит Т – дерево, изображенное на рисунке. В программе используйте подпрограммы.
7. Напишите программу, содержащую процедуру Create(T,n), где n – положительное целое число, которая строит Т – дерево, изображенное на рисунке. В программе используйте подпрограммы.
8. Формулу вида
<формула>::=<терминал>|(<формула><знак><формула>)
<знак>::=+|-|*
<терминал>::=0|1|2|3|4|5|6|7|8|9
можно представить в виде двоичного дерева ("дерева-формулы") с элементами типа char согласно следующим правилам: формула из одного терминала (цифры) представляется деревом из одной вершины с этим терминалом, а формула вида (f1sf2) – деревом, в котором корень – это знак s, а левое и правое поддеревья – это соответствующие представления формул f1 и f2. Для примера посмотрите как будет выглядеть дерево, соответствующее формуле (5*(3+8)).
Опишите рекурсивную функцию или процедуру, которая:
а) вычисляет (как целое число) значение дерева-формулы Т);
б) по формуле из текстового файла f строит соответствующее дерево-формулу Т;
в) печатает дерево-формулу Т в виде соответствующей формулы;
г) проверяет, является ли двоичное дерево Т деревом-формулой.
9. Пусть в дереве-формуле (см. предыдущую задачу) в качестве терминалов используются не только цифры, но и буквы, играющие роль переменных. Опишите процедуру, которая:
а) упрощает дерево-формулу Т, заменяя в нем все поддеревья, соответствующие формулам (f+0), (0+f), (f-0), (f*1), (1*f) на поддеревья, соответствующие формуле f, а поддеревья, соответствующие формулам (f*0) и (0*f), на вершину с 0;
б) преобразует дерево-формулу Т, заменяя в нем все поддеревья соответствующие формулам ((f1+f2)*f3, (f1-f2)*f3) и (f1*(f2+f3), f1*(f2-f3)) на поддеревья, соответствующие формулам ((f1*f3)+(f2*f3), (f1*f3)-(f2*f3)) и ((f1*f2)+(f1*f3), (f1*f2)-(f1*f3)).
10. Во внешнем текстовом файле записана (без ошибок) некоторая программа на языке Паскаль. Известно, что в этой программе каждый идентификатор (служебное слово или имя) содержит не более 9 латинских букв и/или цифр. Напечатайте в алфавитном порядке все различные идентификаторы этой программы, указав для каждого из них число его вхождений в текст программы. Необходимо учесть, что в идентификаторах одноименные прописные и строчные буквы отождествляются, что внутри литерных значений, строк-констант и комментариев последовательности из букв и цифр не являются идентификаторами и что в записи вещественных чисел может встретиться буква Е или е.