Учебный курс Программирование на Delphi. Модуль 9
Работа с одномерными массивами
Массивом называется упорядоченная последовательность однотипных объектов, обозначаемая одним именем. Чтобы выделить один из объектов (элемент) массива, надо указать имя массива и номер элемента в нем. Номер элемента называется индексом, индекс указывается в квадратных скобах и может быть числом, переменной, выражением. Имя массива образуется по правилам образования имен переменных.
Например, А [10], B [I, J], SUM [1, J+5].
Если для выделения элемента нужен один индекс, массив называется одномерным, два – двумерным и т.д. Число элементов массива называется длиной или размером массива. Одномерный массив называется вектором.
Для описания массивов используется служебное слово array. Массив в Delphi можно описывать двумя способами:
а) в разделе описания переменных var: var <имя переменной>: array [тип индекса] of <тип компоненты>;
б) определить сначала тип, а затем описать массив этим типом
type <имя типа>= array [тип индекса] of <тип компоненты>;
var <имя переменной>: <имя типа>;
где <тип индекса> - порядковый тип; <тип компоненты> - любой тип.
Пример 1.
- Условие задачи
В векторе найти номера и значения первого минимального и последнего максимального элементов.
- Использованные компаненты
Label – метка, используется как надпись или как область вывода информации для чтения.
Edit – строка ввода.
Button – стандартная кнопка, обычно кнопка используется для запуска действия, при этом задействуют только метод OnEvent (реакция на нажатие).
StringGrid - используется для ввода и вывода массива.
- Код программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
StringGrid1: TStringGrid;
Label3: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var a:array[1..100] of real;
n,i,nmin,nmax:integer;
amax,amin:real;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
n:=strtoint(edit1.Text);
for i:=1 to n do
if n>30 then label3.Caption:='Большое число';
randomize;
for i:=1 to n do
begin
a[i]:=random(81)- 30;
stringgrid1.cells[i-1,0]:=floattostr(a[i]);
end;
amin:=a[1]; nmin:=1;
amax:=a[1]; nmax:=1;
for i:=1 to n do
begin
if a[i]<amin then begin
amin:=a[i]; nmin:=i
end;
if a[i]>=amax then begin
amax:=a[i]; nmax:=i;
end;
end;
label3.Caption:='Минимальное= '+floattostr(amin)+#13+'Номер минимального= '+inttostr(nmin)+' '+#13+'Максимальное= '+floattostr(amax)+#13+'Номер максимального= '+inttostr(nmax);
end;
end.
- Форма с результатом работы программы
Пример 2.
- Условие задачи
Создать массив из n случайных целых чисел, равномерно распределенных в диапазоне от 0 до 100. Вычислить среднее арифметическое и количество четных чисел.
- Использованные компаненты
Label – метка, используется как надпись или как область вывода информации для чтения.
Edit – строка ввода.
Button – стандартная кнопка, обычно кнопка используется для запуска действия, при этом задействуют только метод OnEvent (реакция на нажатие).
StringGrid - используется для ввода и вывода массива.
- Код программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
StringGrid1: TStringGrid;
Label3: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const nmax=1000;
type x=array[1..nmax] of integer;
var m:x;
k,i,n:integer;
s:real;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
n:=strtoint(edit1.Text);
randomize;
for i:=1 to n do
begin
m[i]:=random(101);
stringgrid1.Cells[i-1,0]:=inttostr(m[i]);
end;
s:=0;
k:=0;
for i:=1 to n do
if not odd(m[i]) then begin
s:=s+m[i];
k:=k+1;
end;
s:=s/k;
label3.Caption:='Среднее арифметическое= '+floattostr(s)+#13+
'Количество четных чисел= '+inttostr(k);
end;
end.
- Форма с результатом работы программы
Задание
Таблица 13
| Номер варианта | Условие |
|---|---|
| Даны два вектора целых чисел А и В. Вычислить вектор С, который содержит нечетные элементы вектора А, которых нет в векторе В | |
| Расположить элементы вектора в обратном порядке. Дополнительный массив не использовать. | |
| Найти среднее арифметическое элементов массива X(n), исключив из них максимальное и минимальное значение. | |
| Вектор B(n) заменить вектором, у которого элементы образуются делением вектора В на их сумму. | |
| Заменить все элементы вектора X(m), стоящие до максимального, нулями. | |
| В массиве R(k) найти минимальный элемент среди положительных и максимальный среди отрицательных. | |
| В массиве У(n) заменить все его элементы, стоящие после минимального, нулями. | |
| Даны массив A(n) целого типа и целое число х. Произвести перестановку элементов массива так, чтобы в начале массива стояли элементы, значения которых меньше х, затем элементы, равные х, а следом элементы, значения которых больше х, в том порядке, в каком они стояли в массиве. | |
| На плоскости на расстоянии s[1], s[2], ..., s[10] от центра кругового кольца с внутренним радиусом r и внешним R расположены точки. Определить количество точек, расположенных внутри кольца. | |
| Дан вектор Х. Все его элементы не равные нулю, переписать (сохраняя их порядок) в начало массива, а нулевые элементы - в конец массива (новый массив не заводить). | |
| Даны два вектора А и В. Сформировать вектор С, который содержит элементы, присутствующие в обоих массивах. | |
| Имеется n окружностей с центром в начале координат и радиусами R[1], R[2], ..., R[n]. Определить номера окружностей между которыми находится точка с координатами (х, у). | |
| В векторе X(n) поменять местами максимальный и последний элементы. | |
| В векторе У(m) поменять местами максимальный и минимальный элементы. |
Таблица 14
Ссылки
Учебный курс Программирование на Delphi
Учебный план курса Программирование на Delphi
| Номер варианта | Условие | |
|---|---|---|
| Вычислить среднее геометрическое элементов вектора У(k), кратных трем. | ||
| Определить, кратна ли сумма элементов вектора A(x) семи. | ||
| В векторе D(m) определить количество четных элементов. | ||
| В векторе У(k) поменять местами первый и минимальный элементы. | ||
| Из вектора С(n) сформировать вектор А, содержащий четные элементы вектора С и вектор В, содержащий нечетные элементы. | ||
| Произвести сдвиг элементов вектора A(n) на к позиций влево так, что на место a[1] станет a[k+1], на место a[n-k] станет a[n], на место a[n-k+1] станет a[1], на место a[n-k+2] станет a[2], на место a[n] станет a[k]. | ||
| Найти среднее геометрическое элементов массива С[k], стоящих на четных местах. | ||
| В массиве X(n) поменять местами минимальный и последний элементы. | ||
| В векторе Т(к) заменить все его элементы, стоящие после максимального, нулями. | ||
| Найти среднеквадратичное элементов вектора A(n). s=(a[1]*a[1] + a[2]*a[2] + ... +a[n]*a[n])/n | ||
| Элементы вектора В, удовлетворяющие условию B[i]>10, переписать в массив X, а элементы, удовлетворяющие условию B[i] <= 10, переписать в массив У. | ||
| В векторе Z(m) определить сумму нечетных элементов. | ||
| Определить индексы четных элементов массива А(к). | ||
| Определить, кратна ли сумма элементов вектора D(12) пяти. |