Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];

Вниз

Случайное число без повторов   Найти похожие ветки 

 
AIK ©   (2008-11-26 10:49) [0]

Здравствуйте никто не даст идею как Проше и лучше реализовать такое, а то я ЗАМУТИЛ что-то очень большое и некрасивое, другое пока в голову не приходит :-(

……
var
 Form1: TForm1;
 X: Array[0..9] of integer;
 Z: integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
B: Boolean;
y,i: integer;
begin
B:= false;
If z=10 then
exit;

Randomize;
Repeat
Y:= random(11);
For i:=0 to z do
If X[i]= y  then  Begin
  Break; end else
If i= z then begin
  X[z]:= y;
  B:= true;
  Break;
end;
Until b=true;

Memo1.Lines.Add(IntToStr(x[z]));
 Z:=z+1;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Z:= 0;
end;


 
Ega23 ©   (2008-11-26 10:51) [1]

гм...
Без повторов - элементарно.

for i:=Low(X) to High(X) do X[i] := i;


 
stas ©   (2008-11-26 10:53) [2]

Если используешь memo, то зачем еще масив выдумывать
используй
memo1.Lines.IndexOf()


 
9899100   (2008-11-26 10:57) [3]

попробуй с множествами поработать
при генерации числа добавляй его в множество
примерно так
Var mn:set of Integer;
...
repeat
x:=Random(11);
until not (x in mn);
mn:=mn + x;


 
AIK ©   (2008-11-26 11:12) [4]


> Ega23 ©   (26.11.08 10:51) [1]


Че это такое?


> stas ©   (26.11.08 10:53) [2]


Да я мемо только потом поставил, а переделывать не додумался


> 9899100   (26.11.08 10:57) [3]


Var mn:set of Integer;

Компилятор выдал: [Error] Unit1.pas(62): Sets may have at most 256 elements

Пробовал с Byte
Но
repeat
Y:=Random(10);
until not (Y in mn);
mn:=mn + Y;   //Y: Integer;
Компилятор выдал: [Error] Unit1.pas(69): Incompatible types


 
AIK ©   (2008-11-26 11:15) [5]


> AIK ©   (26.11.08 11:12) [4]
> > Ega23 ©   (26.11.08 10:51) [1]Че это такое?


Точнее что это такое я понял но это ведь не то что нужно


 
Ega23 ©   (2008-11-26 11:18) [6]


> Точнее что это такое я понял но это ведь не то что нужно


А ты прочитай свой пост с точки зрения стороннего человека и попытайся понять, что тебе нужно.
Я так понял, что тебе нужно упорядоченный массив от 0 до 9 "перемешать".
Вопрос: а зачем? Не проще ли брать случайный элемент упорядоченного массива?


 
Palladin ©   (2008-11-26 11:18) [7]


> Компилятор выдал: [Error] Unit1.pas(62): Sets may have at most 256 elements
>Компилятор выдал: [Error] Unit1.pas(69): Incompatible types

я думаю, Игорю больно слышать )

заполняешь любой удобный контейнер числами по порядку, получаешь его элемент по случайному индексу, удаляешь этот элемент из контейнера


 
MBo ©   (2008-11-26 11:18) [8]

Заполнить массив [0..N - 1] последовательными числами.
Для получения K-го случайного числа брать элемент массива с индексом Random(N-K+1), затем ставить на его место элемент [N-K]


 
AIK ©   (2008-11-26 11:28) [9]


> Palladin ©   (26.11.08 11:18) [7]


Ах да... хороший вариант спасибо за идею


> MBo ©   (26.11.08 11:18) [8]


И тебе спасибо, но идея выше немного по проше хоть и почти похожи


 
9899100   (2008-11-26 11:44) [10]


> > Компилятор выдал: [Error] Unit1.pas(62): Sets may have
> at most 256 elements
> >Компилятор выдал: [Error] Unit1.pas(69): Incompatible types
>
> я думаю, Игорю больно слышать )
>
> заполняешь любой удобный контейнер числами по порядку, получаешь
> его элемент по случайному индексу, удаляешь этот элемент
> из контейнера


Абсолютно нормально
яж написал

> примерно так
> Var mn:set of Integer;


а не используй этот код :)


 
Anatoly Podgoretsky ©   (2008-11-26 13:12) [11]

Сделай массив 0..10, последний индекс не используй.


 
AIK ©   (2008-11-26 14:55) [12]

Сделал так, вроде нормально серьезно

procedure NoRepRandom(Max1: Integer; Max2: TStringList);
var
 I, x: integer;
 St: TStringList;
Begin
St:= TStringList.Create;
 For i:=0  to max1 do
   St.Add(Inttostr(i+1));  // типа не от 0
Randomize;
While Max1<>0 do
 Begin
   x:= Random(Max1);
   Max2.Add(st[X]);
   st.Delete(X);
   Max1:= max1-1;
 end;
end;


P.S.  NoRepRandom  - Это типа repeat, чтоб не придирались :о)


 
Ega23 ©   (2008-11-26 15:00) [13]


> Сделал так, вроде нормально серьезно


ужас. StringList-то зачем?


 
Palladin ©   (2008-11-26 15:05) [14]

procedure NoRepRandom(Max1: Integer; Max2: TList);
var
 I, x: integer;
 St: TList;
Begin
 St:= TList.Create;
 Try
  For i:=0  to max1 do St.Add(Pointer(i));  // типа не от 0, а почему бы и нет?
  Randomize;
  While st.Count>0 do
   Begin
    x:= Random(st.Count);
    Max2.Add(st[X]);
    st.Delete(X);
   end;
 Finally
  st.Free; // что за невежество, не освобождать память?
 End;
end;


 
AIK ©   (2008-11-26 15:08) [15]


> ужас. StringList-то зачем?


в моем случаи нужно с ним работать легче


> Palladin ©   (26.11.08 15:05) [14]
>  st.Free; // что за невежество, не освобождать память?


Виноват


 
MBo ©   (2008-11-26 15:15) [16]

так тебе перемешивание нужно, похоже. Тогда ни к чему два списка

 for i := 0 to N - 1 do
   A[i] := i + 1;
 for i := N - 1 downto 0 do begin
   temp := A[i];
   j := Random(i + 1);
   A[i] := A[j];
   A[j] := temp;
 end;


 
AIK ©   (2008-11-26 15:36) [17]


> MBo ©   (26.11.08 15:15) [16]


Спасибо, вариант на много проше.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.005 c
15-1226267200
KilkennyCat
2008-11-10 00:46
2009.01.11
Как же все надоело...


15-1226831942
b1tard
2008-11-16 13:39
2009.01.11
Симплекс-метод


2-1227773282
kate158
2008-11-27 11:08
2009.01.11
расчет медианы набора данных


15-1226462765
Slider007
2008-11-12 07:06
2009.01.11
С днем рождения ! 12 ноября 2008 среда


2-1227776113
cvg
2008-11-27 11:55
2009.01.11
Как отключить загрузку ODBC-драйвера?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский