LINUX.ORG.RU

Re: j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

1) 1 - это число 1, целое
2) + - это операция сложения (в данном случае - целых чисел)
3) (int)(...)  - операция округления выражения ... до целого цисла
4) 10.0 - число 10, тип - double
5) * - операция умножения (в данном случае - действительных чисел)
6) rand() - функция выдающая число от 0 до RAND_MAX
7) / - операция деления
8) RAND_MAX - некая константа, смотри пункт 6)
9) + - смотри пункт 2) (только складываются действительные числа)
10) 1.0 - действительное число 1
11) ; - символ разделения операторов языка Ц
12) - круглые скобки используются для группировки арифметических операций.
 выражения в скобках выполняются раньше, чем остальные.
     Вот, вроде бы и все :)

grustnoe ★★ ()

Re: j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

> 11) ; - символ разделения операторов языка Ц

это где это ты такое вычитал(можешь пристрелить того кто это писал)? не путаешь с паскалем случаем

lg ★★ ()

Re: j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

Браво, grustnoe, смеялся от души! lg, позор. c не знаешь.

anonymous ()

Re: j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

нет, я не понял, почему здесь генерируется число от 1 до 10

anonymous ()

Re: j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

Извините, lg, ошибся. ";" действительно завершает оператор, а не является разделителем.

anonymous ()

Re: j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

А по поводу "почему от 1 до 10":
Как уже было отмечено rand() выдает псевдослучайное число от 0 до RAND_MAX.
Это значит, что rand()/(RAND_MAX+1.0) выдает число от 0 до 1 (не включая 1)
10.0*rand()/(RAND_MAX+1.0)) выдает, соответственно, от 0 до 10 (не включая 10)
(int) (10.0*rand()/(RAND_MAX+1.0)) генерирует целые числа в интервале 0-9 (10 быть не может, потому что исходный интервал 10 не включал)
1+(int) (10.0*rand()/(RAND_MAX+1.0)) - интервал становится от 1 до 10.

anonymous ()

Re: j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

> ";" действительно завершает оператор, а не является разделителем

; - не завершает оператор, а говорит о том что некая синтаксическая 
конструкция является на самом деле оператором

в C {} является оператором - но не завершается точкой с запятой, 
например для конструкции for(...) обязателен оператор в теле, поэтому 
совершенно нормально написать:

for(;;)
  ;   /* пустой оператор */

или

for (;;) {} /* нету точки с запятой а оператор есть */

ты конечно можешь написать:

for (;;) {
};          /* точка с запятой в конце */

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

поэтому твой тезис можно перефразировать так - '";" действительно 
завершает большинство но не все операторы, а не является разделителем'

lg ★★ ()

Re: j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

Вот блин гении :-))) в Паскале тоже тогда ; не является разделителем операторов...

anonymous ()

Re: j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

все просто, ";" это терминатор:)

anonymous ()

Re: j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

блин, но почему этот код выдает разные числа только раз, пример :

запуск 1 : 8 9 5 3 8 0 6 4 1 запуск 2 : 8 9 5 3 8 0 6 4 1

anonymous ()

Re: j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

> блин, но почему этот код выдает разные числа только раз
перед циклом генерации последовательности вставить srand(time(NULL));


а так не проще:

j = rand() % 10 + 1; /* псевдослучайное целое число от 1 до 10

anonymous ()

Re: j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

ну а какие же он должен выдавать - rand() это же просто функция она не может читать мысли и менять random seed после их прочтения

lg ★★ ()

Re: j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

как говориться программа всегда делает то что ты написал, но не всегда то что ты ожидаешь :)

lg ★★ ()

Re: j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

rand() - генерирует псевдослучайные числа. Есди хочешь чего-то более нормального читай из /dev/random и /dev/urandom

OxiD ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.