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

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

Войти
Регистрация
Восстановить пароль
 
Slimmy
65 / 18 / 2
Регистрация: 09.10.2010
Сообщений: 97
#1

Вопрос по генерации случайного числа. - C++

22.10.2010, 21:51. Просмотров 800. Ответов 9
Метки нет (Все метки)

Здрасьте еще раз!
На этот раз я никак не могу понять, как сделать генерацию случайных чисел (заполнение массива), которая зависит от времени. Есть код программы (приведен ниже). Программа работает со 100% производительностью Поэтому ошибки в вычислениях искать не нужно. Помогите только с генератором.
Раньше был генератор вне зависимости от времени, но он выдавал каждый запуск одни и те же числа. Мне же нужно, чтобы каждый раз были разные.
После того, как я почитал книженцию и заменил все согласно моему понимаю, то числа действительно после каждого запуска стали разными. Однако, все числа в массиве одинаковые. Возможно, предыдущие 2 предложения не совсем понятны... Скомпильте программу и сами все увидите.
Можете дать дельный совет по этому поводу?
Заранее спасибо!
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
67
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
 
/*Функция для генерации случайного числа в интервале от 1 до 100.*/
int func_random (){
    srand(time(NULL));
    return 1 + rand() % 100;
}
/*Функция для вычисления количества слагаемых и суммы до первого отрицательного элемента.*/
int func_sum(int MasSize, int* Massive){
    int i, sum_MasElement = 0;
    int num_MasElement = 0;
    for(i = MasSize - 1; i > 0; i--){
        if(Massive[i] >= 0){
            sum_MasElement += Massive[i];
            num_MasElement += 1;
        }
        else{
            break;
        }
}
    printf("\nThe sum of numbers under first minus element >> %d.", sum_MasElement);
    printf("\nThe numbers under first minus element >> %d.", num_MasElement);
return 0;
}
 
int main(){
    int MasSize; //Объявление типа размера массива и суммы.
    int* Massive; //Объявление указателя на начальный элемент массива.
    int i, tmp; //Объявление типа параметра цикла.
    printf("\tTask #5. Sum under first minus element.\n\n");
    printf("ATTENTION! Size of massive must be more then 0!\n");
/*Ввода и проверка размера массива.*/   
    do{
        printf("Input size of massive >> ");
            scanf("%d", &MasSize);
        }
    while(MasSize <= 0);
    Massive = new int [MasSize];
/*Условие на проверку инициализируемости указателя (захват памяти).*/   
    if(Massive == NULL){
        printf("Sorry, memory was not captured!");
        return 1;
    }
/*Цикл на заполнение массива.*/
    printf("\nThe filling of the array by randomize numbers...\n\n");
    for( i = 0; i < MasSize; i++){
        Massive[i] = func_random();
        tmp = func_random();
        if(tmp > 5){
            Massive[i] = -Massive[i];
        }
    }
    printf("Put result massive out:\n");
    for(i = 0; i < MasSize; i++){
        printf("%d ", Massive[i]);
    }
/*Вызов функции*/
    func_sum(MasSize, Massive);
    printf("\n\n\t\tPlease, put anykey for exit from programm...");
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2010, 21:51     Вопрос по генерации случайного числа.
Посмотрите здесь:

Время генерации случайного числа - C++
Вопрос к опытным пользователям. Может кто подскажет время генерации случайного числа (скажем по нормальному закону распред.) в сравнении...

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

Пару вопрос по генерации случайных чисел. - C++
Здраствуйте уважаемые мастера с++. 1). Мне надо в конструкторе инициализировать для поля целого типа случайными значениями......

Корни квадратного уравнения, кратность случайного числа, процент от числа - C++
Есть три задачи, если кто то когда то решал что подобное помогите плиз 1)Даны 3 вещественных числа. Найти корни квадратного уравнения...

Генерация случайного числа - C++
Проблемма такова: в программе необходимо получить несколько чисел, от 1 до 255 (или max будет другим -- пока не важно). Стандартные...

Генерация случайного числа - C++
Сори за вопрос может уже обсуждался не раз, но всё же возник. Как правильно сгенерировать число от 0 до 1 и какой тип данных лучше...

