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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2015, 15:27   #1
ostnod
 
Регистрация: 25.05.2015
Сообщений: 4
По умолчанию Рандомное заполнение десятичными числами

Доброго времени суток.
Делаю небольшую программку, в которой таблица должна заполняться рандомными числами из указанного промежутка. С целыми числами, всё в порядке, а вот с десятичными, т.е. вида от 0,003 до 0,0015 (возникает ошибка: Incompatible types: 'Integer' and 'Double')
Вот вырезка участка из кода:
PHP код:
var a,bDouble;
begin
a
:=StrToFloat(Edit3.Text);
b:=StrToFloat(Edit4.Text);
randomize;
with StringGrid1 do
for 
j:=0 to rowcount-do
for 
i:=0 to colcount-do
cells[i,j]:=FloatToStr(RandomRange(a,b)); 
Подскажите, что сделать, чтобы рандомными заполнялось, например, с промежутка от 0,003 до 0,015? В коде эту роль выполняют a и b.

Заранее спасибо за помощь.
ostnod вне форума Ответить с цитированием
Старый 17.08.2015, 15:36   #2
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 516
По умолчанию

как вариант бери рандом не дробных чисел, целых, и дели на 1000
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 17.08.2015, 15:39   #3
ostnod
 
Регистрация: 25.05.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Toxa Посмотреть сообщение
как вариант бери рандом не дробных чисел, целых, и дели на 1000
Ну а если мне нужно не только 0,001? Эти числа взяты для примера, могут быть и 0,1 и 0,000005.
Или ещё вводить дополнительные чекбоксы, в зависимости от которых делить на 10-1000000? Так это только загромоздит.
ostnod вне форума Ответить с цитированием
Старый 17.08.2015, 15:41   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

cells[i,j]:=FloatToStr(a+(b-a)*Random);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.08.2015, 16:27   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
дополнительные чекбоксы, в зависимости от которых делить на 10-1000000? Так это только загромоздит.
одного TEdit достаточно. Втуда вводи коэффициент (x, например), на который умножай
Код:
var
  x: extended;
  idx: dword;
begin
  x:= StrToFloatDef(edit.text, 100500.0);
  idx:= высота_таблицы;
  while idx <> 0 do
    begin 
      добавить_в_таблицу(RandomRange(..., ...) * x);
      dec(idx);
    end;
end;
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 17.08.2015, 17:21   #6
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Во первых, обозначь все цифры таблицы в тип Real.
Во вторых, рандомизировать нужно два раза. Сначала нужно рандомизировать число перед запятой, затем следом за ней.
Рандомизация последнего должна будет иметь в параметре количестве цифер после запятой. Этот параметр берется как степень для 10. И получившееся число из функции Power задается как параметр для Random(Незабываем произвести Randomize, чтобы уменьшить вероятность повторения). Оба полученых числа складываются.
Код такой:
Код:
function RandomRealNumber(a,b: Integer): Real;
var
i: integer;
begin
//a-число для рандома перед запятой, b-число для рандома после запятой
Randomize;
I:=Random(a);
if b>0 then 
begin
Randomize;
Result:=I+(Random(Power(10,b))/Power(10,b));
end 
else 
Result:=I;
end;
Учись, студент!
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 17.08.2015, 17:22   #7
ostnod
 
Регистрация: 25.05.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
cells[i,j]:=FloatToStr(a+(b-a)*Random);
Благодарю. Возник вопрос с большим кол-вом чисел после запятых, но я с ним вроде разобрался.

Кому интересно, получилась вот такая загагулина:
PHP код:
var a,bDouble;
lInteger;
begin
l
:=0;
a:=StrToFloat(Edit3.Text);
b:=StrToFloat(Edit4.Text);
l:= Length(edit3.Text)- Pos(',',edit3.Text);
randomize;
with StringGrid1 do
for 
j:=0 to rowcount-do
for 
i:=0 to colcount-do
cells[i,j]:=FloatToStrF(a+(b-a)*Random,ffFixed,5,l); 
ostnod вне форума Ответить с цитированием
Старый 17.08.2015, 17:40   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Учись, студент!
рановато тебе ещё студентов учить. даже про randomize() не в курсе.
учись, школота!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рандомное заполнение стринггрид toha_master Общие вопросы Delphi 4 19.10.2012 00:43
Рандомное заполнение MaxiCool Помощь студентам 1 15.04.2011 18:04
рандомное заполнение массивов. Repac123456 Помощь студентам 8 24.11.2010 03:06
Рандомное заполнение массива и стринггрида Repac123456 Помощь студентам 5 09.11.2010 00:29
Рандомное заполнение массива ac1d_buRn Помощь студентам 15 03.05.2010 09:14