Главная страница
Навигация по странице:

  • Листинг

  • реферат Простые операторы. Характеристика форм.docx. Лр операторы и выражения Delphi


    Скачать 1.3 Mb.
    НазваниеЛр операторы и выражения Delphi
    Дата17.04.2023
    Размер1.3 Mb.
    Формат файлаdoc
    Имя файлареферат Простые операторы. Характеристика форм.docx.doc
    ТипПрограмма
    #1067638
    страница10 из 26
    1   ...   6   7   8   9   10   11   12   13   ...   26

    Массивы


    Массивы вряд ли нуждаются в представлении для человека, имеющего даже самый небольшой опыт программирования, ведь это очень востребованная структура данных. Массив (array) предназначен для хранения некоторого количества однотипных элементов. Ключевое достоинство массива в том, что он обеспечивает максимально быстрый доступ к любому из своих элементов. Такая особенность массива имеет простое объяснение. Так как все элементы массива задействуют одно и то же число байтов, то они хранятся последовательно один за другим в памяти компьютера (рис. 2.2).
    docshapegroup161 docshapegroup167 docshapegroup159
    Указатель на массив





    N-1

    N
    Ячейки массива

    Память компьютера

    docshapegroup179 docshapegroup180



    Рис. 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.


    docshapegroup188

    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


    1. В одномерном массиве, состоящем из n вещественных элементов, вычислить a)сумму отрицательных элементов массива;

    b)произведение элементов массива, расположенных между максимальным и минимальным элементами

    1. Дан целочисленный двумерный массив. Определите количество строк не содержащих ни одного нулевого элемента



    Вариант 2


    1. В одномерном массиве, состоящем из n вещественных элементов, вычислить a)сумму положительных элементов массива;

    b)произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами

    1. Дан целочисленный двумерный массив. Определите количество столбцов не содержащих ни одного нулевого элемента

      1. произведение элементов массива с чётными номерами;

      2. сумму элементов массива, расположенных между максимальным и минимальным элементами

    2) Дан целочисленный двумерный массив. Определите сумму элементов находящихся ниже главной диагонали

    Вариант 4


    1. В одномерном массиве, состоящем из n вещественных элементов, вычислить a)сумму элементов массива с нечётными номерами;

    b)сумму элементов массива, расположенных между первым и последним отрицательными элементами

    1. Дан целочисленный двумерный массив. Определить сумму элементов находящихся выше главной диагонали



    Вариант 5


    1. В одномерном массиве, состоящем из n вещественных элементов,

      1. найти 3 самых маленьких по значению элемента;

      2. вычислить сумму самого маленького и самого большого элементов массива.

    2. Дан целочисленный двумерный массив. Определить суммы каждой строки элементов



    Вариант 6


    1. В одномерном массиве, состоящем из n вещественных элементов

      1. найти 3 самых больших по значению элемента;

      2. сумму чётных элементов массива.

    2. Дан целочисленный двумерный массив. Вычислите среднее арифметическое значений элементов массива.



    Вариант 7


    1. В одномерном массиве, состоящем из n вещественных элементов, вычислить a)сумму отрицательных элементов массива;

    b)произведение элементов массива, расположенных между максимальным и минимальным элементами

    1. Дан целочисленный двумерный массив. Определите количество строк не содержащих ни одного нулевого элемента



    Вариант 8


    1. В одномерном массиве, состоящем из n вещественных элементов, вычислить a)сумму положительных элементов массива;

    b)произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами

    1. Дан целочисленный двумерный массив. Определите количество столбцов не содержащих ни одного нулевого элемента



    Вариант 9


    1. В одномерном массиве, состоящем из n вещественных элементов, вычислить a)произведение элементов массива с чётными номерами;

    b)сумму элементов массива, расположенных между максимальным и минимальным элементами

    1. Дан целочисленный двумерный массив. Определите сумму элементов находящихся ниже главной диагонали

      1. сумму элементов массива с нечётными номерами;

      2. сумму элементов массива, расположенных между первым и последним отрицательными элементами

    2) Дан целочисленный двумерный массив. Определить сумму элементов находящихся выше главной диагонали

    Вариант 11


    1. В одномерном массиве, состоящем из n вещественных элементов,

      1. найти 3 самых маленьких по значению элемента;

      2. вычислить сумму самого маленького и самого большого элементов массива.

    2. Дан целочисленный двумерный массив. Определить суммы каждой строки элементов



    Вариант 12


    1. В одномерном массиве, состоящем из n вещественных элементов

      1. найти 3 самых больших по значению элемента;

      2. сумму чётных элементов массива.

    2. Дан целочисленный двумерный массив. Вычислите среднее арифметическое значений элементов массива.



    1   ...   6   7   8   9   10   11   12   13   ...   26


    написать администратору сайта