Генерация случайного простого числа - C++
Добрый вечер всем! У меня такая проблемма. Необходимо чтобы сгенерировалось 2 простых случайных числа. Для этого я написал функцию с...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
22.10.2010, 22:10     Вопрос по генерации случайного числа. #2
C++
1
srand(time(NULL));
Вставте ету строку в функцию main!!!
Slimmy
65 / 18 / 2
Регистрация: 09.10.2010
Сообщений: 97
22.10.2010, 22:20  [ТС]     Вопрос по генерации случайного числа. #3
Цитата Сообщение от MILAN Посмотреть сообщение
C++
1
srand(time(NULL));
Вставте ету строку в функцию main!!!
Вставил, сразу после инициализации переменных и перед выводом всяких мэсяг на экран. Ничего не изменилось.
C++
1
2
3
int i, tmp; //Объявление типа параметра цикла.
    srand(time(NULL));
    printf("\tTask #5. Sum under first minus element.\n\n");
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
22.10.2010, 22:25     Вопрос по генерации случайного числа. #4
А с функции убрали?
Slimmy
65 / 18 / 2
Регистрация: 09.10.2010
Сообщений: 97
22.10.2010, 22:28  [ТС]     Вопрос по генерации случайного числа. #5
Цитата Сообщение от MILAN Посмотреть сообщение
А с функции убрали?
Убрал. Ошибка не в функции была. Когда менял кое-чего задел в итоге работало как-то коряво. Моя проблема.
Спасибо Вам МИЛАН, который раз уже выручаете
ObiSan
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 23
23.10.2010, 05:28     Вопрос по генерации случайного числа. #6
Кстати, запись
C++
1
rand() % 100;
немного не псевдослучайная, так как диапазон чисел [0; 32767], то в какую-то часть диапазона вы будете попадать чаще.
Slimmy
65 / 18 / 2
Регистрация: 09.10.2010
Сообщений: 97
23.10.2010, 09:40  [ТС]     Вопрос по генерации случайного числа. #7
Все числа генерируемые компьютером не могут быть псевдослучайными. Чисел из одного промежутка всегда будет больше, чем из другого. Но, однако, все они колеблются возле "точки равновесия" в зависимости от N в rand() % N, оно будет разным и отличаться будет не слишком на много, например для мощности алфавита из 6-ти чисел (1-6), при повторе примерно 6.000 раз, мы можем получить и такие соотношения: 978, 1012, 1000, 999, 1001, 1000. Это я ради примера показал. Так что, на мой взгляд, псевдослучайными назвать нельзя не один из способов задания
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
23.10.2010, 10:34     Вопрос по генерации случайного числа. #8
Slimmy, все ты перепутал
Числа называются псевдослучайными потому что они не случайные
Поэтому все правильно - компьютер генерирует псевдослучайные числа

Но есть физические генераторы,
которые могут генерировать действительно случайные числа
В некоторых мамочках бывают встроенные
ObiSan
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 23
23.10.2010, 11:43     Вопрос по генерации случайного числа. #9
Slimmy, просто, можно использовать стандартный способ
C++
1
rand()/RAND_MAX*[диапазон] + фаза
В таком случае, вы сжимаете диапазон, и рандом у вас будет равномерный по всей области.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2010, 16:59     Вопрос по генерации случайного числа.
Еще ссылки по теме:

Генерация пятизначного случайного числа - C++
Нужно сгенерировать случайное число из пяти цифр и записать ее в переменную типа string. Пытаюсь 5 генерировать цифры в цикле, а как их...

Повтор случайного числа в строке матрицы - C++
#include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; int main() { const int COLUMN = 8; const int ROW = 22; int...

Запись текста и генерация случайного числа - C++
Собственно задача такая: записать строки с рандомными числовым значением в некоторое количество создаваймых файлов. Файлы создаются без...

Генерация случайного числа с плавающей чточкой - C++
Добрый день. Подскажите как генерировать случайное число типа float или double. Обычно использую rand(), но она подходит только для целых,...

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


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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
23.10.2010, 16:59     Вопрос по генерации случайного числа. #10
Вообще он и так равномерный, ибо реализует именно равномерное распределение. А всё дело в операции % - она ведь даёт последние цифры числа (грубо), а этот диапазон как раз распределён не равномерно (числа, скажем 325, 825, 1525, 5825 достаточно равномерно распределены, но две их последние цифры одни и те же). А вот когда мы делим полученное число на рандмакс и умножаем на диапазон - снова возвращаемся к равномерному распределению.
Yandex
Объявления
23.10.2010, 16:59     Вопрос по генерации случайного числа.
Ответ Создать тему
Опции темы

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