Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 9 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 05.01.2004
Откуда: Москва
Подскажите алгоритм, для произвольного рандома знака числа!


Последний раз редактировалось Boris 03.09.2005 15:48, всего редактировалось 2 раз(а).


Партнер
 

Advanced member
Статус: Не в сети
Регистрация: 24.02.2003
Откуда: [Kiev, Ukraine]
Boris
обратись в форум Программирование :)

Добавлено спустя 45 секунд:
http://forums.overclockers.ru/viewforum.php?f=28


 

Boris
Генеришь число (rand).
Если оно < (RAND_MAX + 1)/2, то знак один (например +), если нет то другой.

Код:
char z = ( rand() < (RAND_MAX + 1)/2 ) ? '+' : '-';


 

Member
Статус: Не в сети
Регистрация: 08.03.2004
Откуда: Москва
а не проще sgn(rand(2)-1)?

_________________
Software is like a sex, it is better when it is free


 

Member
Статус: Не в сети
Регистрация: 05.01.2004
Откуда: Москва
Ребят, вот как я пробовал!

Я созда функцию:
Код:
int randm(int x)
{
   return (rand()%x);
}


И потом писал следующее.
Код:
 
i=(randm(2)-1);


но почемуто генерится одно и тоже число, причем отрицательное, если комп перезагрузить, то может генериться толко положительное число!


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
Boris
рандомайз кто будет делать? под этим подразумевается вызов функции инициализации генератора случ. чисел
в сях правильная программа будет выглядет вроде
Код:
/* 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>

void 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
", rand() );
}

взято из МСДН

Добавлено спустя 4 минуты, 12 секунд:
PS:
Цитата:
i=(randm(2)-1);

в таком случае randm возвращает только 0 и 1. Нуль и единица после вычитания из них единицы дают -1 и 0 соответственно. Способ хороший, но имеет недостаток: 0%0-1=0-1=-1, т.е. ноль получается отрицательным, хотя он 'никакой'

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Member
Статус: Не в сети
Регистрация: 05.01.2004
Откуда: Москва
что за функция
Код:
srand()

???
Что она делает?


 

Member
Статус: Не в сети
Регистрация: 08.03.2004
Откуда: Москва
Root писал(а):
Цитата: i=(randm(2)-1);

в таком случае randm возвращает только 0 и 1. Нуль и единица после вычитания из них единицы дают -1 и 0 соответственно. Способ хороший, но имеет недостаток: 0%0-1=0-1=-1, т.е. ноль получается отрицательным, хотя он 'никакой'

это с чего вдруг? округление чтоль автоматом? Если рендом от 2, то он должен по идее вернуть что угодно 0:2, если больше 1 то + если меньше, то -

_________________
Software is like a sex, it is better when it is free


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
Boris
это установка ГСЧ ;) Чтобы значения всегда были разными. Если ее не вызывать, то значения, выдаваемые рандомом будут одинаковыми...
Под Борланд Си - randomize
BaBL
Цитата:
randSee Also
Floating-Point Support Routines | srand
Requirements
Routine Required header Compatibility
rand <stdlib.h> ANSI, Win 98, Win Me, Win NT, Win 2000, Win XP

For additional compatibility information, see Compatibility in the Introduction.

Libraries

All versions of the C run-time libraries.
Generates a pseudorandom number.

int rand( void );
Return Value
rand returns a pseudorandom number, as described above. There is no error return.

Remarks
The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand.

усе ясно?
Цитата:
это с чего вдруг? округление чтоль автоматом? Если рендом от 2, то он должен по идее вернуть что угодно 0:2, если больше 1 то + если меньше, то -

% = остаток от деления. x%2 дает либо 0, либо 1. По крайней мере при неотрицательном x

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 9 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan