Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

icq: 406-522-036
По умолчанию

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
Репутация: 10
По умолчанию

Швепс,охренеть,!!! спасибо=)
А 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
Репутация: 10

icq: 406-522-036
По умолчанию

функция 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
Репутация: 10
По умолчанию

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

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

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

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

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

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

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

Цитата:
Сообщение от Хагель Посмотреть сообщение
Функция 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
Репутация: 10
По умолчанию

Цитата:
Сообщение от _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.
Хагель вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


19:50.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru