Урок 11 Многомерные массивы и их обработка. Компонент поле ввода-редактирования строки символов
Пример 1 Построим приложение которое формирует и выводит на экран двумерный массив 10х20 из случайных чисел в диапазоне от 0 до 9. Здесь воспользуемся компонентами Button и Label. Помни, нумерация строк и столбцов начинается с нуля.
unit Unit4;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Imaging.pngimage,
Vcl.ExtCtrls;
type
TForm4 = class(TForm)
Button1: TButton;
Label1: TLabel;
Image1: TImage;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
// двумерный массив элементов целого типа
a: array [0..9, 0..19] of integer;
i, j: integer; // переменные целого типа
implementation
{$R *.dfm}
procedure TForm4.Button1Click(Sender: TObject);
begin
image1.Visible := false; // скрыть изображение
label1.Caption := ''; // очистка текста
randomize; // рандомизация
for i := 0 to 9 do // внешний цикл
begin
for j := 0 to 19 do // внутренний цикл
begin
a[i, j] := random(10); // случайное число
// добавить в поле текста случайное число
label1.Caption := label1.Caption + ' ' + inttostr (a[i, j]);
end;
// переход в новую строку
label1.Caption := label1.Caption + #13;
end;
end;
end.
Пример 2 Следующее приложение демонстрирует некоторые виды обработки элементов двумерного массива. Например, в массиве 10х20 из двухсот элементов подсчитать числа выпавших нулей, единиц, двоек и так далее.
unit Unit4;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Imaging.pngimage,
Vcl.ExtCtrls;
type
TForm4 = class(TForm)
Button1: TButton;
Label1: TLabel;
Image1: TImage;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
// двумерный массив элементов целого типа
a: array [0..9, 0..19] of integer;
i, j: integer; // переменные целого типа
n0: integer; // число нулей
n1: integer; // число единиц
n2: integer; // ...
n3: integer; //
n4: integer; //
n5: integer; //
n6: integer; //
n7: integer; //
n8: integer; //
n9: integer; // число девяток
implementation
{$R *.dfm}
procedure TForm4.Button1Click(Sender: TObject);
begin
image1.Visible := false; // скрыть изображение
label1.Caption := ''; // очистка текста label1
label2.Caption := ''; // очистка текста label1
randomize; // рандомизация
n0 := 0;
n1 := 0;
n2 := 0;
n3 := 0;
n4 := 0;
n5 := 0;
n6 := 0;
n7 := 0;
n8 := 0;
n9 := 0;
for i := 0 to 9 do // внешний цикл
begin
for j := 0 to 19 do // внутренний цикл
begin
a[i, j] := random(10); // случайное число
// добавить в поле текста случайное число
label1.Caption := label1.Caption + ' ' + inttostr (a[i, j]);
if a[i,j] = 0 then n0 := n0 + 1; // подсчет нулей
if a[i,j] = 1 then n1 := n1 + 1; // подсчет единиц
if a[i,j] = 2 then n2 := n2 + 1;
if a[i,j] = 3 then n3 := n3 + 1;
if a[i,j] = 4 then n4 := n4 + 1;
if a[i,j] = 5 then n5 := n5 + 1;
if a[i,j] = 6 then n6 := n6 + 1;
if a[i,j] = 7 then n7 := n7 + 1;
if a[i,j] = 8 then n8 := n8 + 1;
if a[i,j] = 9 then n9 := n9 + 1; // подсчет девяток
end;
// переход в новую строку
label1.Caption := label1.Caption + #13;
end;
// вывод на экран
label2.Caption := label2.Caption + 'Число нулей = ' + inttostr (n0) + #13;
label2.Caption := label2.Caption + 'Число единиц = ' + inttostr (n1) + #13;
label2.Caption := label2.Caption + 'Число двоек = ' + inttostr (n2) + #13;
label2.Caption := label2.Caption + 'Число троек = ' + inttostr (n3) + #13;
label2.Caption := label2.Caption + 'Число четверок = ' + inttostr (n4) + #13;
label2.Caption := label2.Caption + 'Число пятерок = ' + inttostr (n5) + #13;
label2.Caption := label2.Caption + 'Число шестерок = ' + inttostr (n6) + #13;
label2.Caption := label2.Caption + 'Число семерок = ' + inttostr (n7) + #13;
label2.Caption := label2.Caption + 'Число восьмерок = ' + inttostr (n8) + #13;
label2.Caption := label2.Caption + 'Число девяток = ' + inttostr (n9) + #13;
end;
end.
Пример 3 Программа в массиве 15х20 состоящем из случайных двухзначных чисел находит сумму всех элементов в пятой строке и число выпавших чисел 54 в третьем столбце. Здесь есть строка if (Условие1) and (Условие2) then. Логическая операция and (логическое И), поставленная между двумя условиями, говорит о том, что должны выполняться сразу оба эти условия (должны быть истинными).
unit Unit9;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Imaging.pngimage,
Vcl.ExtCtrls;
type
TForm9 = class(TForm)
Button1: TButton;
Label1: TLabel;
Image1: TImage;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form9: TForm9;
// двумерный массив элементов целого типа
a: array [0..14, 0..19] of integer;
i, j, s, p: integer; // переменные целого типа
implementation
{$R *.dfm}
procedure TForm9.Button1Click(Sender: TObject);
begin
image1.Visible := false; // скрыть изображение
label1.Caption := ''; // очистка текста
randomize; // рандомизация
s := 0;
p := 0;
for i := 0 to 14 do // внешний цикл
begin
for j := 0 to 19 do // внутренний цикл
begin
a[i, j] := random(90) + 10; // случайное число
// добавить в поле текста случайное число
label1.Caption := label1.Caption + ' ' + inttostr (a[i, j]);
if (j = 3) and (a[i, j] = 54) then
p := p + 1; // подсчет чисел 54 в третьем столбце
if i = 5 then
s := s + a[i, j]; // последовательное вычисление суммы в пятой строке
end;
label1.Caption := label1.Caption + #13; // переход в новую строку
label2.Caption := 'Число 54 выпало в третьей строке ' + inttostr (p) + ' раз';
label3.Caption := 'Сумма всех элементов в пятой строке = ' + inttostr (s);
end;
end;
end.
Пример 4 Программа проводит сортировку по возрастанию в массиве 10х15 состоящем из случайных трехзначных чисел.
Выбери лучшее! allbest |