IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> функция Rondom, помогите разобраться
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Евгения

Репутация: -  0  +


Сразу говорю, я пользовалась поиском и все прочла, но есть такие вопросы:
вот фрагмент задачи:
begin
clrscr;
randomize;
sum:=0;
for i:=1 to n do begin
a[i]:=random*100;
if random(100)<50 then a[i]:=a[i]*-1;
write(a[i] :4 :2,' ');
В этом фрагменте заполняется массив вещественными, положительными и отрицательными числами.
Мне не понятно, почему пишется Random*100 без скобок(в принципе, то что без скобок это понятно, т.к вещественные числа) и и почему со знаком * (умножить)?
Как еще можно показывать диапозон генерации случайных чисел в функции Random?
немогли бы вы привести примеры ,как это делать с вещественными и целыми числами ,какие еще есть варианты, какие можно применять знаки, и как все это понять, что он будет конкретно делать, т.е с какого диапозона брать числа и какие?
И еще, (по фрагменту задачи) можно ли подругому, но тоже с rondom, заполнить массив из n вещественных элементов, чтоб были положительные и отрицательные элементы?
Спасибо за помощь.

Пожалуйста, используй теги.
Выдели программу блоком и выбери нужный тип кода в выпадающем меню над мессаджем


Сообщение отредактировано: lapp -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
не понятно, почему пишется Random*100 без скобок(в принципе, то что без скобок это понятно, т.к вещественные числа) и и почему со знаком * (умножить)?
Дело-то все в том, что Random имеет 2 формы записи, как ты правильно заметила. Первая, без параметра, возвращает случайное вещественное число X
(0 <= X < 1)
а вторая (с параметром) - целое число в интервале 0 <= X < {параметр}

Здесь - первый вариант... Но: допустим, задача - получить вещественные случайные числа в интервале 0<=X<100. Что делаем? Правильно, раз простой Random выдает до единицы, то Random*100 выдаст до 100 smile.gif

Цитата
можно ли подругому, но тоже с rondom, заполнить массив из n вещественных элементов, чтоб были положительные и отрицательные элементы?
Можно... Вот так, например:

const
range_start = -50;
range_finish = 50;
...
randomize;
for i := 1 to n do begin

a[i] := random * (range_finish - range_start) + range_start;

end;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Евгения

Репутация: -  0  +


a[i]:=random*100;

эта строка заполняе массив вещественными элементами, но положительными, так?

if random(100)<50 then a[i]:=a[i]*-1;

А эта строка, что переделывает их в отрицательные? Если это так, то какие из этих чисел будут отрицццательными? И почему здесь уже Random стоит со скобками.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
эта строка заполняе массив вещественными элементами, но положительными, так?
yes2.gif

Цитата
А эта строка, что переделывает их в отрицательные?
yes2.gif

Цитата
Если это так, то какие из этих чисел будут отрицццательными?
Случайно выбранные... Вызывается вторая (целочисленная) форма Random, генерирующая случайное число в интервале 0 .. 99

С какой вероятностью это число будет < 50? Вот точно с такой же вероятностью полученное ранее вещественное число будет преобразовано в отрицательное...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Евгения

Репутация: -  0  +


Цитата(volvo @ 16.11.2006 0:00) *

yes2.gif

yes2.gif

Случайно выбранные... Вызывается вторая (целочисленная) форма Random, генерирующая случайное число в интервале 0 .. 99

С какой вероятностью это число будет < 50? Вот точно с такой же вероятностью полученное ранее вещественное число будет преобразовано в отрицательное...



а можно поподробнее, если не трудно, я думала, что все числа, которые меньше 50, станут отрицательными, но это получается не так, так какие же именно будут отрицательными? как он их выбирае, наугад?



Есть еще одна проблемма. Какая из этих так называемых формул правильная:
random от start до finish (начало интервала и конец интервала) - random (finish - start +1) +start или
random (finish - start ) +start ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
так какие же именно будут отрицательными? как он их выбирае, наугад?
Читаем внимательно!!! Я же написал, что СГЕНЕРИРОВАННОЕ вещественное число станет отрицательным с той же вероятностью, с какой результат Random(100) будет меньше 50, то есть, компилятор сгенерирует ЕЩЕ ОДНО (на этот раз целое) число от 0 до 99 , и проверит его на "< 50". В случае если оно меньше, у РАНЕЕ сгенерированного и находящегося уже в массиве вещественного числа будет изменен знак...

Цитата
Какая из этих так называемых формул правильная:
Во-первых, почему "так называемых"? А во-вторых, вот эта:
random(finish - start +1) + start;
!!!
не путать с
Цитата
random * (range_finish - range_start) + range_start
!!!

Это совершенно разные вещи!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Евгения

Репутация: -  0  +


фуу, ну наконец- то понятно, приогромнейшее тебе МЕГАспасибо за разжевывание и терпение!!!


1. random(finish - start +1) + start;
2. random * (range_finish - range_start) + range_start

И еще немного: А в чем состоит разница между этими формулами?
что значит range_start и range_finish ?

Сообщение отредактировано: jenka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(jenka @ 16.11.2006 2:54) *

И еще немного: А в чем состоит разница между этими формулами?
что значит range_start и range_finish ?

Разница между какими формулами? Напиши точно, плз.

range_start - это начало диапазона
range_finish - конец диапазона


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


-
****

Группа: Пользователи
Сообщений: 480
Пол: Мужской

Репутация: -  4  +


1 генерит целое число, а 2 вещественное.


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






У меня похожий вопрос. Как можно с помощью Random задать массив в диапозоне от (-10;10)?
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 3:49
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name