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

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

Войти
Регистрация
Восстановить пароль
 
Molotoff
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
#1

Проблемка с генерацией случайных чисел - C++

22.08.2009, 15:25. Просмотров 916. Ответов 16
Метки нет (Все метки)

Доброго дня, уважаемые форумчане
Имею нижеследующий код
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
for(int i_o = 0; i_o < init_arr[2]; i_o++) 
//for(int i_o = 0; i_o < 1; i_o++) 
{
    for(int i=0; i<n; i++) {sel_arr[i] = true;}
    f_rep = 0; s_rep = 0;
    for(int i=0; i<n; i+=2)
    {
 
 
        Selection(sel_arr, n, f_rep, s_rep, init_arr[10]);
        cout << f_rep << " " << s_rep << endl;
             }
}
 
inline void Selection(bool* arr2, unsigned int dim1, unsigned int& f_rep, unsigned int& s_rep, int param){
int i, j, q;
 
    switch(param)
    {
        
    case 1:
        srand((unsigned)time( NULL ) );
            for(i=0; i<2; i++){
                do
                {
                    q = rand()%(dim1); 
                }
                while(arr2[q]==false);
                if(i==0){
                    f_rep = q;
                    arr2[q] = false;}
                else
                {s_rep = q;
                    arr2[q] = false;
                }
                //
            }
        break;
    }
}
Столкнулся с такой проблемкой - ф-я Selection выбирает пары из массива случайным образом и выводит номера этих пар - они потом используются в дальнейшем.
Так вот эти последовательности в рамках цикла i_o повторяются с определенным интервалом. Например
2 3
1 5
0 4

2 3
1 5
0 4

2 3
1 5
0 4

5 1
3 0
2 4

5 1
3 0
2 4

5 1
3 0
2 4


Никак не могу понять в чем причина такой ситуации - может из-за srand((unsigned)time( NULL ) )?
Вообщем об это сломал себе моск, подскажите что не так.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2009, 15:25     Проблемка с генерацией случайных чисел
Посмотрите здесь:

трабл с генерацией псевдослучайных чисел - C++
вот нашел на форумепрогу : #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; int gen_random( int range_min, int...

Генерацией массива чисел циклом - C++
Нужно сгенерировать 10 разных значений, не равных переменной First Я не придумал ничего лучше (случайные значения записываются в массив) ...

Задача с генерацией рандомных чисел в цикле (FOR) - C++
Даны две последовательности целых чисел a1, a2, …an и b1, b2, …bn Все члены последовательностей - различные числа. Найти, сколько членов...

Генерирование случайных чисел и выборка значения из этих чисел - C++
Здравствуйте, помогите решить задачку. Нужно случайным образом сгенерировать числа от 0..9, 100 раз. Затем из генерированных чисел...

Форматирование файла целых чисел, полученных с помощью датчика случайных чисел, нахождение контрольной суммы - C++
Помогите пожалуйста решить, и распишите каждую строчку (т.е что тут сделано) Составить программу, которая: -Форматирует файл целых...

Составить программу, которая формирует файл целых чисел, получаемых с помощью датчика случайных чисел - C++
Блин, братва!!!!=) Последняя работа в этом году, а сдать нужно до субботы, помогите пожалуйста!!!! Задание 1. Составить...

Хочу написать собственный простенький 3d движок с генерацией карты - C++
Я студент 4-го курса. Для защиты диплома нужно написать простенький, но свой 3d движок с генерацией карты. думаю написать на плюсах и...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,354
22.08.2009, 15:33     Проблемка с генерацией случайных чисел #2
Разумеется, из-за него
Ты просто при каждом вызове своей функции Selection заново инициализируешь ГСЧ. А на самом деле, инициализировать его нужно только один раз при старте программы - например, можешь сделать это первой же строкой в main(), ну или где тебе будет удобно, но - один! раз.
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
23.08.2009, 23:10     Проблемка с генерацией случайных чисел #3
Прочитай наконец-то http://www.cyberforum.ru/cpp-beginners/thread44753.html
Molotoff
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
24.08.2009, 10:51  [ТС]     Проблемка с генерацией случайных чисел #4
читал, только там не было сказано, что srand((unsigned)time( NULL ) ) нужно только один раз объявлять
теперь разобрался
по пути вопрос задам
опять же код:
C++
1
2
3
4
5
6
7
8
9
char ans[2];
 
do
{
CharToOemA("Еще раз? (y/n): ",str);
    cout << str << endl;    
             cin.getline(ans,2);
    cout << ans;
} while(ans[0]!='y' || ans[0]!='n');
не хочет работать, т.е. в цикле выводит вводимый ответ, а по введенному "y" или "n" не выходит из цикла, в чем причина?
mirso
524 / 342 / 17
Регистрация: 05.04.2009
Сообщений: 709
24.08.2009, 11:17     Проблемка с генерацией случайных чисел #5
Molotoff,
C++
1
while(ans[0] != 'n');
Lunatik
2 / 2 / 0
Регистрация: 29.05.2009
Сообщений: 20
24.08.2009, 11:46     Проблемка с генерацией случайных чисел #6
Измени || на && и все будет ок.
Molotoff
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
24.08.2009, 11:54  [ТС]     Проблемка с генерацией случайных чисел #7
точно, спасибо
Evg
Эксперт CАвтор FAQ
17473 / 5711 / 364
Регистрация: 30.03.2009
Сообщений: 15,683
Записей в блоге: 26
26.08.2009, 20:18     Проблемка с генерацией случайных чисел #8
Возьми за привычку читать warning'и компилятора. Поту как любой уважающий себя компилятор выдаст предупреждение на эту конструкцию, потому как результат логического выражения всегда равен true
C
1
while(ans[0]!='y' || ans[0]!='n')
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
26.08.2009, 20:24     Проблемка с генерацией случайных чисел #9
Возьми за привычку читать warning'и компилятора.
Не - лучше включить опцию - трактовать все warnings as errors.
Тут все и выплывет
Evg
Эксперт CАвтор FAQ
17473 / 5711 / 364
Регистрация: 30.03.2009
Сообщений: 15,683
Записей в блоге: 26
26.08.2009, 20:28     Проблемка с генерацией случайных чисел #10
Цитата Сообщение от odip Посмотреть сообщение
Не - лучше включить опцию - трактовать все warnings as errors.
Тут все и выплывет
С такой опцией временами задалбывает. Напишешь переменную, не успеешь её заиспользовать - и warning "неиспользуемая переменная". При написании небольших программ (выдача компиляции от которых условно занимает меньше экрана) я просто включаю "все предупреждения". Но если программа большая и компилируется долго - тут уже приходится включать "предупреждения как ошибки", ибо глазами за этим уже не уследишь
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
26.08.2009, 20:33     Проблемка с генерацией случайных чисел #11
Новичкам полезно такую опцию включать.
А они пишут небольшие программы.

Насчет включения всех предупреждений.
Если имеется в виду gcc, то там опция -Wall не включает все предупреждения. Все и не нужно - там довольно дурацкие есть.
Что касается Visual Studio 2005 - там есть level warnings. Достаточно включить level 3, потому что на level 4 будут совсем дурацкие предупреждения.
Molotoff
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
27.08.2009, 12:37  [ТС]     Проблемка с генерацией случайных чисел #12
а зачем нам warning`и? мы и при горящем Check engine кататься будем и на сервис не поедем ))
это ж русское авось
у меня тут вопрос небольшого характера - если я вызываю свою функцию
C++
1
inline void Gen_ind(unsigned int **arr, unsigned int dim1, unsigned int dim2, int param)
и передаю туда двумерный массив arr, ну т.е. передаю указатель на массив, могу ли я каким-то образом передать указатель на часть массива, причем не с начала? Чтобы саму функцию не переписывать.
Т.е. грубо говоря из матрицы 5x3 нужно передать строки со второй по пятую например.
Monte-Cristo
2787 / 1373 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
27.08.2009, 12:43     Проблемка с генерацией случайных чисел #13
Цитата Сообщение от Molotoff Посмотреть сообщение
Т.е. грубо говоря из матрицы 5x3 нужно передать строки со второй по пятую например.
Нет. Либо отдельно создать указатель на строки со второй по пятой и передать его. Либо передавать в функции по строчно. (т.е. не матрицу, а строки).
Evg
Эксперт CАвтор FAQ
17473 / 5711 / 364
Регистрация: 30.03.2009
Сообщений: 15,683
Записей в блоге: 26
27.08.2009, 15:31     Проблемка с генерацией случайных чисел #14
Molotoff, через int** в принципе нельзя передавать указатель на духмерный массив. Только через int* с дальнейшей арифметикой ручками (в этом случае можешь передавать на середину массива) либо прямо писать в параметре "int arr[3][5]", но середину массива передавать с точностью до одного измерения (в твоём понятии это "строка")

Добавлено через 1 минуту
Ещё можно вот так:

C
1
void Gen_ind(unsigned int dim1, unsigned int dim2, unsigned int arr[dim1][dim2])
но это уже Си-99 (или что-то типа того) - не все компиляторы это съедят. Но твой первоначальный вариант по своей сути неверен. Так можно передавать только массив указателей, но не двухмерный массив
Monte-Cristo
2787 / 1373 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
27.08.2009, 15:36     Проблемка с генерацией случайных чисел #15
Evg,
Цитата Сообщение от Molotoff Посмотреть сообщение
ну т.е. передаю указатель на массив
Он же написал
Evg
Эксперт CАвтор FAQ
17473 / 5711 / 364
Регистрация: 30.03.2009
Сообщений: 15,683
Записей в блоге: 26
27.08.2009, 16:17     Проблемка с генерацией случайных чисел #16
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
Evg,
Он же написал
Когда человек задаёт такой вопрос, то фраза "указатель на массив" может означать всё, что угодно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2009, 17:37     Проблемка с генерацией случайных чисел
Еще ссылки по теме:

Генерация случайных чисел - C++
Здравствуйте! Мне нужно сгенерировать случайные числа, много и за секунду или быстрей. Можно ли использовать время компьютера с...

последовательность из 10 случайных чисел - C++
Написать программу которая генерирует последовательность из 10 случайных чисел, в диапозоне от 1 до 10. Выводит эти чисола на экран и...

Сгенерировать N^2 случайных чисел... - C++
Помогиет, кто сможет!:help: Сгенерировать N^2 случайных чисел. Выделить в каждом из чисел дробну часть. Найти суммы из первых к цифр...

Генерация случайных чисел - C++
Здравствуйте, появилась такая проблема: при генерации случайного числа функцией rand(); мне нужно сгенерировать 5 случайных чисел, но...

генерация случайных чисел - C++
Написать программу, которая должна обеспечить исчисление количества повторений заданного числа по модулю 100. Характеристика должна быть...


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

Или воспользуйтесь поиском по форуму:
Molotoff
1 / 1 / 0
Регистрация: 21.07.2009
Сообщений: 50
27.08.2009, 17:37  [ТС]     Проблемка с генерацией случайных чисел #17
спасибо, друзья, я все понял думаю просто передать еще параметр - номер строки, с которой начинать работу с данным массивом, так будет проще всего
Yandex
Объявления
27.08.2009, 17:37     Проблемка с генерацией случайных чисел
Ответ Создать тему
Опции темы

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