Опубликован: 07.04.2008 | Уровень: специалист | Доступ: платный
Лекция 9:

Массивы и константы

< Лекция 8 || Лекция 9: 12 || Лекция 10 >
Аннотация: Здесь вы познакомитесь с массивами и константами, а также научитесь пользоваться репозиторием Delphi, в котором хранятся шаблоны и мастера для многих форм различного вида и назначения. Применение нового материала на практике.

Массивы

Немного сложная, но, безусловно, необходимейшая тема в программировании. Массив – это формальное объединение нескольких однотипных переменных в одну. То есть, массив рассматривается как одна переменная, он имеет одно имя, но, на самом деле, там имеется несколько переменных одного типа. Массивы, как и переменные, объявляются в разделе переменных var, и имеют такой синтаксис:

Имя_переменной : array [диапазон значений] of Тип_переменных_в_массиве;

Пример:

var
   a : Integer;  //переменная целого типа
   b : array [1..10] of Integer;  //массив целого типа
begin

Обратите внимание, что диапазон значений в массиве указывается произвольно, между первой и последней цифрой нет пробелов, но обязательны две точки. Пример диапазона может быть и таким: [5..7], какие цифры назначать – решать Вам. Обычно в практике приходится начинать диапазон с 1 или с 0, в зависимости от ситуации.

Обращение к отдельному разделу массива такое:

a := 5;
b[1] := a;
b[2] := b[1]+2;

То есть, сразу после имени массива ставятся квадратные скобки, внутри которых указывают индекс – номер элемента в массиве. Подобный массив можно воспринимать как таблицу с одной строкой и несколькими ячейками:

Представление массива в виде таблицы

Рис. 9.1. Представление массива в виде таблицы

Поскольку в приведенном примере объявлен массив целых чисел типа Integer, каждой ячейке (элементу) массива будет выделено по 4 байта памяти, каждый такой элемент соответствует обычной переменной такого же типа. Подобные массивы называются одномерными. С многомерными и динамическими массивами мы познакомимся позже.

Как уже упоминалось, массивы могут быть любого типа:

var
   a : array [0..3] of String;
   b : array [1..5] of Real;
   c : array [10..20] of Boolean;

Обработка массива

Массивы удобно использовать там, где приходится обрабатывать большое количество однотипных данных. Возьмем гипотетический пример: нужно перевести данные от 1 до 100 американских миль в привычные нам километры. Поскольку мы точно знаем, что у нас будет 100 элементов, можно воспользоваться массивом, а для его обработки удобней всего использовать цикл for:

var
   i : Byte;  //счетчик для for
   a : Array [1..100] of Real;  //массив для полученных данных
begin
   for i := 1 to 100 do
      a[i] := i * 1.609;

Что мы имеем в данном примере? При первом проходе цикла for счетчик i имеет значение 1, следовательно, в строке

a[i] := i * 1.609;

мы обращаемся к первому ( a[1] ) элементу массива, и присваиваем ему значение i, умноженное на 1.609 километров. Следовательно, в элемент массива a[1], который соответствует одной миле, попадает значение 1.609 километров. При втором проходе цикла i уже равен 2, значит, в элемент a[2] уйдет значение 2 * 1.609, то есть 3,218. И так далее, до конца массива. В дальнейшем, обратившись к нужному элементу массива, мы сможем узнать, скольким километрам будет равно данное количество миль:

ShowMessage('23 мили = ' + FloatToStr(a[23]) + ' километра');

Из приведенного выше примера вы можете почерпнуть полезный прием программирования: в качестве индекса массива можно указывать не только целое число, но и счетчик цикла, или значение любой переменной целого типа. Однако при программировании цикла следует соблюдать осторожность: если указать индекс, который не входит в диапазон значений массива, произойдет ошибка. Так, если бы мы попытались выполнить код

for i := 0 to 100 do
      a[i] := i * 1.609;

то получили бы ошибку, так как уже при первом проходе мы обратились бы к элементу a[0], которого не существует.

Константы

Константы – это такие же, как переменные, ячейки оперативной памяти, значение которых нельзя изменить. То есть, вы однажды указали значение константы, и в дальнейшем обращаетесь к ней, как к обычной переменной, но присвоить ей другое значение уже не сможете. Константы удобно использовать, когда вы будете неоднократно обращаться к одному и тому же значению. Тип константы указывать не нужно, компилятор сам подбирает для нее подходящий тип. Константы описываются в разделе const, который всегда должен описываться перед разделом var:

procedure MyProc;
const
   pi = 3.14;
   MessageError = 'Текст сообщения об ошибке';
var
   a : Integer;
   b : String;
begin
   ...
end;

Константы, особенно глобальные, удобно использовать там, где вы работаете с каким-то определенным значением. Если в дальнейшем это значение поменяется, нет необходимости скрупулезно менять код во всей программе, достаточно изменить значение константы. К примеру, вы производите расчет оклада, основываясь на сумме, соответствующей минимальной заработной плате. В таком случае не грех объявить константу MinZarPlat и присвоить ей текущее значение минимальной зарплаты.

В процессе расчета вам приходится умножать это значение на количество минимальных зарплат. Допустим, некто Сидоров имеет оклад, равный 5-ти минимальным зарплатам. В момент расчета вы умножаете 5 не на сумму минимальной зарплаты, а на константу MinZarPlat, которая и содержит нужное значение. А если через месяц или год сумма минимальной зарплаты изменится, то вам останется только заменить значение вашей константы на новое, не меняя при этом остального кода. Удобно, не правда ли?

< Лекция 8 || Лекция 9: 12 || Лекция 10 >
Виктор Пелих
Виктор Пелих

Здравствуйте.
Прохожу курс "Введение в программирование на Delphi"
Добрался до Лекции 29: Введение в базы данных.

Установлена RAD Studio 11.3, у которой отсутствует вкладка BDE и, соответственно, компонент Table,  который обеспечивает доступ к таблице средствами механизма BDE.
Поиск в интернете подсказал 
BDE Installer for RAD Studio, Delphi, C++Builder 10.3 Rio
Подскажите, имеется ли ещё возможность использовать механизм BDE в Delphi11 и если такая возможность есть, как подключить BDE к Delphi11?
С уважением...

 

Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

как я получу диплом о профессиональной переподготовке?

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Олег Волков
Олег Волков
Россия, Балаково, МБОУ СОШ 19