Делфи как вывести массив

DelphiComponent.ru — бесплатно видеоуроки по Delphi, статьи, исходники

Массивы в Delphi

Массив— это структура данных, представляющая собой набор переменных одинакового типа, имеющих общее имя. Массивы удобно использовать для хранения однородной по своей природе информации, например, таблиц и списков.

Хочешь 106 видеоуроков по Delphi в которых я разжевал подробнейшим образом все тонкости программирования на этом языке?

Тогда тебе нужно кликнуть сюда:

ЗАКАЗАТЬ

Объявление массива

Массив, как и любая переменная программы, перед использованием должен быть объявлен в разделе объявления переменных. В общем виде инструкция объявления массива выгладит следующим образом:

  • имя — имя массива;
  • array — зарезервированное слово языка Delphi, обозначающее, что объявляемое имя является именем массива;
  • нижний_индекс и верхний_индекс — целые константы, определяющие диапазон изменения индекса элементов массива и, неявно, количество элементов (размер) массива;
  • тип — тип элементов массива.

Примеры объявления массивов:

temper:array[ 1..31 ] of real ;

koef: array [ 0..2 ] of integer ;
name: array [ 1..30 ] of string [ 25 ];

Специально по теме массивов, чтобы было Вам понятнее я подготовил отдельный видеоурок. Посмотрите его обязательно и сразу поймете как работать с массивами!

При объявлении массива удобно использовать именованные константы. Именованная константа объявляется в разделе объявления констант, который обычно располагают перед разделом объявления переменных. Начинается раздел объявления констант словом const. В инструкции объявления именованной константы указывают имя константы и ее значение, которое отделяется от имени символом «равно». Например, чтобы объявить именованную константу нв, значение которой равно 10, в раздел const надо записать инструкцию: нв=ю. После объявления именованной константы ее можно использовать в программе как обычную числовую или символьную константу. Ниже в качестве примера приведено объявление массива названий команд-участниц чемпионата по футболу, в котором используются именованные константы.

Для того чтобы в программе использовать элемент массива, надо указать имя массива и номер элемента (индекс), заключив индекс в квадратные скобки. В качестве индекса можно использовать константу или выражение целого типа, например:

team[ 1 ] := ‘Зенит 1 ;

d := koef[l]*koef[l]- 4 *koef[ 2 ]*koef[ 1 ];
ShowMessage(name[n+ 1 ]);
temper := StrToFloat(Editl . text);

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

Имя: array [нижний_индекс. .верхний_индекс] of тип = (список) ;

где список — разделенные запятыми значения элементов массива.

a: array[lO] of integer = ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 );
Team: array [ 1..5 ] of String[ 10 ]=( ‘Зенит’ , ‘Динамо’ , ‘Спартак’ , ‘Ротор’ , ‘СКА’ );

Обратите внимание, что количество элементов списка инициализации должно соответствовать размерности массива. Если это будет не так, то компилятор выведет сообщения об ошибке: Number of elements differs from declaration (количество элементов не соответствует указанному в объявлении).

При попытке инициализировать локальный массив компилятор выводит сообщение об ошибке: Cannot initialize local variables (локальная переменная не может быть инициализирована). Локальный массив можно инициализировать только во время работы программы, например, так:

for i := 1 to 10 do a:= 0 ;

Типичными операциями при работе с массивами являются:

  • вывод массива;
  • ввод массива;
  • поиск максимального или минимального элемента массива;
  • поиск заданного элемента массива;
  • сортировка массива.

Вывод массива

Под выводом массива понимается вывод на экран монитора (в диалоговое окно) значений элементов массива.

Если в программе необходимо вывести значения всех элементов массива, то для этого удобно использовать инструкцию for, при этом переменная счетчик инструкции for может быть использована в качестве индекса элемента массива.

В качестве примера на рис. 5.1 приведено диалоговое окно приложения, которое демонстрирует инициализацию и процесс вывода значений элементов массива в поле метки. Программа выводит пронумерованный список футбольных команд. Следует обратить внимание, что для того чтобы список команд выглядел действительно как список, свойству Label1.AutoSize нужно присвоить значение False (присвойте свойству Label1.Autosize значение True и посмотрите, как будет работать программа). Текст программы приведен в листинге.

Листинг. Инициализация и вывод массива

