- •Тема 3. Объекты и средства программирования на языке.
- •1. Структура программы.
- •2. Данные как объекты работы программы.
- •3. Константы и их определение.
- •Идентификаторы и переменные.
- •Выражения.
- •Встроенные функции и процедуры.
- •Начальные сведения о вводе-выводе данных. Ввод данных.
- •Вывод данных.
- •Тема 5. Простые типы данных.
- •1. Классификация типов
- •Стандартные функции для работы с порядковыми типами данных
- •2. Характеристика простых типов данных
- •Характеристики целых типов данных
- •Характеристики вещественных типов данных
- •3. Совместимость и преобразование типов
- •Массивы и работа с ними
- •Действия над массивами.
- •Константы-массивы.
3. Совместимость и преобразование типов
При присваивании значений переменным, вычислении значений выражений, согласовании фактических и формальных параметров процедур и функций необходимо учитывать совместимость типов используемых в них данных.
Важно запомнить следующие простые правила.
Во всех случаях два типа совместимы, если:
они оба одного типа;
оба вещественные или оба целые;
оба – строки;
один строка, а другой – символ;
один тип представлен интервалом второго типа;
оба представлены интервалами одного и того же базового типа;
оба – подмножества одного и того же базового типа;
оба – процедурные типы с одинаковым количеством и типом соответствующих параметров, а для функции – и типом результата.
Кроме того, в операторах присваивания тип переменной (т1) и тип результата (т2) считаются совместимыми, если:
они одни и те же;
они совместимые порядковые и т2 представлен интервалом т1;
они вещественные и т2 представлен интервалом т1;
т1 – вещественный, а тип т2 – целый;
т1 – строка, а тип т2 – строка или символ;
оба – совместимые множества, причем все элементы т2 принадлежат множеству возможных значений т1;
т1 и т2 – совместимые процедурные типы.
Допускаются преобразования данных одного типа в данные другого типа. Они могут быть:
- явными, осуществляемыми в программе реально записанными специальными встроенными функциями CHR,ORD,TRUNC и ROUND, в которых аргумент и результат принадлежат разным типам.
- неявными, осуществляемыми:
1. в выражениях, где предварительно вещественные и целые данные преобразуются в вещественный тип, и в результате формируется результат вещественного типа;
2. в случае, когда происходит наложение данных разного типа на одну и ту же область оперативной памяти (например, в записях с вариантной частью).
Примечание: чтобы избежать появление в программе возможных,
трудно обнаруживаемых ошибок рекомендуется все
преобразования данных осуществлять явно!
- « -
Массивы и работа с ними
Под массивом понимается фиксированная совокупность
однотипных элементов, расположенных в
определенном порядке.
Местоположение элемента в массиве определяется его номером или, иначе, - индексом. Тем самым обеспечивается упорядоченность элементов и возможность быстрого доступа к ним.
Каждый массив обладает по крайней мере тремя характеристиками: мерностью, размерностью (размером) и типом элементов
.
Мерность определяется количеством измерений массива, т.е. количеством индексов, используемых при обращении к элементу массива.
В зависимости от числа индексов (измерений) массивы бывают одномерными и многомерными.
Например,
а). последовательность чисел
2 34 -5 7 0 13 -22
есть одномерный массив, состоящий из 7 элементов целого типа (и только). Присутствие в нем элемента со значением, допустим, 3.14 недопустимо, т.к. это число с дробной частью, т.е. вещественного типа. Обозначить данный массив можно, например, так:
МАS(7) или А(7).
При этом число 13 в массиве будет иметь индекс 6 и выражаться MAS[6] или А[6].
I-ый элемент обозначается MAS[I] или А[I].
Аналогично, последовательность слов
МИР РАК РИМ СОК КОТ ТОК
также является одномерным массивом, состоящим из 6-ти, но уже 3–х символьных элементов.
б). двумерный массив в нашем представлении есть матрица, где местоположение элемента определяется двумя индексами, первый из которых обозначает строку, а второй – столбец. Поэтому элемент М[2,4] будет располагаться на пересечении 2-й строки и 4-го столбца. А сама матрица, состоящая, например, из 6 строк и 5 столбцов, будет иметь следующее обозначение:
М(6,5)
в). трехмерный массив представляется кубом. Для идентификации отдельного элемента в нем уже применяются 3 индекса: первый и второй отображают, соответственно, строку и столбец плоскости (матрицы) куба, а третий – саму эту плоскость (матрицу). Поэтому отображение
К(3,4,5)
задает куб из 5-ти матриц, каждая из которых насчитывает 3 строки и 4 столбца.
А указание
К[2,1,3]
выводит нас на элемент, находящийся на пересечении 2-ой строки и 1-го столбца 3-й матрицы куба.
Если увеличивать число индексов, то можно оперировать более сложными массивами и представлять n-мерные пространства.
Размерность массива учитывает количество измерений и задается максимальной (верхней) границей диапазона изменения его индексов. В частности, для одномерного массива размерность будет совпадать с количеством элементов в нем. А для двухмерного размерность будет отражать количество строк и, отдельно, количество столбцов в соответствующей ему матрице.
Например, говорят: массив В, размерностью 4 на 6, подразумевая, что он двумерный и содержит 4 строки 6 столбцов. Т.е. В(4,6).
Размер массива определяет общее количество его элементов. При этом в расчет берутся все измерения массива. Так, размер двумерного массива В(4,6) равен 24.
Напомним, что важнейшей особенностью массива является фиксированное количество элементов в нем.
Чтобы использовать массивы в программе, их необходимо объявить.
Объявить массив – это означает сообщить компилятору:
- имя массива, которое определяет переменную с индексами;
- тип элементов массива;
- тип индексов элементов массива;
- размерность массива, равную количеству его индексных позиций;
- порядок позиционирования, т.е. нумерации элементов массива;
- количество элементов массива.
Полная форма объявления массива:
cписок тип
TYPE <имя типа > =ARRAY[<типов индексов >] OF < элементов >;
массива через запятую массива
VAR <имя массива> : < имя типа массива>;
Типы индексов указываются для каждого измерения и м.б. любыми простыми порядковыми, кроме LONGINT и его диапазона. На практике чаще всего используют интервальный или перечисляемый типы.
Тип элементов м.б. любым из допустимых, кроме FILE.
Сокращенная форма объявления:
имя cписок тип
VAR < массива> : ARRAY[<типов индексов >] OF < элементов >;
через запятую массива
Примеры объявления одномерных массивов:
a). полная запись:
TYPE
A=ARRAY[1..50] OF INTEGER;
B=ARRAY[10..20] OF REAL;
C=ARRAY[-5..15] OF BOOLEAN;
D=ARRAY[0..25] OF STRING[30];
E=ARRAY[-1..5] OF CHAR;
VAR MASA: A; => массив из 50 элементов целого типа
MASB: B; => массив из 11 элементов вещественного типа
MASС: С; => массив из 21 элемента булевского типа
MASD: D; => массив из 26 элементов строкового типа
MASE: E; => массив из 7 элементов символьного типа
Границы изменения индексов можно задать и так:
CONST I=-10000;
N=10000;
TYPE M= ARRAY[I..N] OF REAL;
б). сокращенная запись:
VAR MASA: ARRAY[1..50] OF INTEGER;
Примеры объявления многомерных массивов:
TYPE A1= ARRAY[1..20] OF INTEGER;
A2= ARRAY[1..10] OF A1;
VAR MSV: A2; => матрица, размерностью 10 на 20
Или:
TYPE A1= ARRAY[1..20] OF INTEGER;
VAR MSV: ARRAY[1..10] OF A1;
Или:
VAR MSV: ARRAY[1..10] OF ARRAY[1..20] OF INTEGER;
Или еще проще:
VAR MSV: ARRAY[1..10,1..20] OF INTEGER;
Следует учитывать, что, располагаясь в оперативной памяти, элементы массива образуют цепочку, в которой при последовательном переходе от элемента к элементу быстрее меняется самый правый (младший) индекс. Иными словами, в массиве T(2,3) элементы расположатся в следующем порядке:
Т[1,1] Т[1,2] Т[1,3] Т[2,1] Т[2,2] Т[2,3]
А в нашем представлении:
Т[1,1] Т[1,2] Т[1,3]
Т[2,1] Т[2,2] Т[2,3]
Для обращения к любому элементу объявленного массива предназначена переменная с индексом. По форме записи - это имя массива со списком из одного или нескольких индексов через запятую, заключенным в квадратные скобки.
Индекс может быть константой или выражением того же типа, что и тип индекса:
MASА[7] => обращение к 7–му (из 50-ти) элементу массива
MASA.
MSV[2,5] => обращение к элементу, лежащему на
пересечении 2-ой строки и 5-го столбца
матрицы MSV.
M1[i+1,j-2,k*3] => обращение к элементу трехмерного
массива M1, индексы которого вычисляются
согласно приведенным выражениям.
Замечания:
при обращении к элементам массива следует помнить, что количество индексных выражений /индексов/ должно равняться размерности массива.
значения индексов должны находиться в пределах их границ, заданных интервалом или перечислением.
значение вычисляемого индекса должно соответствовать типу индекса и не м.б. REAL.
Например, недопустимо:
Pole :=MSV[15, 25/(3+a), 4];
т.к.:
первый индекс д.б. < = 10
второй – дает в результате REAL
третьего индекса вообще не должно быть
Можно описывать массивы с помощью компонент и индексов разных типов:
а).
TYPE DAY=(PND,VTR,SRD,CTV,PTN,SBT,VSK);
VAR DN: ARRAY[1..7] OF DAY;
Значениями элемента этого массива DN может быть один из 7 дней недели, задаваемых перечисляемым типом DAY, т.е допустимо:
DN[5]:=CTV;
б).
TYPE GR=(EIS_111,EIS_112,EIS_211,EIS_212,EIS_311,EIS_312);
ML_KURS=(1..3);
VAR STUD: ARRAY[GR, ML_KURS] OF INTEGER;
Тогда,
STUD[EIS_112,1]:=23; => число студентов в группе.