Источник: codingclub
Трофим Роцкий
Что такое динамический массив? Динамический массив есть контейнер, содержащий определенное число данных, которые могут быть записаны либо извлечены для каких-нибудь с ними действий. Проще говоря, это лимитированный список различных значений одной переменной (Integer, String и т.д.), каждый из которых можно затребовать простым указанием порядкового номера. Зачем он нужен? как с ним работать? - читайте далее и всё поймете.
Прежде всего, надо продекларировать наш массив (то бишь записать его название). Название массива имеет такой вид:
<Имя_Массива>: Array[<область_определения>] of <Тип_переменных>
Идентификаторы Array и of постоянны, так что их нужно указывать в любом случае. Имя массива зависит только от вашей фантазии. Область определения имеет вид [X..Y], где первая величина - наименьшее значение числа определяемых параметров, вторая - наибольшее. Заметьте, данное свойство указывается именно в квадратных скобках - собственно значения X и Y входят в область определения массива. Повторю, что эти значения определяют именно порядковые номера хранящихся в массиве значений и предназначены для их чтения («вытаскивания» из массива) посредством указания порядкового номера. X и Y могут быть только простыми числами. Так же они могут быть частями какого-либо упорядоченного целого: например, можно указать [‘а’..’я’], и массив будет состоять из тридцати трех значений (по числу букв алфавита).
Далее после идентификатора of указывается тип переменных, в котором хранятся данные в массиве. Если это Boolean, то всякий параметр может иметь значение только True или False. Если Integer - то этот же параметр является простым числом, и т.д.
Сейчас мы по всем правилам продекларируем какой-нибудь массив:
EditArray: Array[1..5] of String
Наметанным глазом можно прочитать здесь следующее: имеется массив с именем EditArray, в котором хранится пять различных значений типа String (текст). Кажется, всё правильно :). Но этот массив пуст: в нем нет еще никаких данных. Сейчас мы используем его, чтобы запомнить строковую информацию, содержащуюся в TEdit’ах и, когда нужно, достать ее.
Выложите на форму пять компонентов TEdit и две кнопки. Назовите их GetBtn и ResultBtn. Чтобы можно было отличать строки ввода друг от друга, измените им в редакторе свойств параметр Tag: у Edit1 на «1», у Edit2 на «2» и так далее вплоть до «5» у Edit5.
//...
var
Form1: TForm1;
EditArray: Array[1..5] of String;
//...
//записываем информацию в массив
procedure TForm1.GetBtnClick(Sender: TObject);
var
i: integer;
begin
//перебираем все компоненты
for i:=0 to ComponentCount-1 do
if Components[i] is TEdit then
EditArray[TEdit(Components[i]).Tag]:=TEdit(Components[i]).Text;
end;
//читаем информацию из массива
procedure TForm1.SetBtnClick(Sender: TObject);
var
i: integer;
begin
for i:=0 to ComponentCount-1 do
if Components[i] is TEdit then
TEdit(Components[i]).Text:=EditArray[TEdit(Components[i]).Tag];
end;
Теперь введите в Edit’ы какой-нибудь текст и нажмите GetBtn. Сотрите текст и нажмите ResultBtn.
Ага! Вот мы и поработали с декларированным массивом. Но надо иметь ввиду, что есть и константированные массивы с изначально записанными значениями, которые нельзя изменить. Такие массивы прописываются в разделе const. Они полезны, когда нужно выполнить множество низкоуровневых операций.
В одном из последних выпусков журнала «Хакерспец» вебмастерам предлагался весьма простой способ обозначить копирайт текстов своего сайта: менять некоторые русские буквы на латинские, которые выглядят точно так же. (Чтобы, если информацию все-таки умыкнут, можно было воспользоваться этим отличием для подтверждения авторских прав). Вот моя реализация данного совета с помощью констатированного массива. Осчастливьте вашу форму компонентами TRichEdit и TButton, по событию OnClick последнего поставьте следующий код:
procedure TForm1.Button1Click(Sender: TObject);
const
RusSymbols: Array[1..10] of ShortString = ('а','с','о','р','х','А','С','О','Р','Х');
EngSymbols: Array[1..10] of ShortString = ('a','c','o','p','x','A','C','O','P','X');
var
i, position: integer;
Text: String;
begin
Text:=RichEdit1.Lines.Text;
repeat
//Массив состоит из десяти символов,
//поэтому цикл повторится 10 раз.
for i:=1 to 10 do begin
position:=pos(RusSymbols[i],Text);
if position>0 then begin
delete(Text,position,1);
insert(EngSymbols[i],Text,position);
end;
end;
until position<=0;
RichEdit1.Lines.Text:=Text;
end;
Закодируйте таким образом какой-нибудь текст и проверьте правописание полученного в MS Word.
Теперь вы знаете простейшие примеры работы с динамическими массивами.