Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Noxior
3 / 3 / 0
Регистрация: 07.06.2009
Сообщений: 145
#1

просто интересуюсь - C++

23.02.2012, 02:18. Просмотров 453. Ответов 7
Метки нет (Все метки)

1. надо сделать чтобы полностью рандомные числа неповторялись...
srand(time(NULL)) написал.
2. какую сортировку лучше всего использовать? Для будущих программ необходимо все методы знать, или 1 будет достаточно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2012, 02:18     просто интересуюсь
Посмотрите здесь:

просто 2*2 - C++
написать прогу, выводящую элементы массива в порядке возрастания!!! Добавлено через 14 минут Неужели никто не ответит

просто логарифм - C++
Доброго времени суток! Возникла небольшая проблема: как написать функцию log(a,x), вычисляющую логарифм x по основанию a. Это нужно для...

Очень просто(x^3) - C++
А как записать Х в кубе?

Просто посмотрите! - C++
Ув. дамы и госопода просьба к вам которые знают и могут помочь в задачках. Хотелось бы чтоб все были сделаны, но по возможности сколько...

просто так - C++
int onscreen(FILE *f) { setlocale(LC_ALL,"Rus"); system ("cls"); // очистка консоли rewind (f); // перевод указателя в начало файла...

просто вопрос=) - C++
привет всем! кто знает если сюда задачу написать за сколько минут тут могут задачу решить? скоро зачеты хотел узнать((((

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
23.02.2012, 02:38     просто интересуюсь #2
Цитата Сообщение от Noxior Посмотреть сообщение
1. надо сделать чтобы полностью рандомные числа неповторялись...
srand(time(NULL)) написал.
Полностью рандомных чисел не бывают, хороший генератор случайных чисел это не столь простая задача как кажется на первый взгляд. Ну да не думаю что тебе это глубоко интересно, после того как ты засеял генератор случайных чисел от времени числа и так генерируются случайные в заданном тобой диапазоне при использовании rand(), что тебе ещё не нравиться? Если хочешь чтобы при каждом запуске они гарантированно не повторялись то можешь например сохранять их в файле, а при запуске сверяться с файлом что такие числа ещё не выпадали, а если такое число уже было - сгенерировать случайное число ещё раз , только это всё не целесообразно же.

Цитата Сообщение от Noxior Посмотреть сообщение
2. какую сортировку лучше всего использовать? Для будущих программ необходимо все методы знать, или 1 будет достаточно?
На практике лучше всего использовать сортировку из stl, а не свою написанную
Noxior
3 / 3 / 0
Регистрация: 07.06.2009
Сообщений: 145
23.02.2012, 02:47  [ТС]     просто интересуюсь #3
какую именно сортировку?
алгоритмов сортировок из stl много
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6442 / 3081 / 306
Регистрация: 04.12.2011
Сообщений: 8,486
Записей в блоге: 4
23.02.2012, 03:06     просто интересуюсь #4
Цитата Сообщение от Noxior Посмотреть сообщение
1. надо сделать чтобы полностью рандомные числа неповторялись...
srand(time(NULL)) написал.
Полностью согласен с Вами Gepar
Цитата Сообщение от Gepar Посмотреть сообщение
хороший генератор случайных чисел это не столь простая задача
Существует еще такая уловка, когда генератором случайных чисел является пользователь. То есть отслеживаем время следующего нажатия клавиши или клика мыши. Недостаток - необходимость диалога. Преимущество - случайность.
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
23.02.2012, 03:22     просто интересуюсь #5
Чтобы числа не повторялись и вся эта мешанина выглядела буолее или менее перемешаной, тут посмотри
Перемешивание двухмерного массива
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
23.02.2012, 08:24     просто интересуюсь #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/////////////////////////////////////////////////////////////////////////////////////////
//Надо сделать чтобы полностью рандомные числа не повторялись.
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <set>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::set<int>   T_set;
/////////////////////////////////////////////////////////////////////////////////////////
bool  successfully_get_unique_rand
    (         
        int     rand_min,
        int     rand_max,
        int&    res
    )
{
    static T_set    old_results;
    int             rand_numbers_total  =   rand_max - rand_min + 1;
 
    bool            bool_res            =       rand_numbers_total >  0
                                            &&  rand_numbers_total <= RAND_MAX + 1
                                            &&  old_results.size() <  unsigned( rand_numbers_total );
 
    if( bool_res )
    {
        do
        {
            res = rand() % rand_numbers_total + rand_min;
        }while( old_results.count(res) );
 
        old_results.insert(res);
    }
    return  bool_res;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()  
{
    srand(unsigned(time(0)));    
 
    int     rand_min    =   rand() % 10 - rand() % 10;
    int     rand_max    =   rand() % 10 - rand() % 10;
 
    std::cout   <<  "rand_min = "
                <<  rand_min
                <<  std::endl
                <<  "rand_max = "
                <<  rand_max
                <<  std::endl;
    
    int     rand_val    =   0;
    while
        (
            successfully_get_unique_rand
                (                    
                    rand_min,
                    rand_max,
                    rand_val
                )
        )
    {
        std::cout   <<  rand_val
                    <<  std::endl;
    }
}
Russian_Dragon
10 / 11 / 0
Регистрация: 18.02.2012
Сообщений: 140
23.02.2012, 08:43     просто интересуюсь #7
Что-то как-то замудрили.
Не повторяющиеся числа, в пределах одного запуска, сделать очень просто.
Нужна коллекция и итератор.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int maxNumber = 100;// максимальное число
vector<int> vectorNumbers;
vector<int>::iterator p;
 
void FillInVector(){
vectorNumbers.clear();
for(int i = 0; i < maxNumber; i++)
vectorNumbers.push_back(i);
p = vectorNumbers.first();
}
 
//пишем "рандомную" функцию для удобства
int myRand(){
p = vectorNumbers.first();
int r = p + rand()%vectorNumbers.size();
vectorNumbers.remove(p);
if(vectorNumbers.size() == 0) void FillInVector();
return r;
}
Вот и всё.
Суть простая мы случайно извлекаем из коллекции числа, а потом это число удаляем.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2012, 09:09     просто интересуюсь
Еще ссылки по теме:

Просто интересно - C++
#include &lt;iostream&gt; using namespace std; int main() { double z=0; double x=-2; cout&lt;&lt; x*z; system...

Всё просто - C++
Напечатать все простые числа, не провосходящее заданое число М..... вот код #include &lt;iostream&gt; #define N 150 int...

Очень просто - C++
Я понимаю что создавалось много тем с этой проблемой но я не нашел их Просто напишите пожалуста как можно считать количество элементов...

Не проще просто int? - C++
Не проще было бы использовать в 41 строке тип int, вместо определенного в 23-ей BOOL? #include &quot;stdafx.h&quot; #define DEBUG #define...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
diagon
Higher
1928 / 1194 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.02.2012, 09:09     просто интересуюсь #8
Или так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <array>
#include <stdexcept>
 
const int MAX_RAND = 1e5;
 
int unique_rand( int max_rand )
{   
    if ( max_rand > MAX_RAND )
        return -1;
        
    static std::array< bool, MAX_RAND > arr;
    
    int res;    
        
    do
    {
        res = rand() % max_rand;
    } while ( arr[res] == true );
    
    arr[res] = true;
    
    return res;
}
 
int main()
{   
    for (int i = 0; i < 10; ++i)
    {
        std::cout << unique_rand( 10 ) << std::endl;
    }
}
Должно работать быстрее, чем вариант с сортировкой, но будет зацикливание, когда массив полностью заполнится, ну и просто может тормозить, если свободные числа заканчиваются.
Цитата Сообщение от Noxior Посмотреть сообщение
какую именно сортировку?
алгоритмов сортировок из stl много
Две всего.
std::sort и std::stable_sort
Первая быстрее, вторая стабильнее.
Ну и еще есть различные контейнеры вроде set'a и priority_queue, а также nth элемент, но это не совсем сортировка.
Yandex
Объявления
23.02.2012, 09:09     просто интересуюсь
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru