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

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

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

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

19.07.2013, 15:56. Просмотров 586. Ответов 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
#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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2013, 15:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив случайных чисел (C++):

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

Сформировать одномерный массив целых чисел, используя датчик случайных чисел - C++
Условие такое 1.Сформировать одномерный массив целых чисел, используя датчик случайных чисел. Распечатать полученный массив. ...

Сформировать одномерный массив целых чисел, используя датчик случайных чисел - C++
Сформировать одномерный массив целых чисел, используя датчик случайных чисел.Распечатать полученный массив. Удалить 5 первых элементов...

Сформировать одномерный массив целых чисел, используя датчик случайных чисел - C++
Удалить элементы кратные 7. Добавить после каждого нечетного элемента массива элемент со значением 0.

Сформировать одномерный массив целых чисел, используя датчик случайных чисел. - C++
Сформировать одномерный массив целых чисел, используя датчик случайных чисел. Удалить 5 последних элементов массива. Добавить в...

Сформировать одномерный массив целых чисел, используя датчик случайных чисел - C++
1) Сформировать одномерный массив целых чисел, используя датчик случайных чи-сел. 2) Распечатать полученный массив. 3) Удалить элементы...

16
Мимино
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 вызывает ошибку. а он у Вас в цикле
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
19.07.2013, 16:02 #3
Цитата Сообщение от Sarumanovich Посмотреть сообщение
Программа конечна.
Ну разумеется..
Тема стара как мир. Поставь в конце system("pause");
0
Мимино
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 вызовет ошибку выход за пределы массива.
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
19.07.2013, 16:03 #5
Цитата Сообщение от Мимино Посмотреть сообщение
повторный вызов srand вызывает ошибку
с чего бы?..
0
Мимино
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)
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
19.07.2013, 16:09 #7
Цитата Сообщение от lazybiz Посмотреть сообщение
повторный вызов srand вызывает ошибку
с чего бы?..
я полагаю, это не совсем ошибка. Просто псевдослучайность из чисел улетучится. Я не спец,
но мне кажется, срэнд задаёт сид от которого дальнейшие вызовы рэнд будут начинать цикл генерации
некоего rand[i]=foo(rand[i-1]) разве нет?
Так вот, помещая срэнд в цикл, автор каждый раз сбрасывает сид в первоначальный. Ведь значения возвращаемые time(NULL) - времени. Будут почти одинаковыми, если их вызывать в цикле. (вызовы будут идти в одно и то же время)
Вот поэтому и псевдослучайность из чисел улетучится.
Это мои домыслы только... я прав?
0
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
19.07.2013, 16:10 #8
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Это мои домыслы только... я прав?
Да, именно так.
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
19.07.2013, 16:11 #9
Мимино, нет, погоди, ты сказал:
Цитата Сообщение от Мимино Посмотреть сообщение
повторный вызов srand вызывает ошибку
нормальный человек поймет это как runtime-ошибку, но ни в коем случае не логическую.
Повторный вызов srand() ничего не вызывает. Программа как будет работать, так и работает. Ты просто неправильно высказался.
Просто то, что ты сказал, могло ввести ТС в заблуждение.. что не очень хорошо.
0
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
19.07.2013, 16:16 #10
Цитата Сообщение от lazybiz Посмотреть сообщение
нормальный человек поймет это как runtime-ошибку, но ни в коем случае не логическую.
и хорошо. так делать не нужно. Минимум, это бессмысленно.
0
Sarumanovich
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 23
19.07.2013, 16:17  [ТС] #11
Всем спасибо. Сделал массив Matriza[101][101]. Остальной код правильный.
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
19.07.2013, 16:17 #12
Чего делать не нужно, и что бессмысленно?
0
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
19.07.2013, 16:19 #13
Цитата Сообщение от lazybiz Посмотреть сообщение
Чего делать не нужно, и что бессмысленно?

Не по теме:

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

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

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

Не по теме:

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

Не по теме:

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

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



Добавлено через 17 минут
Цитата Сообщение от Мимино Посмотреть сообщение
Не по теме:
сейчас покажу на примере
Ну как там? Пример будет?
0
Sarumanovich
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 23
19.07.2013, 16:49  [ТС] #15
Кстати, если не секрет, как и сделать так, чтобы в .exe файле писалось время выполнения программы?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2013, 16:49
Привет! Вот еще темы с ответами:

Сформировать одномерный массив целых чисел, используя датчик случайных чисел - C++
1)Сформировать одномерный массив целых чисел, используя датчик случайных чисел. 2)Распечатать полученный массив. 3)Перевернуть массив...

Задача на массив и указатели.(массив из случайных чисел) - C++
Найти абсолютное значение,которое чаще остальных встречается в массиве. #include&lt;stdio.h&gt; #include&lt;time.h&gt; #include&lt;stdlib.h&gt; ...

Запишите шесть строк, состоящих из двух случайных чисел типа int, которые не больше 10 и трех случайных чисел - C++
Запишите шесть строк, состоящих из двух случайных чисел типа int, которые не больше 10 и трех случайных чисел типа float, что не больше...

Массив случайных чисел - C++
Помогите пожалуйста создать массив из 20 случайных чисел от 0 до 100. Все элементы меньше 50 занулить. Оформить в виде функции. ...


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

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

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