реферат Простые операторы. Характеристика форм.docx. Лр операторы и выражения Delphi
Скачать 1.3 Mb.
|
МассивыМассивы вряд ли нуждаются в представлении для человека, имеющего даже самый небольшой опыт программирования, ведь это очень востребованная структура данных. Массив (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)произведение элементов массива с чётными номерами; b)сумму элементов массива, расположенных между максимальным и минимальным элементами Дан целочисленный двумерный массив. Определите сумму элементов находящихся ниже главной диагонали сумму элементов массива с нечётными номерами; сумму элементов массива, расположенных между первым и последним отрицательными элементами 2) Дан целочисленный двумерный массив. Определить сумму элементов находящихся выше главной диагонали Вариант 11В одномерном массиве, состоящем из n вещественных элементов, найти 3 самых маленьких по значению элемента; вычислить сумму самого маленького и самого большого элементов массива. Дан целочисленный двумерный массив. Определить суммы каждой строки элементов Вариант 12В одномерном массиве, состоящем из n вещественных элементов найти 3 самых больших по значению элемента; сумму чётных элементов массива. Дан целочисленный двумерный массив. Вычислите среднее арифметическое значений элементов массива. |