| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Проблема с прогой |
| Автор: Syrex 28.2.2006, 15:19 |
| #include <stdio.h> #include <conio.h> #include <stdlib.h> double vozd() { double s=0; for(int i=0;i<=11;i++) { s=s+0.04165*(-0.5+((double)rand()/(double)RAND_MAX)); } return s; } int main() { char c=0; clrscr(); while(c!=10) { printf("Vozd=%f\n",vozd());//выдает всегда одинаковые значения при перезапуске проги c++; } getch(); return 0; } |
| Автор: comcon1 28.2.2006, 15:22 |
| Естественно. Генератор случайных чисел нужно инициализировать числовым значением. Чтобы оно менялось - инициализируй от времени. Если у тебя POSIX-компилятор - используй rand48, он там частенько есть. Если у тебя LINUX - читай из /dev/random - там генератор случайностей, инициализированный от флуктуаций температуры процессора. Ах, забыл написать, в простом случае инициализация srand(int seed) |
| Автор: Dov 28.2.2006, 15:41 | ||
|
| Автор: Syrex 28.2.2006, 15:50 | ||
Ну допустим я поставлю
ВСЕ РАВНО ВЫВОДИТ (-0,25) ВО ВСЕХ 10 ЦИКЛАХ |
| Автор: Dov 28.2.2006, 16:02 |
| Запустил 2 раза подряд, вот результаты: Vozd=-0.019900 Vozd=-0.017569 Vozd=-0.000719 Vozd=0.000943 Vozd=0.008708 Vozd=-0.014246 Vozd=-0.046480 Vozd=0.016029 Vozd=-0.025492 Vozd=0.089039 Press any key to continue Vozd=0.002602 Vozd=-0.066045 Vozd=-0.022252 Vozd=0.068616 Vozd=0.048177 Vozd=0.006608 Vozd=-0.030189 Vozd=0.030809 Vozd=0.066176 Vozd=0.052914 Press any key to continue |
| Автор: Syrex 28.2.2006, 16:13 | ||
Компилю в Борланд С++ 5.02 код:
И получаю на выходе: Vozd=-0.250000 Vozd=-0.250000 Vozd=-0.250000 Vozd=-0.250000 Vozd=-0.250000 Vozd=-0.250000 Vozd=-0.250000 Vozd=-0.250000 Vozd=-0.250000 Vozd=-0.250000 |
| Автор: comcon1 28.2.2006, 16:17 | ||
rand()/RAND_MAX все время будет давать 0. Сделай так:
и скажи, че получилось. Потому что rand() выдает int. Хочешь дробные - юзай лучше random() и srandom(). |
| Автор: Dov 28.2.2006, 16:19 | ||
так сделай
|
| Автор: Syrex 28.2.2006, 16:20 |
| Спасибо - comcon1теперь все заработало. А зачем тут Double?? |
| Автор: comcon1 28.2.2006, 16:25 |
| Потому что оператор "/" для чисел int и int делает деление с округлением в меньшую сторону. Дальше сам додумаешься. |
| Автор: Syrex 28.2.2006, 16:31 |
| АГА. Огромное тебе спс за помошь! |
| Автор: comcon1 28.2.2006, 16:37 |
| |
| Автор: Syrex 28.2.2006, 17:36 |
| А как закрыть?? Просто написать тема закрыта Модератор: У тебя как автора темы должна быть ссылка "пометить как решенный" над быстрым ответом. Это на будущее. Тему закрыла. |