- •Лабораторный практикум
- •Лабораторный практикум
- •Содержание
- •Введение
- •61002, Харків, вул. Фрунзе, 21.
- •61002, Харків, вул. Фрунзе, 21.
- •Порядок выполнения работы
- •Теоретические сведения
- •Пример решения задачи
- •Индивидуальные задания
- •Порядок выполнения работы
- •Теоретические сведения
- •Пример решения задачи
- •Индивидуальные задания
- •Порядок выполнения работы
- •Теоретические сведения
- •Пример решения задачи
- •Индивидуальные задания
- •Порядок выполнения работы
- •Теоретические сведения
- •Пример решения задачи
- •Примеры решения задач
- •Индивидуальные задания
- •Порядок выполнения работы
- •Теоретические сведения
- •Пример решения задачи
- •Примеры решения задач
- •Индивидуальные задания
- •Константы цвета
- •Порядок выполнения работы
- •Теоретические сведения
- •Пример решения задачи
- •Примеры решения задач
- •Индивидуальные задания
- •Порядок выполнения работы
- •Теоретические сведения
- •Пример решения задачи
- •Текст программы
- •Примеры решения задач
- •Индивидуальные задания
- •Порядок выполнения работы
- •Теоретические сведения
- •Пример решения задачи
- •Текст программы
- •Примеры решения задач
- •Индивидуальные задания
Порядок выполнения работы
Выберите метод решения задачи.
Выберите стандартные функции, необходимые для решения задачи.
Выберите форму представления данных.
Разработайте алгоритм решения задачи. Для ввода данныхиспользуйте диалоговый режим или вводите с помощью генератора случайных чисел. Результат решения задачи выведите на экран дисплея.
Теоретические сведения
МАССИВЫ
МАССИВ – это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип. Можно использовать и любой другой ранее описанный тип, поэтому вполне правомерно существование массивов записей, массивов указателей, массивов строк, массивов массивов и т.д. Элементами массива могут быть данные любого типа, включая структурированные. Тип элементов массива называется базовым. Число элементов массива фиксируется при описании и в процессе выполнения программы не меняется.
Доступ к каждому отдельному элементу осуществляется путем индексирования элементов массива. Индекс массива по смыслу тождественен понятию индекса элемента вектора. Индексы представляют собой выражения любого скалярного типа, кроме вещественного. Тип индекса определяет границы изменения значений индекса. Для описания массива предназначено словосочетание ARRAY OF (массив из).
Формат:
TYPE <имя типа> = ARRAY [тип индекса] OF <тип компонент>;
VAR <идентификатор,...> : <имя типа>;
Массив может быть описан и без представления типа в разделе описания типов данных:
VAR <идентификатор,...> : ARRAY [тип индекса] OF <тип компонент>;
Пример:
TYPE
KLASS = (K1,K2,K3,K4);
ZNAK = ARRAY[1..255] OF CHAR;
VAR
M1: ZNAK; {тип ZNAK предварительно описан в разделе типов}
M2: ARRAY[1..60] OF INTEGER; {прямое описание массива M2}
M3: ARRAY[1..4] OF KLASS;
MAS: ARRAY[1..4] OF INTEGER;
Если в качестве базового типа взят другой массив, образуется структура, которую принято называть многомерным массивом.
Пример:
TYPE
VECTOR = ARRAY[1..4] OF INTEGER;
MASSIV = ARRAY[1..4] OF VECTOR;
VAR
MATR : MASSIV;
Ту же структуру можно получить, используя другую форму записи:
VAR
MATR : ARRAY[1..4,1..4] OF INTEGER;
Если в такой форме описания массива задан один индекс, массив называется одномерным, если два индекса – двухмерным, если N индексов – N – мерным. Размерность ограничена только объемом памяти конкретной ПЭВМ. Одномерные массивы обычно используются для представления векторов, а двухмерные – для представления матриц.
Пример:
VAR
VECTORZ : ARRAY[1..40] OF REAL; {Одномерный массив представляет вектор из 40 элементов типа REAL}
MATRU : ARRAY[1..8,1..8] OF BYTE; {Двухмерный массив представляет матрицу из 8 строк и 8 столбцов с элементами байтового типа.}
TRILF : ARRAY[1..4,1..5,1..8] OF INTEGER; {Трехмерный массив}
Для описания массива можно использовать предварительно определенные константы:
CONST
G1 = 4; G2 = 6;
VAR
MASY : ARRAY[1..G1,1..G2] OF REAL;
Элементы массива располагаются в памяти последовательно. Элементы с меньшими значениями индекса хранятся в более низких адресах памяти. Многомерные массивы располагаются таким образом, что самый правый индекс возрастает самым первым. Например, если имеется массив
A : ARRAY[1..5,1..5] OF INTEGER;
то в памяти элементы массива будут размещены по возрастанию адресов:
A[1,1]
A[1,2]
...
A[1,5]
A[2,1]
A[2,2]
...
A[5,5]
Контроль правильности значений индексов массива может проводиться с помощью директивы компилятора R. По умолчанию директива R находится в пассивном состоянии {$R-}. Перевод в активное состояние вызывает проверку всех индексных выражений на соответствие их значений диапазону типа индекса.
Действия над массивами
Паскаль допускает единственное возможное действие над массивом в целом: использование его в операциях отношения "равно", "не равно" и в операторе
присваивания. Например:
VECT1 := VECT2
причем массивы, участвующие в этих действиях, должны быть идентичны по структуре, т.е. иметь одинаковые типы индексов и одинаковые типы компонентов. Например, если массивы А и В описаны, как
VAR A,B : ARRAY[1..20] OF REAL;
то применение к ним допустимых операций даст следующий результат:
Выражение Результат
A = B TRUE, если значение каждого элемента
массива А равно соответствующему
значению элемента массива В.
А < > B TRUE, если хотя бы одно значение
элемента массива А не равно значению
соответствующего элемента массива В.
А := B Все значения элементов массива В
присваиваются соответствующим элемен-
там массива А. Значения элементов
массива В остаются неизменными.
Действия над элементами массива
Доступ к элементам массива строится традиционно: после идентификатора массива в квадратных скобках указывается индекс нужного элемента или список индексов, определяющий элемент многомерного массива. В качестве индексов могут выступать произвольные выражения, тип которых должен соответствовать типу индексов в описании массива.
Например, запись
MAS[2]
VECTORZ[10]
позволяет обратиться ко второму элементу массива MAS и к десятому элементу массива VECTORZ.
Доступ к элементам двумерного массива V2 осуществляется следующим образом:
V2[ 3 , 7 ]
V2[ I , J ]
Символьные массивы
Необходимо сказать несколько слов об одномерных массивах, состоящих из элементов символьного типа ( CHAR ). Если в качестве индекса символьного массива используется ограниченный целый тип, то такие массивы называются строками. Например:
VAR
S : ARRAY [1,13] OF CHAR ;
Язык Паскаль содержит некоторые дополнительные средства для работы с такими массивами. Имеется возможность записывать конкретные значения строковых массивов с помощью изображения строки и использовать их в присваиваниях и передаче параметров:
S := ‘ Пример строки’ ;
Изображение строки строится из цепочки символов, составляющих строковый массив, и заключается в одинарные кавычки (апострофы). Если необходимо задать апостроф внутри самой строки, то он удваивается.
Кроме того, для строковых массивов допускается операция конкатенации, обозначаемая символом ‘+’ (плюс), смысл которой заключается в формировании нового символьного массива, число элементов которого равно сумме размеров массивов-операндов, а значениями элементов - элементы массивов-операндов, расположенные последовательно друг за другом. Так, если в программе имеются описания:
VAR
S1 : ARRAY[1..9] OF CHAR ;
S2 : ARRAY[1..6] OF CHAR ;
то допустимы следующие операторы:
S1 := ‘ Строковый’ ;
S2 := ‘ массив’ ;
WRITELN ( S1 + ‘ ‘ + S2 ) ;
В результате выполнения последнего оператора на экран дисплея будет выведено сообщение:
Строковый массив
В операциях присваивания строк символьным массивам необходимо точное соответствие длин строк и размеров массивов. Следует иметь в виду, что операция конкатенации для символьных массивов не допускается в правых частях операторов присваивания. Например оператор
S := S1 + ‘ ‘ + S2 ;
вызовет ошибку компиляции независимо от размера символьного массива S. В подобных случаях необходимо использовать строки переменной длины.
