Файл: Лр операторы и выражения Delphi.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.01.2024

Просмотров: 303

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

ЛР 1. Операторы и выражения Delphi

Оператор присваивания

Арифметические операторы

Оператор конкатенации строк

Логические операторы

Операторы поразрядного сдвига

Операторы отношения

Операторы множеств

Оператор-селектор case

Оператор перехода goto

Организация циклов

ЛР 2. Структурные типы

Множества

Записи

Массивы

ЛР 3. Объекты и классы

Проектирование класса

Управление жизненным циклом объекта

Опережающее объявление класса

Ограничение видимости членов класса

Свойства объекта

Особенности объявления методов

Поля класса и методы класса

Иерархия наследования

Полиморфизм

ЗАДАНИЕ

ЛР4. Опорные классы VCL

Класс TControl

Принадлежность к родительскому контейнеру

Размещение и размеры элемента управления

Видимость и активность элемента управления

Задание

ЛР5. Обработка клавиатурных событий и событий мышки

Щелчки кнопками мыши

Перемещение указателя мыши

Вращение колесика мыши

Операция перетаскивания drag and drop

Задание

ЛР 6. Классы потоков данных

Прототип потоков данных, класс TStream

Массивы


Массивы вряд ли нуждаются в представлении для человека, имеющего даже самый небольшой опыт программирования, ведь это очень востребованная структура данных. Массив (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


  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)произведение элементов массива с чётными номерами;