Random

Все о программировании под *nix
Аватара пользователя
constab
Неотъемлемая часть форума
Сообщения: 241
Зарегистрирован: 17 авг 2004, 11:36
Откуда: Минск
Контактная информация:

Random

Сообщение constab »

Как заставить при помощи команды Random выводить случайные числа в диапазоне.
Диапазон в принципе не важен.
Числа получаются случайные если выывать random несколько раз подрят.
Неужели нельзя сделать чтобы всегда независимо от количества вызовов random-а выводились разные числа.
Хачу крыху паразумнець!

Gnida
Неотъемлемая часть форума
Сообщения: 346
Зарегистрирован: 04 апр 2004, 22:38

Сообщение Gnida »

Если я понял правильно то
cat /dev/urandom и дергаем мышкой

Аватара пользователя
exe
Неотъемлемая часть форума
Сообщения: 860
Зарегистрирован: 28 ноя 2003, 21:08
Откуда: Минск

Сообщение exe »

constab, Что за команда? в шелле или языке программирования?

если в C, то используй srandom()/srand для установки начального
значения псевдо-генератора.

Самый распространенный способ - srand(time());

Аватара пользователя
constab
Неотъемлемая часть форума
Сообщения: 241
Зарегистрирован: 17 авг 2004, 11:36
Откуда: Минск
Контактная информация:

Сообщение 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]$
Хачу крыху паразумнець!

michael
Неотъемлемая часть форума
Сообщения: 434
Зарегистрирован: 12 апр 2004, 11:00
Откуда: г. Владивосток
Контактная информация:

Сообщение michael »

Не извращайся. Инициализация генератора srand(time(NULL)) делается только один раз, а не перед каждым вызовом rand. Если тебе нужны более случайные числа, делай как говорит Gnida.

bazil
Неотъемлемая часть форума
Сообщения: 879
Зарегистрирован: 18 дек 2003, 23:56

Сообщение 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));

} 
Опять же это не юникс вэй
I did a 'zcat /vmlinuz > /dev/audio' and I think I heard God...

Аватара пользователя
constab
Неотъемлемая часть форума
Сообщения: 241
Зарегистрирован: 17 авг 2004, 11:36
Откуда: Минск
Контактная информация:

Сообщение constab »

Да, мне аж самому стало не приятно, когда увидел, что за бред я написал

Код: Выделить всё

      rnd(i);
      printf("%d\n",rnd); 
:shock:
Хачу крыху паразумнець!

Аватара пользователя
red f0x
Неотъемлемая часть форума
Сообщения: 338
Зарегистрирован: 08 мар 2004, 01:41

Сообщение 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() :D
Ну какая работа со строками может быть в языке, название которого является не строкой, а символом? (c) Sergue E. Leontiev

Аватара пользователя
constab
Неотъемлемая часть форума
Сообщения: 241
Зарегистрирован: 17 авг 2004, 11:36
Откуда: Минск
Контактная информация:

Сообщение constab »

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

Или я ошибаюсь??
Хачу крыху паразумнець!

Аватара пользователя
constab
Неотъемлемая часть форума
Сообщения: 241
Зарегистрирован: 17 авг 2004, 11:36
Откуда: Минск
Контактная информация:

Сообщение constab »

Вопос не потеме...

Есть программа, которая создает файл например в каталоге /etc, и доступ для записи имеет только root...

Как мне сделать, что бы эта программа работала от правов root, что бы обычный пользователь мог воспользоваться этой программой?
Хачу крыху паразумнець!

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

man sudo
man chmod
Опыт растет прямо пропорционально выведенному из строя оборудованию

Аватара пользователя
red f0x
Неотъемлемая часть форума
Сообщения: 338
Зарегистрирован: 08 мар 2004, 01:41

Сообщение red f0x »

constab, srand () вызывать надо, но только один раз - где-то в main (), например, а не при каждом вызове rnd ().
Зачем реинициялизировать генератор случайных чисел каждый раз, когда нужно псевдослучайное число? 8)
Ну какая работа со строками может быть в языке, название которого является не строкой, а символом? (c) Sergue E. Leontiev

Аватара пользователя
constab
Неотъемлемая часть форума
Сообщения: 241
Зарегистрирован: 17 авг 2004, 11:36
Откуда: Минск
Контактная информация:

Сообщение constab »

Llama, При использовании sudo, пользователь должен вводить пароль...
chmod выставляю, что принадлежит руту и разрешаю выполнение программы другим пользователям, но кроме root никто не может создать файл :(
Хачу крыху паразумнець!

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

constab, пользователь не обязательно дожен вводить пароль при использовании sudo, man sudoers ;)
А по вайшей проблеме - chmod +s возможно будет достаточно...
Опыт растет прямо пропорционально выведенному из строя оборудованию

michael
Неотъемлемая часть форума
Сообщения: 434
Зарегистрирован: 12 апр 2004, 11:00
Откуда: г. Владивосток
Контактная информация:

Сообщение michael »

constab, если тебе нужна такая программа, значит ты что-то делаешь не так:) Опиши проблему подробно, может у неё есть более другое решение?

Ответить