- •2 Сравнительный анализ языков программирования высокого уровня Си и Паскаль
- •2.1 Структура программы
- •2.2.2 Пользовательские типы
- •2.3 Арифметические операции
- •Окончание таблицы 2.3.1
- •Окончание таблицы 2.3.2
- •2.4 Указатели и векторные типы данных
- •2.5.2 Операторы-переключатели
- •2.6.2 Безусловный переход
- •2.7 Пользовательские подпрограммы
- •2.8 Итоги анализа сравнения языков программирования Паскаль и Си
- •3.2 Реализация задания
- •3.3 Алгоритмы, реализованные в процессе решения задачи
2.2.2 Пользовательские типы
В обоих языках реализована возможность создавать псевдонимы для существующих типов и новые типы. [7] Кроме стандартных типов данных Паскаль поддерживает скалярные типы, определенные самим пользователем. К ним относятся перечислимые типы (когда непосредственно, в разделе описания типов, заранее записываются все значения для переменных этого типа) и интервальные (когда задаются границы диапазона значений для данной переменной), указательные типы (кроме Pointer), структурированные типы и процедурные типы. Данные этих типов занимают в памяти один байт, поэтому скалярные пользовательские типы не могут содержать более 256 элементов. Их применение значительно улучшает наглядность программы, делает более легким поиск ошибок, экономит память.
Перечислимый тип данных задается непосредственно перечислением всех значений, которые может принимать переменная данного типа. При описании отдельные значения указываются через запятую, а весь список заключается в круглые скобки. Интервальный тип позволяет задавать две константы, определяющие границы диапазона значений для каждой переменной. Обе константы должны принадлежать одному и тому же стандартному типу (кроме real). Указательные типы - их значениями являются адреса памяти. В отличие от стандартного указательного типа Pointer, пользовательский тип определяет множество значений, которые указывают на динамические переменные определенного типа , называемого базовым типом. Указатель на какой-либо тип может быть описан до объявления самого типа.
Псевдоним в Паскале создается в специальном разделе перед телом программы и после ключевого слова TYPE. Для создания псевдонима компилятору необходимо лишь знать размер, который будет занимать новый тип в байтах. Поэтому можно создавать псевдонимы, ссылающиеся на указатели и на массивы. В Си для этих целей используется ключевое слово typedef, которое вызывается в любой достижимой точке программы и имеет время жизни с момента вызова и до завершения блока, внутри которого произошел вызов. Принцип действия аналогичен паскалевскому.
[8] В языке Си существует пять способов создания пользовательских типов данных. Пользовательские типы данных можно создавать с помощью:
-
структуры - группы переменных, имеющей одно имя и называемой агрегатным типом данных. Кроме того, еще известны термины: соединение или конгломерат;
-
объединения, которое позволяет определять один и тот же участок памяти как два и более типов переменных;
-
битового поля, которое является специальным типом элемента структуры или объединения, позволяющим легко получать доступ к отдельным блокам;
-
перечисления - списка поименованных целых констант;
-
ключевого слова typedef, которое определяет новое имя для существующего типа;
В первоначальной реализации Си перечисляемых типов не было, их добавили позже. В Си представителем перечисляемого типа является нумерованный список enum, оформляемый следующим образом: вначале используется ключевое слово enum, затем необязательное название нумерованного списка. После в фигурных скобках идет перечисление элементов списка; если элементу не присвоено значение, то автоматически он переназначается как инкрементированное значение предыдущего элемента. Каждому элементу списка соответствует целое значение; если первый элемент не инициализирован, он инициализируется нулем.
