ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.01.2024
Просмотров: 280
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
ЛР 1. Операторы и выражения Delphi
Управление жизненным циклом объекта
Ограничение видимости членов класса
Особенности объявления методов
Принадлежность к родительскому контейнеру
Размещение и размеры элемента управления
Видимость и активность элемента управления
ЛР5. Обработка клавиатурных событий и событий мышки
Массивы
Массивы вряд ли нуждаются в представлении для человека, имеющего даже самый небольшой опыт программирования, ведь это очень востребованная структура данных. Массив (array) предназначен для хранения некоторого количества однотипных элементов. Ключевое достоинство массива в том, что он обеспечивает максимально быстрый доступ к любому из своих элементов. Такая особенность массива имеет простое объяснение. Так как все элементы массива задействуют одно и то же число байтов, то они хранятся последовательно один за другим в памяти компьютера (рис. 2.2).
Указатель на массив
N-1
N
Ячейки массива
Память компьютера
Рис. 2.2. Представление массива в памяти
Для адресации нужного элемента массива достаточно знать адрес первого элемента. Элемент с нужным индексом легко вычисляется путем элементарного умножения индекса на размер элемента в байтах, результат произведения прибавляется к адресу первой ячейки.
Внимание!
В составе модуля Generics.Collections.pas объявлен шаблон класса TArray, специализирующийся на объектно-ориентированном представлении массива. Одно из основных достоинств класса в том, что в нем реализованы универсальные методы сортировки и поиска данных в массиве.
Объявление массива
Массив, как и переменную, необходимо объявить. Для этого следует указать размер массива и тип хранимых данных:
var <имя>: array [<нижняяграница>..<верхняяграница>]
of <тип_элементов>;
Если известно, что в программе будет задействовано несколько одинаковых массивов, то предварительно стоит определить тип массива и затем создавать массивы на базе объявленного типа (листинг 2.7).
Листинг 2.7. Объявление двух однотипных массивов
type TMyArray = Array [0..9] of integer; // массив из 10 элементов
var A1, A2 : TMyArray;
Допускается объявлять массив-константу с одновременным заполнением данными. В предложенном в листинге 2.8 примере двенадцать ячеек массива используются для хранения количества дней в месяцах високосного года.
Листинг 2.8. Объявление массива с постоянными значениями
const DaysInMonth:
array [1..12] of byte = (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
Наряду с одномерными, вполне реально объявлять "квадратные", "кубические" массивы и массивы более высоких размерностей. Например, объявление пары двумерных массивов предложено в листинге 2.9.
var A1 : Array[0..99,0..99] of cardinal;
A2 : Array[0..99] of Array[0..99] of cardinal;
Несмотря на разницу в коде объявления массивов A1 и A2, оба массива идентичны — они представляют собой матрицы размером 100 100 ячеек.
Обращение к ячейкам массива
Для обращения к элементам массива с целью чтения или записи достаточно указать индекс элемента в массиве. В листинге 2.10 предложен фрагмент кода, демонстрирующий порядок заполнения одномерного массива случайными значениями.
Листинг 2.10. Заполнение массива случайными числами
const N=9;
var A:Array[0..N] of integer; i:cardinal;
begin
Randomize;
for i := 0 to N do
A[i]:=Random(100);
end.
Мы постарались сделать код максимально универсальным. Размер массива определяется с помощью константы N, в нашем примере это значение 9.
Динамический массив
У всех рассмотренных ранее способов объявления массива есть один существенный недостаток — объявив в коде программы размер массива (сделав его статическим), мы не сможем выйти за его границы. Зачастую, во время программирования разработчику неизвестен объем подлежащих хранению данных. Что делать, если в одном случае приложению потребуется массив из 10 элементов, а в другом из 100? В таких случаях стоит воспользоваться услугами динамических массивов (листинг 2.11). Для этого к нашим услугам две очень полезные процедуры Delphi. Процедура SetLength() во время выполнения программы распределит память под массив, функция High() возвратит индекс старшего элемента в массиве.
Листинг 2.11. Создание динамического массива
type String866 = type AnsiString(866);
const S:String866='Введи размер массива';
var A:Array of integer; // объявление динамического массива N,i:cardinal;
begin
WriteLn(S); // запрашиваем размер массива ReadLn(N); // пользователь ввел число элементов SetLength(A,N); // распределяем память под массив Randomize;
for i := 0 to High(A) do
A[i]:=Random(100); // заполняем массив случайными значениями
end;
Внимание!
В отличие от статических массивов, допускающих любой способ нумерации своих элементов, отсчет элементов динамического массива всегда начинаются с нуля.
Допускается создавать многомерные динамические массивы. Объявление такого массива и распределение памяти рассмотрено в листинге 2.12.
Листинг 2.12. Двумерный динамический массив целых чисел
var I: array of array of Integer;
begin
SetLength(I,10);
При работе с однотипными динамическими массивами наиболее эффективным способом копирования данных из одного массива в другой считается вызов функции Copy(). Функция позволяет копировать как массив целиком, так и только некоторую часть его элементов (листинг 2.13).
Листинг 2.13. Копирование данных динамического массива
var A1, A2 : array of integer; i:integer;
begin
SetLength(A1,10);
for i:=0 to High(A1) do A1[i]:=Random(100); // заполнение массива A2:=Copy(A1, 0,4 ); // копирование части массива
A2:=Copy(A1); // полное копирование
Заметьте,
что мы не задаем размер массива A2 явным образом, размер будет определен автоматически с вызовом метода Copy().
ЗАДАНИЕ
Вариант 1
-
В одномерном массиве, состоящем из n вещественных элементов, вычислить a)сумму отрицательных элементов массива;
b)произведение элементов массива, расположенных между максимальным и минимальным элементами
-
Дан целочисленный двумерный массив. Определите количество строк не содержащих ни одного нулевого элемента
Вариант 2
-
В одномерном массиве, состоящем из n вещественных элементов, вычислить a)сумму положительных элементов массива;
b)произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами
-
Дан целочисленный двумерный массив. Определите количество столбцов не содержащих ни одного нулевого элемента-
произведение элементов массива с чётными номерами; -
сумму элементов массива, расположенных между максимальным и минимальным элементами
-
2) Дан целочисленный двумерный массив. Определите сумму элементов находящихся ниже главной диагонали
Вариант 4
-
В одномерном массиве, состоящем из n вещественных элементов, вычислить a)сумму элементов массива с нечётными номерами;
b)сумму элементов массива, расположенных между первым и последним отрицательными элементами
-
Дан целочисленный двумерный массив. Определить сумму элементов находящихся выше главной диагонали
Вариант 5
-
В одномерном массиве, состоящем из n вещественных элементов,-
найти 3 самых маленьких по значению элемента; -
вычислить сумму самого маленького и самого большого элементов массива.
-
-
Дан целочисленный двумерный массив. Определить суммы каждой строки элементов
Вариант 6
-
В одномерном массиве, состоящем из n вещественных элементов-
найти 3 самых больших по значению элемента; -
сумму чётных элементов массива.
-
-
Дан целочисленный двумерный массив. Вычислите среднее арифметическое значений элементов массива.
Вариант 7
-
В одномерном массиве, состоящем из n вещественных элементов, вычислить a)сумму отрицательных элементов массива;
b)произведение элементов массива, расположенных между максимальным и минимальным элементами
-
Дан целочисленный двумерный массив. Определите количество строк не содержащих ни одного нулевого элемента
Вариант 8
-
В одномерном массиве, состоящем из n вещественных элементов, вычислить a)сумму положительных элементов массива;
b)произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами
-
Дан целочисленный двумерный массив. Определите количество столбцов не содержащих ни одного нулевого элемента
Вариант 9
-
В одномерном массиве, состоящем из n вещественных элементов, вычислить a)произведение элементов массива с чётными номерами;