Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2013, 17:01   #11
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
RandomRange(1,101)
да спасибо я уже заметил что только вторую цифру надо на 1 больше
FleXik вне форума Ответить с цитированием
Старый 26.10.2013, 23:01   #12
Koma76
Новичок
Джуниор
 
Регистрация: 26.10.2013
Сообщений: 1
По умолчанию

Я, честно говоря только начал изучать Delphi.
Вот набросал прогу лотерии 5 из 36. Естественно нам не нужно, чтобы числа выпадали повторно. Решение такое. Может и громоздко, но я только осваиваю.

var
AA, BB, CC, DD, EE: Integer;
label
Loop1, Loop2, Loop3, Loop4, Loop5;
begin

Loop1://Первое число
AA:= Random(37);
if AA=0 then goto Loop1; //Исключаем 0
memo1.Lines.Add (IntToStr(AA));// Отображаем число в строке

Loop2: //Второе число
BB:= Random(37);
if (BB=AA) or (BB=0) then goto Loop2; //Исключаем повтор и 0
memo1.Lines.Add (IntToStr(BB));// Отображаем число в строке

Loop3: //Третье число
CC:= Random(37);
if (CC=AA) or (CC=BB) or (CC=0) then goto Loop3; //Исключаем повторы и 0
memo1.Lines.Add (IntToStr(CC));// Отображаем число в строке

Loop4: // Четвертое число
DD:= Random(37);
if (DD=AA) or (DD=BB)or (DD=CC) or (DD=0) then goto Loop4;// Повторы и 0
memo1.Lines.Add (IntToStr(DD));// Отображаем число в строке

Loop5: //Пятое число
EE:= Random(37);
if (EE=AA) or (EE=BB) or (EE=CC) or (EE=DD) or (EE=0) then goto Loop5;// Повторы и 0
memo1.Lines.Add (IntToStr(EE));// Отображаем число в строке
memo1.Lines.Add ('');// Пустая строка
end;

Последний раз редактировалось Koma76; 26.10.2013 в 23:05.
Koma76 вне форума Ответить с цитированием
Старый 27.10.2013, 00:29   #13
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Нахождение 2х рандомных чисел от 10 до 20, исключая (11, 13, 16, 17). Вроде должно работать.
Код:
var 
 NotArray:array [0..3] of integer; //количество элементов 4 (от 0 до 3)
 C1, C2:integer;

 function GetRandom_Out_NotArray:integer; //рекурсивная локальная функция 
 var i: integer;
 begin
  result:=random(10)+10; //от 10 до 20; random(n)+m, где m=min, n+m=max
  for i:=0 to 3 do //сравним через цикл с массивом ненужных элементов (от 0 до 3)
   if result=NotArray[i] then //если совпадет - ищем новое значение
    result:=GetRandom_Out_NotArray;
 end;

begin
 NotArray[0]:=11; //заполнение ненужных значений (от 0 до 3)
 NotArray[1]:=13;
 NotArray[2]:=16;
 NotArray[3]:=17;
 C1:=GetRandom_Out_NotArray; //поиск числа 1
 C2:=GetRandom_Out_NotArray; //поиск числа 2
end;
Для комы76:

Код:
var 
 MyArray: array [0..4] of integer; //количество элементов 5 (от 0 до 4)
 i:integer;

 function GetRandom_Out_MyArray:integer; //рекурсивная локальная функция 
 var j: integer;
 begin
  result:=random(35)+1; //от 1 до 36 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  for j:=0 to 4 do //сравним через цикл с массивом ненужных элементов (от 0 до 4)
   if result=MyArray[j] then //если совпадет - ищем новое значение
    result:=GetRandom_Out_MyArray;
 end;

begin
 for i:=0 to 4 do
  MyArray[i]:=0; //обнулим значения (на всякий случай)

 for i:=0 to 4 do
 begin
  MyArray[i]:=GetRandom_Out_MyArray; //поиск чисел
  memo1.Lines.Add (IntToStr(MyArray[i])); //Отображаем числа в строках
 end;
end;
Можно сделать код немного универсальнее используя динамические массивы...
alextrof94$gmail.com

Последний раз редактировалось alextrof94; 27.10.2013 в 00:42.
alextrof94 вне форума Ответить с цитированием
Старый 27.10.2013, 00:47   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Koma76, а вот так без меток и goto
Код:
procedure TForm1.Button1Click(Sender: TObject);
var Numbers: array [1..5] of Integer;
    i,j: Integer;
    Found: Boolean;
begin
  Randomize;
  Memo1.Clear;
  for i:=1 to 5 do begin
    repeat
      Numbers[i]:=Random(36)+1;
      Found:=False;
      for j:=1 to i-1 do Found:=Found or (Numbers[j]=Numbers[i]);
    until not Found;
    Memo1.Lines.Add (IntToStr(Numbers[i]));
  end;
end;
alextrof94, пока вставил и от вас для Koma76 послание. Ничего, думаю он не обидится

PS

Код:
result:=random(35)+1; //от 1 до 36
Будет до 35
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 27.10.2013 в 00:51.
Аватар вне форума Ответить с цитированием
Старый 27.10.2013, 01:00   #15
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
for i:=0 to 3 do //сравним через цикл с массивом ненужных элементов (от 0 до 3)
if result=NotArray[i] then //если совпадет - ищем новое значение
if result in NotArray then
eval вне форума Ответить с цитированием
Старый 28.10.2013, 09:44   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от eval
Код:
if result in NotArray then
плохо, когда знаешь много ЯП, начинаешь путать, где что есть, чего где нет..
Такая запись ни в Delphi, ни, тем более, в Pascal - НЕДОПУСТИМА!

только перебор, только хардкор!

p.s. числа от 1 до 36 можно сохранять во множесте (set of byte), вот тогда будет допустима операция if xxx IN Множество
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.10.2013, 10:21   #17
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

ну так и перегнать в сет, делов то
eval вне форума Ответить с цитированием
Старый 28.10.2013, 10:25   #18
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
ну так и перегнать в сет, делов то
И что? Тогда уж проще в цикле по массиву. Ну и вдруг не из 36, а из 512 выборка? Тогда уж точно множества не помогут
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как работает RandomRange? bakanaev Общие вопросы Delphi 3 12.03.2013 17:10
[Delphi]Удалить в файле целых чисел определенные числа.(работает некорректно) neytron007 Помощь студентам 7 06.01.2013 18:40
Как блокировать разрушение фрейма? zatocnik JavaScript, Ajax 0 03.11.2012 01:19
найти определенные числа в строке fize Помощь студентам 3 15.01.2010 11:26
Как блокировать рекламу плагами FFox'a AgressiveBehavior Свободное общение 1 23.09.2009 14:14