Ваш браузер устарел. Рекомендуем обновить его до последней версии.





 


 



Delphi

 

 


Урок 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.


Flag Counter
Яндекс.Метрика
200stran.ru: показано число посетителей за сегодня, онлайн, из каждой страны и за всё время
Besucherzahler russain brides
счетчик посещений

Выбери лучшее!

allbest