СОДЕРЖАНИЕ
1.Цель работы 4
2. Задачи 4
3. Теоретическая часть 4
3.1. Понятие массива данных 4
3.2. Одномерные массивы 4
3.3. Многомерные массивы 7
3.4. Действия над элементами массивов 9
3.5. Ввод и вывод элементов массива 10
4. Решение задач - примеров 11
5. Порядок выполнения работы 13
6. Контрольные вопросы 14
7. Содержание и оформление отчета 15
Приложение 16
Список литературы 19
ЛАБОРАТОРНАЯ РАБОТА
РАБОТА С МАССИВАМИ ДАННЫХ В ИНТЕГРИРОВАННОЙ СРЕДЕ DELPHI
Цель работы
Целью настоящей работы является изучение методов программирования на языке Delphi с использованием массивов данных.
Задачи
Задачами лабораторной работы являются задачи овладения навыками разработки программ в интегрированной среде Delphi.
Теоретическая часть
Понятие массива данных
В языке Delphi под массивомпонимается упорядоченный набор фиксированного количества однотипных данных.
Массивы, наряду с записями, строками, множествами, файлами, относятся к структурированному типу данных языка. Массивы могут быть одномерные и многомерные. При этом размер массива не ограничивается. Размерность массивов на практике ограничивается лишь объемом рабочей памяти конкретного компьютера. В памяти компьютера элементы массива располагаются в последовательных соседних ячейках памяти.
Одномерные массивы
Переменные массивов можно задавать двумя способами:
а) через объявление типа в разделе TYPE, а затем объявление переменной (переменных) в разделе VAR:
TYPE
< имя типа > = ARRAY [тип индекса] OF < тип элементов >;
VAR
< идентификатор >: < имя типа >;
б) через объявление переменной (переменных) сразу в разделе VAR:
VAR
< идентификатор >: ARRAY [тип индекса] OF < тип элементов >;
Элементы массива могут быть любого, в том числе и структурированного, типа. Следует отметить, что вещественный тип не относится к упорядоченным типам данных. В качестве типа индекса может использоваться любой порядковый тип, кроме типа Longint. Обычно в качестве индексного типа используется целочисленный тип-диапазон, в котором задаются границы изменения индексов. Обратите внимание, что величины, соответствующие начальному и конечному индексам, т.е. значения, указанные в квадратных скобках, разделяются двумя (!) точками. Причем перед этими двумя точками и после них допускаются пробелы.
Примеры объявления массивов:
TYPE
X = ARRAY [1.. 100] OF INTEGER;
Y = ARRAY [1.. 25] OF REAL;
Z = RECORD
R, I: REAL
END;
VAR
M: X; { целочисленный массив }
V1, V2: Y; { вещественные массивы }
L1, L2: ARRAY [1.. 20 ] OF Z; { массивы записей }
K: ARRAY [ BYTE ] OF CHAR; { массив символов }
R: ARRAY [ 1.. 5 ] OF STRING [25]; {массив строк }
T: ARRAY [-10.. 9] OF BYTE; {массив целых чисел }
G: ARRAY [ 1.. 15] OF (MO, TU, WE, TH, FR, SA, SU);
{ массив перечислимого типа }
Типизированная константа-массив объявляется в программе следующим образом:
CONST
A: ARRAY [1.. 5] OF INTEGER = (1, 2, 3, 4, 5);
B: ARRAY [1.. 4] OF REAL = (1.1, 2.2, 3.3, 4.4);
Кроме того, в качестве индексного типа могут использоваться упорядоченные типы языка Delphi, например:
VAR
A1: ARRAY[BYTE] OF BOOLEAN;
A2: ARRAY[CHAR] OF BOOLEAN;
A3: ARRAY[RED,YELLOW,GREEN] OF CHAR;
Здесь А 1 (первый пример) представляет собой массив из 256 (0..255) значений типа Вооlеаn. А 2 – это массив также из 256 значений типа Вооlеаn, однако, в отличие от массива А 1, он индексируется значениями типа Сhаr. Обращения к отдельным элементам массивов А 1и А 2 выглядят так:
а 1[90] :=fаlsе;
а 2[ z ] :=truе;
Содержимое массивов А 1и А 2 может быть следующим:
1-й элемент 2-й элемент 3-й элемент... 256-й элемент
TRUE FALSE FALSE … TRUE
(Элементы 1 – 256 массива А 1 будут обозначаться числами с 0 по 255, а массива А 2 – символами таблицы ASCII по порядку.)
Третий пример (А 3) представляет собой массив из трех элементов типа Сhаr. Элементы этого массива обозначаются именами Red, Yеllоw и Grееn (для индексирования здесь использован перечислимый тип). Примеры обращений к элементам этого массива можно видеть в табл.1.
Содержимое массива А 3 может выглядеть так:
А 3[ Red ] А 3[ Yе11оw ] А 3[ Grееn ]
'А' 'С' '10'
Таблица 1
Манипуляции над элементами массива
Пример обращения | Комментарий |
A 3[ Red ] :=chr (100) | Элементу Red массива A 3 присваивается значение типа Char, соответствующее букве ‘ d ’ |
A 3[ Red ] :=’d’ | Эквивалент предыдущего оператора |
Write (a 3[ Yellow ]) | Значение элемента Yellow массива A 3выводится на экран |
Read (a 3[ Green ]) | Значение элемента Green массива A 3вводится с клавиатуры |
Многомерные массивы
Элементами массивов могут быть также массивы. В этом случае мы имеем двумерный массив (матрицу).
Двумерные массивы задаются в программе следующим образом:
а) через объявление типа в разделе TYPE, а затем объявление переменной (переменных) в разделе VAR:
TYPE
< имя типа > = ARRAY [тип индекса 1] OF ARRAY [тип индекса 2] OF < тип элементов >;
или
< имя типа > = ARRAY [ тип индекса 1, тип индекса 2 ] OF <тип элементов >;
Обе формы описания равносильны, но вторая употребляется чаще.
VAR
< идентификатор >: < имя типа >;
б) через объявление переменной (переменных) сразу в разделе VAR:
VAR
< идентификатор >: ARRAY [тип индекса 1, тип индекса 2] OF < тип элементов >;
Необходимо отметить, что индексы не обязательно должны иметь один и тот же тип. В общем случае индексы по каждому измерению могут быть различных типов.
Примеры объявления двумерных массивов:
TYPE
A = ARRAY [ 1.. 5, 1.. 4 ] OF WORD;
B = ARRAY [ 1.. 10, 1.. 20 ] OF REAL;
VAR
C: ARRAY [ 1.. 5, BOOLEAN ] OF -20.. 20;
D1, D2: A;
F1, F2: B;
А вот так выглядит двумерный массив A (или матрица) полностью:
а1[1,1] а1[1,2] а1[1,3] а1[1,4]
а1[2,1] а1[2,2] а1[2,3] а1[2,4]
а1[3,1] а1[3,2] а1[3,3] а1[3,4]
а1[4,1] а1[4,2] а1[4,3] а1[4,4]
а1[5,1] а1[5,2] а1[5,3] а1[5,4]
Типизированная константа-матрица объявляется в программе следующим образом
CONST
M: ARRAY [1.. 3, 1.. 2] OF INTEGER = ((1, 2), (3, 4), (5, 6));
Массивы могут быть не только одномерными или двумерными, но и 3-х мерными, 4-х мерными и т.д. В этом случае они объявляются в программе следующим образом:
VAR
M: ARRAY [ 1.. 10, -10.. 9, CHAR ] OF BYTE;
N: ARRAY [ 1.. 5, 1.. 10, 1.. 15, 1.. 20 ] OF SHORTINT;
В памяти компьютера элементы размещаются друг за другом так, что при переходе от младших адресов к старшим наиболее быстро изменяется самый правый индекс массива. Например, для матрицы 2х2: A[1,1], A[1,2], A[2,1], A[2,2].
Действия над элементами массивов
Для обеспечения эффективной работы с отдельными элементами необходимо прежде всего обеспечить правильный доступ к элементам массива. Доступ (обращение) к отдельным элементам массива осуществляется путем указания имени переменной массива, за которым в квадратных скобках помещается значение индекса (порядкового номера) элемента.
Примеры задания индекса:
A [5] - непосредственно числом;
A [x] - косвенно через переменную x;
A [y+5] - косвенно через выражение;
A [Succ(i)] - косвенно через значение функции.
Поскольку элемент массива трактуется как переменная, он может фигурировать в выражениях. Набор операций над элементами массива соответствует операциям, допустимым для базового типа. Примеры манипулирования элементами массива можно видеть в табл.2.
Таблица 2
Действия над элементами массива
Пример действия | Комментарий |
Write (a 1[10]) | На экране отображается значение 10-го элемента массива A 1 |
a 4[5] :=а 4[3] +а 4[2] | Значения 3 и 2-го элементов массива А 4 складываются, и полученная сумма в качестве значения присваивается элементу 5 того же массива |
abc:=аbс+а 4[88] | Значение 88-го элемента массива А 4 суммируется со значением переменной abс, и полученная сумма присваивается этой же переменной |
abс:=а 4[55] +а 4[56] | Значения 55 и 56-го элементов массива А 4 cкладываются, и полученная сумма присваивается переменной abс |
a 4[33] :=а 4[33] + 20 | Значение 33-го элемента массива А 4 увеличивается на 20 |
Что касается набора операций над массивами в целом, то скопировать все элементы из одного массива в другой можно единственным оператором присваивания. Например, если Х и Y – массивы, принадлежащие одному типу, то правомерен оператор
X:= Y;
Этот оператор копирует значения всех элементов массива X в массив Y.
Однако нельзя использовать с массивами операции сравнения. Неверно, например, было бы к массивам Х и Y применить оператор
while х=у do...
Тем не менее, если такая необходимость существует, можно организовать поэлементное сравнение массивов.