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

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 10.07.2019, 11:30   #1
linda88
Форумчанин
 
Регистрация: 17.01.2019
Сообщений: 73
Репутация: 27
По умолчанию заполнить рандомно массив числами от 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
Адрес: Северодонецк.ua
Сообщений: 18,860
Репутация: 6688
По умолчанию

Код:
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
Сообщений: 25,681
Репутация: 5617
По умолчанию

Цитата:
Сообщение от 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
Адрес: RF Moscow
Сообщений: 5,406
Репутация: 2502

icq: 438888048
По умолчанию

Вот еще вариант.
Код:
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 на форуме   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


16:37.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru