Что такое
динамический массив? Динамический массив есть контейнер, содержащий определенное
число данных, которые могут быть записаны либо извлечены для каких-нибудь с ними
действий. Проще говоря, это лимитированный список различных значений одной
переменной (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.
Теперь вы
знаете простейшие примеры работы с динамическими массивами.
Автор: Трофим Роцкий
|