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

Задача с генерацией рандомных чисел в цикле (FOR) - C++

Восстановить пароль Регистрация
 
hunter2014
0 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 14
15.04.2014, 13:51     Задача с генерацией рандомных чисел в цикле (FOR) #1
Даны две последовательности целых чисел a1, a2, …an и b1, b2, …bn Все члены последовательностей - различные числа. Найти, сколько членов первой последовательности совпадают с членами второй последовательности.
<hr />
Он генерирует 2 случайных числа и повторяет их, а мне нужно чтобы все были разные.
<hr />
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
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
setlocale(0,"Rus");
int c,f;
    cout<<"Введите количество пар: ";
cin>>f;
    cout<<"Введите максимальное число: ";
cin>>c;
int *a = new int[c];
for(int i=0; i<f; i++)
{
    srand(time(NULL));
    int q=rand()%c, w=rand()%c;
    cout<<"1-e: "<<w<<" 2-e: "<<q<<" "<<endl;
}
delete []a;
system("pause>>void");
return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2014, 13:51     Задача с генерацией рандомных чисел в цикле (FOR)
Посмотрите здесь:

Проблемка с генерацией случайных чисел C++
трабл с генерацией псевдослучайных чисел C++
Вывод нескольких рандомных чисел из массива C++
C++ Ввод рандомных чисел в линейный массив.
Промежуток рандомных чисел C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KrekerOK
 Аватар для KrekerOK
57 / 57 / 15
Регистрация: 04.07.2013
Сообщений: 512
Завершенные тесты: 1
15.04.2014, 13:58     Задача с генерацией рандомных чисел в цикле (FOR) #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Проблема в том, что вы задаёте srand(time(NULL)), а потом почти одновременно генерируете числа - естественно они будут одинаковыми, нужно менять параметр для srand - для каждого числа разный.
hommiusx
1 / 1 / 0
Регистрация: 15.04.2014
Сообщений: 9
15.04.2014, 15:31     Задача с генерацией рандомных чисел в цикле (FOR) #3
Чтобы все работало как нужно, достаточно функцию srand вызывать не в теле цикла, а до него.
Вот так, например:
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
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    setlocale(0, "Rus");
    int c, f;
    cout << "Введите количество пар: ";
    cin >> f;
    cout << "Введите максимальное число: ";
    cin >> c;
    int *a = new int[c];
    srand(time(NULL));
    for (int i = 0; i<f; i++)
    {
        int q = rand() % c, w = rand() % c;
        cout << "1-e: " << w << " 2-e: " << q << " " << endl;
    }
    delete[]a;
    system("pause>>void");
    return 0;
}
Добавлено через 12 минут
Цитата Сообщение от KrekerOK Посмотреть сообщение
нужно менять параметр для srand - для каждого числа разный.
Зачем? оО
srand используется для задания исходного числа для генерируемой последовательности(в данном случае, это time(NULL) - календарное время в секундах). Один раз его задали и хватит.
KrekerOK
 Аватар для KrekerOK
57 / 57 / 15
Регистрация: 04.07.2013
Сообщений: 512
Завершенные тесты: 1
15.04.2014, 15:33     Задача с генерацией рандомных чисел в цикле (FOR) #4
Может Вы и правы, ошибся.
UserAK
70 / 70 / 4
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
15.04.2014, 15:43     Задача с генерацией рандомных чисел в цикле (FOR) #5
void srand (unsigned int seed);
srand это функция seed random generator
задаёт значение для генератора случайных чисел, а дальше генератор уже сам выдаёт случайные числа.
это как закваска один раз добавил дрожжей и оно уже там само бродит
KrekerOK
 Аватар для KrekerOK
57 / 57 / 15
Регистрация: 04.07.2013
Сообщений: 512
Завершенные тесты: 1
15.04.2014, 15:48     Задача с генерацией рандомных чисел в цикле (FOR) #6
Я знаю это. Просто мысли немного по-путались. Бывает...
hunter2014
0 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 14
15.04.2014, 19:12  [ТС]     Задача с генерацией рандомных чисел в цикле (FOR) #7
Совет крекерка мне помог очень, я подставил i вместо time(NULL) в srand(time(NULL));
Теперь все работает, спасибо) теперь можете помочь со второй частью задачи?))
KrekerOK
 Аватар для KrekerOK
57 / 57 / 15
Регистрация: 04.07.2013
Сообщений: 512
Завершенные тесты: 1
15.04.2014, 19:16     Задача с генерацией рандомных чисел в цикле (FOR) #8
Самый элементарный способ - 2 цикла, первый проходит по элементах 1-го массива, второй(вложенный) - по второму массиву, и проверяете себе количество совпадений.
hommiusx
1 / 1 / 0
Регистрация: 15.04.2014
Сообщений: 9
15.04.2014, 22:08     Задача с генерацией рандомных чисел в цикле (FOR) #9
Цитата Сообщение от hunter2014 Посмотреть сообщение
Совет крекерка мне помог очень, я подставил i вместо time(NULL) в srand(time(NULL));
Штука в том, что теперь при каждом запуске программы, при одинаковых входных данных будут генерироваться одинаковые "случайные" числа. Хотя мб это и устраивает.
KrekerOK
 Аватар для KrekerOK
57 / 57 / 15
Регистрация: 04.07.2013
Сообщений: 512
Завершенные тесты: 1
15.04.2014, 22:16     Задача с генерацией рандомных чисел в цикле (FOR) #10
Ну можно например подставлять не i, а текущую дату, или ещё что-то, тогда будут действительно разные числа.
hommiusx
1 / 1 / 0
Регистрация: 15.04.2014
Сообщений: 9
15.04.2014, 22:16     Задача с генерацией рандомных чисел в цикле (FOR) #11
Цитата Сообщение от KrekerOK Посмотреть сообщение
Ну можно например подставлять не i, а текущую дату, или ещё что-то, тогда будут действительно разные числа.
Цитата Сообщение от hommiusx Посмотреть сообщение
Чтобы все работало как нужно, достаточно функцию srand вызывать не в теле цикла, а до него.
Зачем извращаться то.
KrekerOK
 Аватар для KrekerOK
57 / 57 / 15
Регистрация: 04.07.2013
Сообщений: 512
Завершенные тесты: 1
15.04.2014, 22:30     Задача с генерацией рандомных чисел в цикле (FOR) #12
Ну почему же извращаться? У меня например есть опыт(правда это на C# - но разницы нет), когда рандом созданный с параметром NULL(0) почти всегда генерировал одинаковые значение, а всё потому что программа была много поточной, так что нужно внимательно разобраться что к чему и какой результат нужен.
hommiusx
1 / 1 / 0
Регистрация: 15.04.2014
Сообщений: 9
15.04.2014, 22:52     Задача с генерацией рандомных чисел в цикле (FOR) #13
Цитата Сообщение от KrekerOK Посмотреть сообщение
когда рандом созданный с параметром NULL(0) почти всегда генерировал одинаковые значение, а всё потому что программа была много поточной, так что нужно внимательно разобраться что к чему и какой результат нужен.
В примере, который дал ТС, никакой многопоточностью даже не пахнет, нужно просто сгенерировать разные числа — для этого достаточно вызвать srand(time(NULL)) один раз.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2014, 22:55     Задача с генерацией рандомных чисел в цикле (FOR)
Еще ссылки по теме:

Генератор рандомных чисел! Заполнение массива C++
Генератор рандомных чисел C++
генерация рандомных чисел в диапазоне C++

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

Или воспользуйтесь поиском по форуму:
KrekerOK
 Аватар для KrekerOK
57 / 57 / 15
Регистрация: 04.07.2013
Сообщений: 512
Завершенные тесты: 1
15.04.2014, 22:55     Задача с генерацией рандомных чисел в цикле (FOR) #14
я понимаю что тут не пахнет, но я думаю если я это подметил, человеку от этого хуже не будет, наоборот даже, полезно знать.
Yandex
Объявления
15.04.2014, 22:55     Задача с генерацией рандомных чисел в цикле (FOR)
Ответ Создать тему
Опции темы

Текущее время: 18:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru