Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 10.07.2019, 11:30   #1
linda88
Пользователь
 
Регистрация: 17.01.2019
Сообщений: 78
По умолчанию заполнить рандомно массив числами от 0 до 20, но так что бы повторяющиеся цифры не соседствовали друг с другом.

Не обходимо заполнить рандомно массив числами от 0 до 20, но так что бы повторяющиеся цифры не соседствовали друг с другом.

Код:
unit osn;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.Edit, FMX.StdCtrls, FMX.ScrollBox, FMX.Memo;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    Button3: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

  a : array of Integer ;
  I,B,S:integer;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
B:=strtoint(form1.Edit1.Text);
setlength(A,b);
Button2.Visible:=true;
Button3.Visible:=true;
 Button1.Visible:=false;
 Edit1.Visible:=false;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Lines.Clear;
 label1.text:= inttostr(length(a));
 for I := 0 to length(a) do
memo1.Lines.Add(inttostr(a[i]))
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
for I := 0 to length(a) do
begin
Randomize;
A[i]:=Random(20);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

end.
linda88 вне форума Ответить с цитированием
Старый 10.07.2019, 11:45   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,061
По умолчанию

Код:
Randomize;  //лучше вообще вынести из Button3Click, например в FormCreate
for I := 0 to High(a) do begin
  k:=Random(21);  // 0-20
  while (i>0) and (A[i-1]=k) do  k:=Random(21); 
  A[i]:=k;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.07.2019, 11:50   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

Цитата:
Сообщение от linda88 Посмотреть сообщение
но так что бы повторяющиеся цифры не соседствовали друг с другом.
во-первых, Вы не путаете "ЦИФРЫ" и "ЧИСЛА" ?
а во-вторых, что означает, чтобы повторяющиеся не соседствовали? приведите пример, как нельзя и как можно заполнить массив.

в-третьих,
Цитата:
Сообщение от linda88 Посмотреть сообщение
Randomize;
Randomize; нужно делать ОДИН РАЗ!
Вынесите его из цикла в FormCreate:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
   Randomize;
end;
в четвёртых,
Цитата:
Сообщение от linda88 Посмотреть сообщение
Код:
A[i]:=Random(20);
Random(20) даёт ПСЧ от 0 до 19



ps. Аватар уже ответил. Мой пост потерял актуальность.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.07.2019, 02:54   #4
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 5,429
По умолчанию

Вот еще вариант.
Код:
A[0] := Random(21);
for i := 1 to High(A) do
begin
    A[i] := Random(20);
    if A[i] = A[i - 1] then inc(A[i]);
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнить массив a числами. Получить новый массив b, weeping angel Помощь студентам 3 18.05.2017 14:45
Как заполнить массив рандомными числами (Си) Sterben Помощь студентам 2 26.04.2015 20:51
Заполнить массив случайными числами и выделить в другой массив все числа, которые встречаются более darkland Паскаль, Turbo Pascal, PascalABC.NET 2 04.03.2014 20:44
Рандомно заполнить двумерный массив, используя шаблонную функцию akush Помощь студентам 2 01.10.2011 19:37
как заполнить массив рандомно ronny137 Помощь студентам 9 02.05.2010 21:25