Страница 1 из 2
Random
Добавлено: 21 янв 2006, 20:25
constab
Как заставить при помощи команды Random выводить случайные числа в диапазоне.
Диапазон в принципе не важен.
Числа получаются случайные если выывать random несколько раз подрят.
Неужели нельзя сделать чтобы всегда независимо от количества вызовов random-а выводились разные числа.
Добавлено: 21 янв 2006, 20:36
Gnida
Если я понял правильно то
cat /dev/urandom и дергаем мышкой
Добавлено: 21 янв 2006, 22:01
exe
constab, Что за команда? в шелле или языке программирования?
если в C, то используй srandom()/srand для установки начального
значения псевдо-генератора.
Самый распространенный способ - srand(time());
Добавлено: 22 янв 2006, 15:10
constab
exe, да это все те злостные времена программирования на Delphi под Windows.
Там было все просто:
randomize;
random(10);
И получаешь случайное число от 0 до 9.
Да srand вещь!
Только вот у меня два вопроса:
1) Есть ли в си функция microtime, так как time обнавляет свое значение очень редко.
2) Что-то у меня не получается передать значение рандома от одой функции к другой
Код: Выделить всё
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
int rnd(int max);
int main(){
int i;
for(i=1;i<10;i++){
rnd(i);
printf("%d\n",rnd);
}
}
int rnd(int max){
int x;
srand(time(NULL));
x=rand()%max;
printf("%d\t", x);
return x;
}
И вот что получается на выходе...
Код: Выделить всё
[constab@localhost qwe]$ cc q.c
[constab@localhost qwe]$ ./a.out
0 134513761
0 134513761
2 134513761
0 134513761
4 134513761
2 134513761
1 134513761
0 134513761
5 134513761
[constab@localhost qwe]$
Добавлено: 22 янв 2006, 16:52
michael
Не извращайся. Инициализация генератора srand(time(NULL)) делается только один раз, а не перед каждым вызовом rand. Если тебе нужны более случайные числа, делай как говорит Gnida.
Добавлено: 22 янв 2006, 23:12
bazil
Опять. Что вы пишите!? Кому и зачем это надо. Как вы пишите?
Код: Выделить всё
int rnd(int max){
int x;
srand(time(NULL));
x=rand()%max;
return x;
}
int main(){
int i;
for(i=1;i<10;i++)
printf("%d\n",rnd(i));
}
Опять же это не юникс вэй
Добавлено: 25 янв 2006, 15:21
constab
Да, мне аж самому стало не приятно, когда увидел, что за бред я написал
Добавлено: 26 янв 2006, 04:46
red f0x
Может так?
Код: Выделить всё
static int __rnd (int rmax)
{
return (rand () % rmax) + 1;
}
int rnd (int rmax )
{
return (__rnd (rmax) + __rnd (rmax) + __rnd (rmax) + __rnd (rmax) +
__rnd (rmax) + __rnd (rmax) + __rnd (rmax) + __rnd (rmax) ) / 8;
}
Без маниакального srand()
Добавлено: 26 янв 2006, 12:44
constab
red f0x, насколько я понимаю если воспользоваться твоим методом, то при вызове программы в первый раз, во воторй или в третий раз рандом будет получаться один и тот же...
Или я ошибаюсь??
Добавлено: 26 янв 2006, 12:48
constab
Вопос не потеме...
Есть программа, которая создает файл например в каталоге /etc, и доступ для записи имеет только root...
Как мне сделать, что бы эта программа работала от правов root, что бы обычный пользователь мог воспользоваться этой программой?
Добавлено: 26 янв 2006, 12:57
Llama
man sudo
man chmod
Добавлено: 26 янв 2006, 14:31
red f0x
constab, srand () вызывать надо, но только
один раз - где-то в main (), например, а не при каждом вызове rnd ().
Зачем реинициялизировать генератор случайных чисел каждый раз, когда нужно псевдослучайное число?
Добавлено: 26 янв 2006, 14:42
constab
Llama, При использовании sudo, пользователь должен вводить пароль...
chmod выставляю, что принадлежит руту и разрешаю выполнение программы другим пользователям, но кроме root никто не может создать файл
Добавлено: 26 янв 2006, 15:05
Llama
constab, пользователь не обязательно дожен вводить пароль при использовании sudo, man sudoers
А по вайшей проблеме - chmod +s возможно будет достаточно...
Добавлено: 26 янв 2006, 17:38
michael
constab, если тебе нужна такая программа, значит ты что-то делаешь не так:) Опиши проблему подробно, может у неё есть более другое решение?