|
|
  |
Изучаю С, короткий и простой вопрос по коду, разбираюсь с ф-й rand |
|
|
|
Sep 6 2008, 20:42
|

Чайник, 1 литр
   
Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168

|
Цитата Use the srand function to seed the pseudorandom-number generator before calling rand. Код // crt_rand.c // This program seeds the random-number generator // with the time, then displays 10 random integers. //
#include <stdlib.h> #include <stdio.h> #include <time.h>
int main( void ) { int i; // Seed the random-number generator with current time so that // the numbers will be different every time we run. // srand( (unsigned)time( NULL ) );
// Display 10 numbers. for( i = 0; i < 10;i++ ) printf( " %6d\n", rand() );
printf("\n");
// Usually, you will want to generate a number in a specific range, // such as 0 to 100, like this: { int RANGE_MIN = 0; int RANGE_MAX = 100; for (i = 0; i < 10; i++ ) { int rand100 = (((double) rand() / (double) RAND_MAX) * RANGE_MAX + RANGE_MIN); printf( " %6d\n", rand100); } } } © MSDN
Сообщение отредактировал SysRq - Sep 6 2008, 20:44
|
|
|
|
|
Sep 6 2008, 20:54
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(SysRq @ Sep 6 2008, 22:42)  Use the srand function to seed the pseudorandom-number generator before calling rand. Неверно расставленные акценты - даже после вызова srand() в одним и тем-же инициализаторм будет получена одна и та-же последовательность. Ключевое слово pseudorandom-number generator. Посему для генерации случайного числа сие не пригодно, без исходного случайного числа  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 7 2008, 17:24
|
Местный
  
Группа: Свой
Сообщений: 381
Регистрация: 27-07-08
Из: теплые края
Пользователь №: 39 233

|
Цитата(Метценгерштейн @ Sep 7 2008, 20:09)  почему вот так работает .... Перечитайте предыдущий ответ. У Вас в первом случае вычисление проихводится в числах с плавающей точкой, так как переменная t объявлена как double (и, соответственно стандарту, число 10000 при вычислении приводится к типу double). Во втором случае у Вас и summa [j] (по коду этого не видно, но я уверен на 99.9999%), и 10000 - целые числа. Поэтому вычисление производится в целых числах. И получившийся результат, как уже было сказано, <1 округляется в 0.
|
|
|
|
|
Sep 7 2008, 18:19
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Метценгерштейн @ Sep 7 2008, 20:09)  В чем тут ошибка моя? Чтобы работало также: printf("%8f", summa [j]/ 10000.0 ); Керниган и Ритчи, раздел 2.7 "преобразования типов".
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|