Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 23
1

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

19.07.2013, 15:56. Просмотров 801. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.07.2013, 15:56
Ответы с готовыми решениями:

Преобразовать одномерный массив вещественных случайных чисел в массив целых чисел
Преобразовать одномерный массив вещественных случайных чисел в массив целых чисел больших исходных...

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

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

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

16
189 / 159 / 35
Регистрация: 22.05.2013
Сообщений: 455
Записей в блоге: 1
19.07.2013, 15:59 2
Вот же выход за пределы массива
C++
1
stroka <= 100
Добавлено через 1 минуту
Плюс
C++
1
srand(time(NULL));
повторный вызов srand вызывает ошибку. а он у Вас в цикле
0
Эксперт С++
4966 / 3072 / 456
Регистрация: 10.11.2010
Сообщений: 11,159
Записей в блоге: 10
19.07.2013, 16:02 3
Цитата Сообщение от Sarumanovich Посмотреть сообщение
Программа конечна.
Ну разумеется..
Тема стара как мир. Поставь в конце system("pause");
0
189 / 159 / 35
Регистрация: 22.05.2013
Сообщений: 455
Записей в блоге: 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
Эксперт С++
4966 / 3072 / 456
Регистрация: 10.11.2010
Сообщений: 11,159
Записей в блоге: 10
19.07.2013, 16:03 5
Цитата Сообщение от Мимино Посмотреть сообщение
повторный вызов srand вызывает ошибку
с чего бы?..
0
189 / 159 / 35
Регистрация: 22.05.2013
Сообщений: 455
Записей в блоге: 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
3300 / 2681 / 724
Регистрация: 25.03.2012
Сообщений: 9,683
Записей в блоге: 1
19.07.2013, 16:09 7
Цитата Сообщение от lazybiz Посмотреть сообщение
повторный вызов srand вызывает ошибку
с чего бы?..
я полагаю, это не совсем ошибка. Просто псевдослучайность из чисел улетучится. Я не спец,
но мне кажется, срэнд задаёт сид от которого дальнейшие вызовы рэнд будут начинать цикл генерации
некоего rand[i]=foo(rand[i-1]) разве нет?
Так вот, помещая срэнд в цикл, автор каждый раз сбрасывает сид в первоначальный. Ведь значения возвращаемые time(NULL) - времени. Будут почти одинаковыми, если их вызывать в цикле. (вызовы будут идти в одно и то же время)
Вот поэтому и псевдослучайность из чисел улетучится.
Это мои домыслы только... я прав?
0
189 / 159 / 35
Регистрация: 22.05.2013
Сообщений: 455
Записей в блоге: 1
19.07.2013, 16:10 8
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Это мои домыслы только... я прав?
Да, именно так.
0
Эксперт С++
4966 / 3072 / 456
Регистрация: 10.11.2010
Сообщений: 11,159
Записей в блоге: 10
19.07.2013, 16:11 9
Мимино, нет, погоди, ты сказал:
Цитата Сообщение от Мимино Посмотреть сообщение
повторный вызов srand вызывает ошибку
нормальный человек поймет это как runtime-ошибку, но ни в коем случае не логическую.
Повторный вызов srand() ничего не вызывает. Программа как будет работать, так и работает. Ты просто неправильно высказался.
Просто то, что ты сказал, могло ввести ТС в заблуждение.. что не очень хорошо.
0
189 / 159 / 35
Регистрация: 22.05.2013
Сообщений: 455
Записей в блоге: 1
19.07.2013, 16:16 10
Цитата Сообщение от lazybiz Посмотреть сообщение
нормальный человек поймет это как runtime-ошибку, но ни в коем случае не логическую.
и хорошо. так делать не нужно. Минимум, это бессмысленно.
0
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 23
19.07.2013, 16:17  [ТС] 11
Всем спасибо. Сделал массив Matriza[101][101]. Остальной код правильный.
0
Эксперт С++
4966 / 3072 / 456
Регистрация: 10.11.2010
Сообщений: 11,159
Записей в блоге: 10
19.07.2013, 16:17 12
Чего делать не нужно, и что бессмысленно?
0
189 / 159 / 35
Регистрация: 22.05.2013
Сообщений: 455
Записей в блоге: 1
19.07.2013, 16:19 13
Цитата Сообщение от lazybiz Посмотреть сообщение
Чего делать не нужно, и что бессмысленно?

Не по теме:

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

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

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

Не по теме:

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

Не по теме:

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

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



Добавлено через 17 минут
Цитата Сообщение от Мимино Посмотреть сообщение
Не по теме:
сейчас покажу на примере
Ну как там? Пример будет?
0
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 23
19.07.2013, 16:49  [ТС] 15
Кстати, если не секрет, как и сделать так, чтобы в .exe файле писалось время выполнения программы?
0
Эксперт С++
4966 / 3072 / 456
Регистрация: 10.11.2010
Сообщений: 11,159
Записей в блоге: 10
19.07.2013, 21:38 16
Чушь - чушью, но мне интересен пример.
0
33 / 33 / 18
Регистрация: 15.05.2013
Сообщений: 236
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;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.07.2013, 04:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

Задать массив из 10 вещественных чисел используя датчик случайных чисел
Подсчитать количество четных значений. Найти минимальный и максимальный элементы массива, указать...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

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