Урок 10 Случайные числа. Создание и обработка одномерных массивов
Пример 1 Программа позволяет получать псевдослучайные трехзначные числа в диапазоне от 100 до 999 включительно. Здесь оператор Random генерирует случайные числа. Например, Random(10) будет генерировать псевдослучайные числа в диапазоне от 0 до 9. Оператор Randomize нужен для того что бы начальное число не повторилось при повторном запуске приложения, а следовательно все последующие случайные числа не повторили предыдущую последовательность. Потребуются компоненты Button и Label.
unit Unit6;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Imaging.jpeg, Vcl.ExtCtrls,
Vcl.StdCtrls;
type
TForm6 = class(TForm)
Button1: TButton;
Image1: TImage;
Label1: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form6: TForm6;
a: integer;
n: integer;
implementation
{$R *.dfm}
procedure TForm6.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TForm6.Button2Click(Sender: TObject);
begin
Randomize;
a := Random(900) + 100;
Label1.Caption := IntToStr (a);
end;
end.
Пример 2 Следующая программа формирует одномерный массив из двадцати случайных чисел в диапазоне от 0 до 9. А так же находит сумму всех элементов этого массива, вычисляет среднее значение и подсчитывает число пятерок в нем. Для формирования массива воспользуемся циклом for_to_do. Перед написанием программного кода на форме необходимо разместить компоненты – Button и четыре Label.
unit Unit7;
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
TForm7 = class(TForm)
Label1: TLabel;
Button1: TButton;
Label2: TLabel;
Label3: TLabel;
Image1: TImage;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form7: TForm7;
a: array[1..20] of integer; //массив на двадцать элементов
i: integer; //переменная целого типа
s: integer;
p: integer;
c: real; //переменная вещественного типа
implementation
{$R *.dfm}
procedure TForm7.Button1Click(Sender: TObject);
begin
Label1.Caption := ''; //очистка поля метки
Randomize; //рандомизация
s := 0; //обнуление суммы
p := 0;
for i:=1 to 20 do //цикл ДЛЯ
begin //начало цикла
a[i] := Random(10); //в элемент массива положить случайное число
Label1.Caption := Label1.Caption + ' ' + IntToStr (a[i]); //вывод на экран
s := s + a[i]; //последовательное суммирование элементов массива
if a[i] = 5 then p := p + 1; //подсчет числа пятерок с помощью условия ЕСЛИ
end; //конец цикла
Label2.Caption := 'Сумма = ' + IntToStr (s); //вывод суммы на экран
c := s/20; //вычисление среднего значения
Label3.Caption := 'Среднее = ' + FloatToStr (c); //вывод среднего на экран
Label4.Caption := 'Число пятерок = ' + IntToStr (p); //вывод числа пятерок на экран
end;
end.
Пример 3 Одним из самых распространенных видов обработки массива является его сортировка. Допустим необходимо отсортировать одномерный массив из 30-и произвольных чисел по возрастанию. Можно применить алгоритмом, который называется сортировка вставками. Нужно создать второй массив, в который последовательно будут вставляться элементы из начального массива. В конце второго массива резервируется свободная ячейка. Теперь сравнивается элемент, стоящий перед пустой ячейкой, и если этот элемент больше вставляемого, то элемент перемещается в свободную ячейку. Тогда на месте, где он стоял, ячейка станет свободной. Далее идет сравнение следующего элемента. Когда элемент перед пустой ячейкой станет меньше вставляемого или пустая ячейка стоит в начале массива, помещается вставляемый элемент в свободную ячейку. Таким образом, по очереди вставляем все элементы исходного массива. Очевидно, что если до вставки элемента массив был упорядочен, то после вставки перед вставленным элементом расположены все элементы, меньшие его, а после него большие. Порядок элементов во втором массиве не меняется. Новый массив будет упорядоченным после каждой вставки. Следовательно после последней вставки получится упорядоченный начальный массив.
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)
Label1: TLabel;
Button1: TButton;
Label2: TLabel;
Image1: TImage;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form9: TForm9;
a,b : array[1..30] of integer;
n,i,j : integer;
implementation
{$R *.dfm}
procedure TForm9.Button1Click(Sender: TObject);
begin
n := 30;
Label1.Caption := ''; // очистка поля метки
Label2.Caption := ''; // очистка поля метки
Randomize; // рандомизация
// формирование и вывод массива из случайных чисел на экран
for i := 1 to n do // цикл ДЛЯ
begin // начало цикла
a[i] := Random(101); // в элемент массива положить случайное число
Label1.Caption := Label1.Caption + ' ' + IntToStr (a[i]); // вывод на экран
end; // конец цикла
// сортировка элементов массива по возрастанию
for i := 1 to n do
begin
j := i;
while (j >1) and (b[j - 1] > a[i]) do
begin
b[j] := b[j - 1];
j := j - 1;
end;
b[j] := a[i];
end;
// вывод массива на экран после сортировки
for i := 1 to n do // цикл ДЛЯ
begin // начало цикла
Label2.Caption := Label2.Caption + ' ' + IntToStr (b[i]); // вывод на экран упорядоченного массива по возрастанию
end; // конец цикла
end;
end.
Выбери лучшее! allbest |