- •1 Дисциплина «Программирование»
- •1 Классификация типов данных в языке программирования Паскаль.
- •2 Регулярные типы данных (массивы) в языке программирования Паскаль.
- •3 Комбинированные типы данных (записи) в языке программирования Паскаль.
- •4 Файловые типы данных в языке программирования Паскаль.
- •Текстовые файлы
- •Типизированные файлы
- •Нетипизированные файлы
- •5 Массивы данных в языке программирования Паскаль.
- •6 Операции и выражения в языке программирования Паскаль. Операции
- •Выражения
- •7 Условный оператор в языке программирования Паскаль.
- •8 Оператор–переключатель в языке программирования Паскаль. Оператор выбора
- •9 Операторы цикла в языке программирования Паскаль.
- •10 Процедуры ввода-вывода в языке программирования Паскаль.
- •11 Процедуры и функции в языке программирования Паскаль.
- •Параметры
5 Массивы данных в языке программирования Паскаль.
Массивы в Турбо Паскале во многом схожи с аналогичными типами данных в других языках программирования. Отличительная особенность массивов заключается в том, что все их компоненты суть данные одного типа (возможно, структурированного). Эти компоненты можно легко упорядочить и обеспечить доступ к любому из них простым указанием его порядкового номера.
Синтаксическая диаграмма регулярных типов имеет следующий вид:
Описание типа массива задается следующим образом:
<имя типа> = ARRAY [ <сп.инд.типов> ] OF <тип>
Здесь <имя типа> - правильный идентификатор;
ARRAY, OF - зарезервированные слова (массив, из);
<сп.инд.типов> - список из одного или нескольких индексных типов, разделенных запятыми; квадратные скобки, обрамляющие список, - требование синтаксиса;
<тип> - любой тип Турбо Паскаля.
В качестве индексных типов в Турбо Паскале можно использовать любые порядковые типы, кроме LONGINT и типов-диапазонов с базовым типом LONGINT.
Определить переменную как массив можно и непосредственно при описании этой переменной, без предварительного описания типа массива, например:
var
а,b : array [1..10] of Real;
Обычно в качестве индексного типа используется тип-диапазон, в котором задаются границы изменения индексов. Так как тип <тип>, идущий за словом OF, - любой тип Турбо Паскаля, то он может быть, в частности, и другим массивом, например:
type
mat = array [0..5] of array [-2..2] of array [Char] of Byte;
Такую запись можно заменить более компактной:
type
mat = array [0..5,-2..2,Char] of Byte;
Глубина вложенности структурированных типов вообще, а следовательно, и массивов - произвольная, поэтому количество элементов в списке индексных типов (размерность массива) не ограничено, однако суммарная длина внутреннего представления любого массива, как уже говорилось, не может быть больше 65520 байт. В памяти ПК элементы массива следуют друг за другом так, что при переходе от младших адресов к старшим наиболее быстро меняется самый правый индекс массива. Если, например,
var
а : array[1. .2,1. .2] of Byte;
begin
a [1,1]:=1;
a [2,1]:=2;
a [l, 2]:=3;
a [2,2]:=4;
end.
то в памяти последовательно друг за другом будут расположены байты со значениями 1,3,2, 4 . Это обстоятельство может оказаться важным при использовании стандартной процедуры копирования памяти MOVE.
В Турбо Паскале можно одним оператором присваивания передать все элементы одного массива другому массиву того же типа, например:
var
а,b:array [1..5] of Single;
begin
a := b;
end.
6 Операции и выражения в языке программирования Паскаль. Операции
В Турбо Паскале определены следующие операции:
унарные not, @;
мультипликативные *, /, div, mod, and, shl, shr;
аддитивные +, -, or, xor;
отношения =, <>, <, >, <=, >=,in.
Приоритет операций убывает в указанном порядке, т.е. наивысшим приоритетом обладают унарные операции, низшим - операции отношения. Порядок выполнения нескольких операций равного приоритета устанавливается компилятором из условия оптимизации кода программы и не обязательно слева направо. При исчислении логических выражений операции равного приоритета всегда вычисляются слева направо.
Унарная операция @ применяется к операнду любого типа и возвращает результат типа POINTER, в котором содержится адрес операнда, если операция @ применяется к процедуре, функции или методу в объекте, ее результатом будет адрес точки входа в эту процедуру (функцию, метод). Этот адрес можно использовать только в подпрограмме, написанной на ассемблере, или в фрагментах INLINE.
В Турбо Паскале определены следующие логические операции:
not - логическое НЕ;
and - логическое И;
or - логическое ИЛИ;
хоr - исключительное ИЛИ.
Логические операции применимы к операндам целого и логического типов. Если операнды - целые числа, то результат логической операции есть тоже целое число, биты которого (двоичные разряды) формируются из битов операндов по правилам, указанным в табл. 3.2.
Таблица 3.2
Логические операции над данными типа INTEGER (поразрядно) | |||||
Операнд 1 |
Операнд 2 |
not |
and |
or |
xor |
1 |
- |
0 |
- |
- |
- |
0 |
- |
1 |
- |
- |
- |
0 |
0 |
- |
0 |
0 |
0 |
0 |
1 |
- |
0 |
1 |
1 |
1 |
0 |
- |
0 |
1 |
1 |
1 |
1 |
- |
1 |
1 |
0 |
К логическим же в Турбо Паскале обычно относятся и две сдвиговые операции над целыми числами:
i shl j - сдвиг содержимого i на j разрядов влево; освободившиеся младшие разряды заполняются нулями;
i shr j - сдвиг содержимого i на j разрядов вправо; освободившиеся старшие разряды заполняются нулями.
В этих операциях i и j - выражения любого целого типа.
Операция отношения IN применяется к двум операндам. Первым (левым) операндом должно быть выражение любого порядкового типа, вторым - множество, состоящее из элементов того же типа, или идентификатор множественного типа. Операция дает TRUE, если левый операнд принадлежит множеству, например:
var
с: char; type
digit = set of ' 0 '..' 9 ' ; begin
if с in digit then .......