Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2008, 04:01   #11
Schweppes
 
Аватар для Schweppes
 
Регистрация: 02.08.2008
Сообщений: 6
По умолчанию

2Greblin> сорри, влом искать было. легче самому написать )
2Swool> вот тебе готовый код, который будет работать на всех ANSI-компиляторах (не использует борландовских randomize() и random())
Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SWAP(A,B) {A=A^B;B=A^B;A=A^B;}

int main(void)
{
        int i, j, n;
        int digits[3];          /* здесь мы будем хранить числа */
        int symbols[2];         /* а здесь - коды символов */
        
        srand(time(0));         /* вместо randomize() */

        for(i = 0; i < 3; i++)
                digits[i] = rand() % 9; /* забиваем в массив чисел 3 случайных числа от 0 до 10 */
        for(i = 0; i < 2; i++)
                symbols[i] = rand() % 26 + 65; /* забиваем в массив символов 2 случайные буквы от A до Z */
        
        /* сортируем digits методом пузырька */
        n = 3;
        for(i = n-1 ; i > 0 ; i--) {
                for(j = 0 ; j < i ; j++) {
                        if(digits[j] > digits[j+1])
                                SWAP(digits[j],digits[j+1]);
                }
        }
        
        /* сортируем symbols; здесь чуток попроще, так как всего два элемента */
        if(symbols[1] < symbols[0])
                SWAP(symbols[0], symbols[1]);

        /* выводим все это дело на экран */
        for(i = 0; i < 3; i++)
                printf("%d ", digits[i]);

        printf("-");

        for(i = 0; i < 2; i++)
                printf(" %c", (char)symbols[i]);

        return 0;
}
так как писал ночью, то часть мозга была немного в сбое, посему в код я не встраивал проверку на повторяемость чисел. авось, кто-нибудь еще поможет

Последний раз редактировалось Schweppes; 20.08.2008 в 04:36.
Schweppes вне форума Ответить с цитированием
Старый 20.08.2008, 11:03   #12
Swool
Пользователь
 
Регистрация: 12.07.2008
Сообщений: 39
По умолчанию

Швепс,охренеть,!!! спасибо=)
А srand(time(0)) это я так понял какая-то фугкция времени? или ошибаюсь? просто еще не дошел до этого уровня понимания=))

и зачем надо
Код:
{A=A^B;B=A^B;A=A^B;}
после константы?


вот когда смотрю код...90% понятно, а самому че-то не получается такое писать

Последний раз редактировалось Swool; 20.08.2008 в 11:09.
Swool вне форума Ответить с цитированием
Старый 22.08.2008, 16:02   #13
Schweppes
 
Аватар для Schweppes
 
Регистрация: 02.08.2008
Сообщений: 6
По умолчанию

функция srand(time(0)) - это аналог randomize(), то есть, так сказать, "перетасовщик". если ее убрать, то при каждом запуске программы rand() будет генерировать одинаковые числа.

#define SWAP(A,B) {A=A^B;B=A^B;A=A^B;} - это не константа. это макрос, обменивающий значения переменных A и B. краткое описание макросов: http://www.hostmake.ru/articles/c/247/

а вообще, почитай какую-нибудь умную книжку по Си. я, например, начинал свой кодерский путь с "Программирование на Borland C++" Герберда Шилда, что и другим советую
Schweppes вне форума Ответить с цитированием
Старый 26.08.2008, 09:43   #14
qwerty34
Пользователь
 
Регистрация: 25.08.2008
Сообщений: 10
По умолчанию

Извините ошибочка вышла не там сообщение написал!
qwerty34 вне форума Ответить с цитированием
Старый 30.08.2008, 21:27   #15
odi_noki
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 77
По умолчанию

По поводу рандома: меня лично не совсем устраивает функция srand(time(0));, когда ее используешь, генерируются числа близко друг к другу. Не знаю с чем это связано, randomize в этом смысле гораздо лучше. Может есть какой-то другой прием сброса генератора случайных чисел?
odi_noki вне форума Ответить с цитированием
Старый 27.03.2010, 16:16   #16
Crab2
Пользователь
 
Регистрация: 12.02.2010
Сообщений: 19
По умолчанию

Как в никсе осуществить рандом? функции типа rand srand randomize не работают
random()%n ; работает но с одним маленьким минусом всегда одно и тоже число
Все и сразу-мечта идиота

Последний раз редактировалось Crab2; 27.03.2010 в 16:31.
Crab2 вне форума Ответить с цитированием
Старый 07.02.2012, 12:20   #17
Хагель
 
Регистрация: 01.10.2011
Сообщений: 6
По умолчанию

Функция srand(time(NULL)) возвращает одинаковые числа в течение одной секунды. Есть возможность обращаться к системному времени в миллисекундах?
openSuSE
Хагель вне форума Ответить с цитированием
Старый 07.02.2012, 12:53   #18
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от odi_noki Посмотреть сообщение
По поводу рандома: меня лично не совсем устраивает функция srand(time(0));, когда ее используешь, генерируются числа близко друг к другу. Не знаю с чем это связано, randomize в этом смысле гораздо лучше. Может есть какой-то другой прием сброса генератора случайных чисел?
Тесты показывают идеальное покрытие по всему диапазону случайности
_Bers вне форума Ответить с цитированием
Старый 07.02.2012, 12:54   #19
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Верхний - это стандартный рандом. Нижний - там.. совсем другая поделка.

Цитата:
Сообщение от Хагель Посмотреть сообщение
Функция srand(time(NULL)) возвращает одинаковые числа в течение одной секунды. Есть возможность обращаться к системному времени в миллисекундах?
А её только один раз достаточно вызвать за все время жизни приложения. Её не нужно вызывать 100500 раз за секунду.

Если вы будете вызывать её многократно, то уже никто вам не гарантирует равномерное покрытие по всему диапазону.

Цитата:
Сообщение от Crab2 Посмотреть сообщение
Как в никсе осуществить рандом? функции типа rand srand randomize не работают
random()%n ; работает но с одним маленьким минусом всегда одно и тоже число
Можно предложить, например поюзать какой нибудь буст. Буст знает о случайных числах все!

Можно изготовить рандом самостоятельно. Конгруэнтный сделать можно элементарно)

Последний раз редактировалось _Bers; 07.02.2012 в 13:02.
_Bers вне форума Ответить с цитированием
Старый 07.02.2012, 13:57   #20
Хагель
 
Регистрация: 01.10.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
А её только один раз достаточно вызвать за все время жизни приложения. Её не нужно вызывать 100500 раз за секунду.

Если вы будете вызывать её многократно, то уже никто вам не гарантирует равномерное покрытие по всему диапазону.
Ну то есть:
Код:
int rand_value;
void rand_int(int x)
{
    srand(time(NULL));
    rand_value = 1 + rand()%x;
}
Я вызываю srand в теле функции. Если вынести её наружу, значение rand_value будет неизменно при каждом вызове функции.
* * *
Вопрос снят - нашёл! Если кому-нить понадобится, то вот: http://otvety.google.ru/otvety/threa...cf25e98b70df4a
openSuSE

Последний раз редактировалось Хагель; 07.02.2012 в 14:57.
Хагель вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Random Febreze Общие вопросы Delphi 2 28.04.2008 14:17
random Forrest Gamp Общие вопросы C/C++ 4 11.02.2008 09:46
Random -10 +10 Veiron Общие вопросы Delphi 1 23.01.2008 17:23
Random Constellation БД в Delphi 2 10.01.2008 21:37
random Sanek_ntsk Общие вопросы Delphi 8 17.12.2007 21:54