02. interface
03. Windows, Messages, SysOtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
04. type
05. TForml = class (TForm)
06. Buttonl: TButton;
07. Label1: TLabel;
08. procedure ButtonlClick(Sender: TObject);
09. private
10. < Private declarations >
11. public
12.
13. end ;
14. var
15. Form1: TForm1;
16. implementation
17. <$R *,dfm>
18. const
19. NT = 5 ;
20. var
21. team: array [ 1.. NT] of string [ 10 ] =( ‘Зенит1,’ Динамо 1 , ‘Ротор1,’ Спартак ‘,’ СКА’) ;
22. procedure TForml . ButtonlClick(Sender: TObject);
23. var
24. st: string ; // список команд
25. i: integer ; // индекс, номер элемента массива
26. begin
27. // формирование списка для отображения в форме
28. for i:=l to NT do st := st + IntToStr(i)+ ‘ ‘ + team +# 13 ;
29. // вывод списка
30. Label1 . Caption := st;
31. end ;
32. end .

Ввод массива

Под вводом массива понимается процесс получения от пользователя (или изфайла) во время работы программы значений элементов массива,»Лобовое» решение задачи ввода элементов массива — для каждого элемента массива создать поле ввода. Однако если требуется ввести достаточно большой массив, то такое решение неприемлемо. Представьте форму, например,с десятью полями редактирования! Очевидно, что последовательность чисел удобно вводить в строку таблицы,где каждое число находится в отдельной ячейке. Ниже рассматриваются два варианта организации ввода массива с использованием компонентов StringGrid И Memo.

Использование компонента StringGrid

Для ввода массива удобно использовать компонент StringGrid. Значок компонента StringGrid находится на вкладке Additional (рис. 5.2).

Компонент strinqGrid представляет собой таблицу, ячейки которой содержат строки символов.

В качестве примера использования компонента stringGrid для ввода массива рассмотрим программу, которая вычисляет среднее арифметическое значение элементов массива. Диалоговое окно программы приведено на рис. 5.3. Компонент stringGrid используется для ввода массива, компоненты Label1 и Label2 — для вывода пояснительного текста и результата расчета, Buttoni — для запуска процесса расчета.

Добавляется компонент stringGrid в форму точно так же, как и другие компоненты. После добавления компонента к форме нужно выполнить его настройку в соответствии с табл. 5.2. Значения свойств Height и width следует при помощи мыши установить такими, чтобы размер компонента был равен размеру строки.

Текст программы приведен в листинге.

Значения свойств компонента StringGrid1

Свойство Значение
ColCount 5
FixedCols 0
RowCount 1
DefaultRowHeight 24
Height 24
DefaultColWidth 64
Width 328
Options.goEditing true
Options.AlwaysShowEditing true
Options.goTabs true

Листинг. Ввод и обработка массива целых чисел

01. unit getar_;
02. interface
03. uses
04. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
05. Forms, Dialogs, Grids, StdCtrls;
06. type
07. TForml = class (TForm]
08. Labell: TLabel;
09. StringGridl; TStringGrid;
10. Buttonl: TButton;
11. Label2: TLabel;
12. procedure ButtorilClicMSender: TObject];
13. private
14.
15. public
16. < Public declarations >
17. end ;
18. var
19. Forml: TForml;
20. implementation
21.
22. procedure TForml . ButtonlClick(Sender: TObject);
23. var
24. a : array [ 1..5 ] of integer ; // массив
25. suntrn: integer ; // сумма элементов
26. sr: real ; // среднее арифметическое
27. i: integer / // индекс
28. begin
29. // ввод массива
30. // считаем, что если ячейка пустая, то соответствующий
31. // ей элемент массива равен нулю
32. for i:= 1 to 5 do
33. if Length(StringGridl . Cells[i-l, 0 ]] 0
34. then a := StrToInt(StringGridl . Cells[i- 1 , 0 ))
35. else a := 0 ;
36. // обработка массива
37. summ := 0 ;
38. for i := 1 to 5 do
39. summ := summ + a;
40. sr : = summ / 5 ;
41. // вывод результата
42. Label2 . Caption := ‘Сумма элементов: ‘ + IntToStr(summl + # 13 + ‘Среднее арифметическое: ‘ + FloatToStr(sr);
43. end ; end .

После пробных запусков программы возникает желание внести изменения в процесс ввода массива. Так, было бы неплохо, чтобы курсор автоматически переходил в следующую ячейку таблицы, например, в результате нажатия клавиши . Сделать это можно при помощи процедуры обработки события onkeypress. На эту же процедуру можно возложить задачу фильтрации вводимых в ячейку таблицы данных. В нашем случае надо разрешить ввод в ячейку только цифр.

Текст процедуры обработки события onkeypress приведен в листинге 5.3. Следует обратить внимание на свойство Col, которое во время работы программы содержит номер колонки таблицы, в которой находится курсор. Это свойство можно также использовать для перемещения курсора в нужную ячейку таблицы. Однако нужно учитывать, что колонки таблицы, впрочем, как и строки, нумеруются с нуля.

Листинг 5.3. Процедура обработки события onkeypress

procedure TForml . StringGridlKeyPress(Sender: TObject; var Key; Char);
begin
case Key of
# 8 , ‘ 0 ‘ . . ‘9’ : ; // цифры и клавиша
# 13 : // клавиша
if StringGridl . Col . ColCount — 1
then StringGridl . Col := StringGridl . Col + 1 ;
else key := Chr(O); // остальные символы запрещены
end ;
end ;

Листинг 5.4. Ввод и обработка массива дробных чисел

Источник

Вывод массива

Под выводом массива понимается вывод на экран монитора (в диалоговое окно) значений элементов массива.

Если в программе необходимо вывести значения всех элементов массива, то для этого удобно использовать инструкцию for, при этом переменная-счетчик инструкции for может быть использована в качестве индекса элемента массива.

В качестве примера на рис. 5.1 приведено диалоговое окно приложения, которое демонстрирует инициализацию и процесс вывода значений элементов массива в поле метки. Программа выводит пронумерованный список футбольных команд. Следует обратить внимание, что для того чтобы список команд выглядел действительно как список, свойству Label1.AutoSize нужно присвоить значение False (присвойте свойству Label1.AutoSize значение True и посмотрите, как будет работать программа). Текст программы приведен в листинге 5.1.

Рис. 5.1. Форма и диалоговое окно приложения Вывод массива

Листинг 5.1. Инициализация и вывод массива

Windows, Messages, SysUtils, Variants,

Classes, Graphics, Controls, Forms,

procedure ButtonlClick(Sender: TObject);

team: array[1..NT] of string[10] =

procedure TForml.ButtonlClick(Sender: TObject);

st:string; // список команд

i:integer; // индекс, номер элемента массива

// формирование списка для отображения в форме

for i:=l to NT do st := st + IntToStr(i)+ ‘ ‘

+ team[i] + #13; // вывод списка Label1.Caption := st;

1. Электромагнитная волна (в религиозной терминологии релятивизма — «свет») имеет строго постоянную скорость 300 тыс.км/с, абсурдно не отсчитываемую ни от чего. Реально ЭМ-волны имеют разную скорость в веществе (например,

200 тыс км/с в стекле и

3 млн. км/с в поверхностных слоях металлов, разную скорость в эфире (см. статью «Температура эфира и красные смещения»), разную скорость для разных частот (см. статью «О скорости ЭМ-волн»)

2. В релятивизме «свет» есть мифическое явление само по себе, а не физическая волна, являющаяся волнением определенной физической среды. Релятивистский «свет» — это волнение ничего в ничем. У него нет среды-носителя колебаний.

3. В релятивизме возможны манипуляции со временем (замедление), поэтому там нарушаются основополагающие для любой науки принцип причинности и принцип строгой логичности. В релятивизме при скорости света время останавливается (поэтому в нем абсурдно говорить о частоте фотона). В релятивизме возможны такие насилия над разумом, как утверждение о взаимном превышении возраста близнецов, движущихся с субсветовой скоростью, и прочие издевательства над логикой, присущие любой религии.

4. В гравитационном релятивизме (ОТО) вопреки наблюдаемым фактам утверждается об угловом отклонении ЭМ-волн в пустом пространстве под действием гравитации. Однако астрономам известно, что свет от затменных двойных звезд не подвержен такому отклонению, а те «подтверждающие теорию Эйнштейна факты», которые якобы наблюдались А. Эддингтоном в 1919 году в отношении Солнца, являются фальсификацией. Подробнее читайте в FAQ по эфирной физике.

Источник

Читайте также:  Как настроить бота mee6 чтобы он чистил чат
Оцените статью