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

Массив случайных чисел - C++

Восстановить пароль Регистрация
 
Sarumanovich
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 23
19.07.2013, 15:56     Массив случайных чисел #1
Хотел написать сам программу которая выводит случайные числа массива сто на сто. Ошибок в коде нет, но программа вылетает. Выхода за пределы массива нет. Программа конечна. Что не так? Возможно, проблемы в генерации случайных чисел, но я не знаю, как это сделать по-другому.
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
#include <iostream>
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
int main()
{
    unsigned short int stolbez=0;
    unsigned short int randomik;
    unsigned short int matriza[100][100];
    for(unsigned short int stroka=0;stroka <= 100;stroka++)
    {
        srand(time(NULL));
        randomik=rand();
        matriza[stroka][stolbez]=randomik;
        cout<<matriza[stroka][stolbez];
        if(stroka==100)
        {
            stroka-=100;
            stolbez++;
        }
        if(stolbez==100)
        break;
 
    }
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2013, 15:56     Массив случайных чисел
Посмотрите здесь:

C++ Сформировать одномерный массив целых чисел, используя датчик случайных чисел
C++ Сформировать одномерный массив целых чисел, используя датчик случайных чисел.
C++ Задача на массив и указатели.(массив из случайных чисел)
Массив случайных чисел C++
Сформировать одномерный массив целых чисел, используя датчик случайных чисел C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
19.07.2013, 15:59     Массив случайных чисел #2
Вот же выход за пределы массива
C++
1
stroka <= 100
Добавлено через 1 минуту
Плюс
C++
1
srand(time(NULL));
повторный вызов srand вызывает ошибку. а он у Вас в цикле
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
19.07.2013, 16:02     Массив случайных чисел #3
Цитата Сообщение от Sarumanovich Посмотреть сообщение
Программа конечна.
Ну разумеется..
Тема стара как мир. Поставь в конце system("pause");
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
19.07.2013, 16:02     Массив случайных чисел #4
C++
1
2
3
4
5
6
7
if(stroka==100)
        {
            stroka-=100;
            stolbez++;
        }
        if(stolbez==100)
        break;
Индексация массивов начинается с 0, а это значит, что массив из 100 элементов имеет индексы от 0 до 99 включительно. Вызов элемента 100 вызовет ошибку выход за пределы массива.
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
19.07.2013, 16:03     Массив случайных чисел #5
Цитата Сообщение от Мимино Посмотреть сообщение
повторный вызов srand вызывает ошибку
с чего бы?..
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
19.07.2013, 16:08     Массив случайных чисел #6
Цитата Сообщение от lazybiz Посмотреть сообщение
с чего бы?..
Попробуйте. Например вот такой код
C++
1
2
3
4
5
for (int i = 0; i < 10; i ++)
    {
        srand(time(NULL));
        cout << rand() % 100 << endl;
    }
будет всегда выдавать 10 одинаковых чисел, но разных при каждом запуске программы. Это логическая ошибка. А бывает что и просто вылетает программа ( 1 раз сталкивался при повторном вызове функции, в которой был srand)
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.07.2013, 16:09     Массив случайных чисел #7
Цитата Сообщение от lazybiz Посмотреть сообщение
повторный вызов srand вызывает ошибку
с чего бы?..
я полагаю, это не совсем ошибка. Просто псевдослучайность из чисел улетучится. Я не спец,
но мне кажется, срэнд задаёт сид от которого дальнейшие вызовы рэнд будут начинать цикл генерации
некоего rand[i]=foo(rand[i-1]) разве нет?
Так вот, помещая срэнд в цикл, автор каждый раз сбрасывает сид в первоначальный. Ведь значения возвращаемые time(NULL) - времени. Будут почти одинаковыми, если их вызывать в цикле. (вызовы будут идти в одно и то же время)
Вот поэтому и псевдослучайность из чисел улетучится.
Это мои домыслы только... я прав?
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
19.07.2013, 16:10     Массив случайных чисел #8
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Это мои домыслы только... я прав?
Да, именно так.
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
19.07.2013, 16:11     Массив случайных чисел #9
Мимино, нет, погоди, ты сказал:
Цитата Сообщение от Мимино Посмотреть сообщение
повторный вызов srand вызывает ошибку
нормальный человек поймет это как runtime-ошибку, но ни в коем случае не логическую.
Повторный вызов srand() ничего не вызывает. Программа как будет работать, так и работает. Ты просто неправильно высказался.
Просто то, что ты сказал, могло ввести ТС в заблуждение.. что не очень хорошо.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
19.07.2013, 16:16     Массив случайных чисел #10
Цитата Сообщение от lazybiz Посмотреть сообщение
нормальный человек поймет это как runtime-ошибку, но ни в коем случае не логическую.
и хорошо. так делать не нужно. Минимум, это бессмысленно.
Sarumanovich
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 23
19.07.2013, 16:17  [ТС]     Массив случайных чисел #11
Всем спасибо. Сделал массив Matriza[101][101]. Остальной код правильный.
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
19.07.2013, 16:17     Массив случайных чисел #12
Чего делать не нужно, и что бессмысленно?
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
19.07.2013, 16:19     Массив случайных чисел #13
Цитата Сообщение от lazybiz Посмотреть сообщение
Чего делать не нужно, и что бессмысленно?

Не по теме:

сейчас покажу на примере

castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
19.07.2013, 16:39     Массив случайных чисел #14
Цитата Сообщение от Sarumanovich Посмотреть сообщение
Всем спасибо. Сделал массив Matriza[101][101]. Остальной код правильный.
Лучше все числа 100 (кроме определения массива) поменяй на 99. Так будет правильней. Иначе у тебя будет 101 значение, а не 100 как ты ожидал..

Добавлено через 31 секунду

Не по теме:

Цитата Сообщение от Мимино Посмотреть сообщение

Не по теме:

сейчас покажу на примере

Ок. Интересно.



Добавлено через 17 минут
Цитата Сообщение от Мимино Посмотреть сообщение
Не по теме:
сейчас покажу на примере
Ну как там? Пример будет?
Sarumanovich
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 23
19.07.2013, 16:49  [ТС]     Массив случайных чисел #15
Кстати, если не секрет, как и сделать так, чтобы в .exe файле писалось время выполнения программы?
castaway
Эксперт С++
4846 / 2985 / 368
Регистрация: 10.11.2010
Сообщений: 11,026
Записей в блоге: 10
Завершенные тесты: 1
19.07.2013, 21:38     Массив случайных чисел #16
Чушь - чушью, но мне интересен пример.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2013, 04:01     Массив случайных чисел
Еще ссылки по теме:

C++ Сформировать одномерный массив целых чисел, используя датчик случайных чисел
Преобразовать одномерный массив вещественных случайных чисел в массив целых чисел C++
C++ Сформировать одномерный массив целых чисел, используя датчик случайных чисел

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

Или воспользуйтесь поиском по форуму:
Kant
 Аватар для Kant
24 / 24 / 8
Регистрация: 15.05.2013
Сообщений: 213
20.07.2013, 04:01     Массив случайных чисел #17
Вот так можно заполнить двумерный массив и узнать сколько времени ушло на его заполнение.
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
#include <iostream>
#include <time.h>
#include <windows.h>
 
using  std::cout;
using  std::endl;
 
int main() {
 
    setlocale(LC_ALL,"Russian");
    srand(time(NULL));
 
    int matrix[100][100];
    int val;
 
    double start = GetTickCount();
 
    for(int i=0; i<100; ++i) {
        for(int j=0; j<100; ++j) {
            val = rand() % 100;
            matrix[i][j] = val;
            cout << matrix[i][j] << "\t";
        }
    }
 
 
    double finish = GetTickCount();
 
    finish -= start; 
 
    cout << "\n\tЦикл заполнился за " << finish/1000 << " секунд" << endl;
 
 
    system("pause");
    return 0;
}
Yandex
Объявления
20.07.2013, 04:01     Массив случайных чисел
Ответ Создать тему
Опции темы

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