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

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

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

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

22.10.2010, 21:51. Просмотров 804. Ответов 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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2010, 21:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопрос по генерации случайного числа. (C++):

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

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

Генерация случайного числа, максимально случайного - C++
Добрый день, задался вопросом как получить случайное число, но не псевдо-случайное по идее функции rand() и srand(time(NULL))...

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
22.10.2010, 22:10 #2
C++
1
srand(time(NULL));
Вставте ету строку в функцию main!!!
0
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");
0
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
22.10.2010, 22:25 #4
А с функции убрали?
1
Slimmy
65 / 18 / 2
Регистрация: 09.10.2010
Сообщений: 97
22.10.2010, 22:28  [ТС] #5
Цитата Сообщение от MILAN Посмотреть сообщение
А с функции убрали?
Убрал. Ошибка не в функции была. Когда менял кое-чего задел в итоге работало как-то коряво. Моя проблема.
Спасибо Вам МИЛАН, который раз уже выручаете
0
ObiSan
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 23
23.10.2010, 05:28 #6
Кстати, запись
C++
1
rand() % 100;
немного не псевдослучайная, так как диапазон чисел [0; 32767], то в какую-то часть диапазона вы будете попадать чаще.
0
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. Это я ради примера показал. Так что, на мой взгляд, псевдослучайными назвать нельзя не один из способов задания
0
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
23.10.2010, 10:34 #8
Slimmy, все ты перепутал
Числа называются псевдослучайными потому что они не случайные
Поэтому все правильно - компьютер генерирует псевдослучайные числа

Но есть физические генераторы,
которые могут генерировать действительно случайные числа
В некоторых мамочках бывают встроенные
0
ObiSan
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 23
23.10.2010, 11:43 #9
Slimmy, просто, можно использовать стандартный способ
C++
1
rand()/RAND_MAX*[диапазон] + фаза
В таком случае, вы сжимаете диапазон, и рандом у вас будет равномерный по всей области.
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
23.10.2010, 16:59 #10
Вообще он и так равномерный, ибо реализует именно равномерное распределение. А всё дело в операции % - она ведь даёт последние цифры числа (грубо), а этот диапазон как раз распределён не равномерно (числа, скажем 325, 825, 1525, 5825 достаточно равномерно распределены, но две их последние цифры одни и те же). А вот когда мы делим полученное число на рандмакс и умножаем на диапазон - снова возвращаемся к равномерному распределению.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2010, 16:59
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.10.2010, 16:59
Ответ Создать тему
Опции темы

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