0 / 0 / 0
Регистрация: 06.06.2020
Сообщений: 31
1

Не работает большая матрица

22.04.2021, 11:53. Показов 2163. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет, есть 3 матрицы - 5х5, 500х500 и 5000х5000.
Первые две работают а вот последняя как будто бы вообще не выполняется. В чем проблема может быть? (Никаких ошибок нет)

П.С. еще и вектор там есть, но вроде бы не в нем проблема.

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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
int bigMatrix(){
    
    int bArray[5000][5000];
    
    vector <vector <int>> vec;
    
    int range[20];
    
    /**
     * @var int|0
    */
    int x = 0;
    /**
     * @var int|0
    */
    int rand_int = 0;
    /**
     * @var int|n
    */
    int tmp = 5000;
    /**
     * @var int|0
    */
    int odd_neg = 0;
    
    srand(time(NULL));
    
    for(int i = -10; i <= 9; i++){
        if(i >= 0){
            range[x] = i+1;
        }else{
            range[x] = i;
        }
        x++;
    }
    
    steady_clock::time_point t1 = steady_clock::now();
    
    for(int i = 0; i < 5000; i++){
        for(int y = 0; y < 5000; y++){
            rand_int = rand() % 20;
            if(y >= tmp){
                bArray[i][y] = 0;
            }else{
                bArray[i][y] = range[rand_int];
            }
        }
        tmp--;
    }
    
    steady_clock::time_point t2 = steady_clock::now();
    
    duration<double> time_span = duration_cast<duration<double>>(t2 - t1);
    
    for(int i = 0; i < 5000; i++){
        cout << "\n";
        for(int y = 0; y < 5000; y++){
            if(bArray[i][y] >= 0){
                if(bArray[i][y] == 10){
                    cout << " " << bArray[i][y];
                }else{
                    cout << "  " << bArray[i][y];
                }
            }else{
                cout << " " << bArray[i][y];
            }
            
            if(bArray[i][y]%2==0 && bArray[i][y] < 0){
                odd_neg++;
            }
        }
    }
    
    steady_clock::time_point t3 = steady_clock::now();
    
    for(int i = 0; i < 5000; i++){
        vector <int> temp;
        for(int y = 0; y < 5000; y++){
            temp.push_back(bArray[i][y]);
        }
        vec.push_back(temp);
    }
    
    steady_clock::time_point t4 = steady_clock::now();
    
    duration<double> time_vec = duration_cast<duration<double>>(t4 - t3);
    
    cout << "\n\n==============Matrix & Vector 5000x5000==============";
    cout << "\nNegativu paru skaitlis ir: " << odd_neg;
    cout << "\nMatrica aizpildito laiks: " << time_span.count();
    cout << "\nVektora aizpildito laiks: " << time_vec.count();
    cout << "\nStarpiba: " << time_span.count() - time_vec.count();
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2021, 11:53
Ответы с готовыми решениями:

Что значит большая буква Е и как она работает в программе ?
Что значит большая буква Е и как она работает в программе ? Редактор формул внизу страницы...

Вершинный буфер и большая матрица
Всем привет! Столкнулся с ошибкой, которая лично у меня вызывает недоумение. Я создаю игру на...

Большая матрица (20000х20000), не хватает памяти
Работаю с графами, необходимо сгенерировать и обработать граф хотя бы с 20000 вершин, графы храню в...

Не работает JvFormAutoSize: при попытке изменить размер формы ширина контролов становится непомерно большая
на 7-й делфе всё нормально, постоянно им пользовался - удобно, кинул на форму и забыл......

5
Заблокирован
22.04.2021, 12:08 2
Цитата Сообщение от queeny Посмотреть сообщение
В чем проблема может быть? (Никаких ошибок нет)
Для таких случаев придумали отладчик. Воспользуйся, это бесплатно.
З.Ы. Имхо, статический массив из 25 млн элементов - это неправильный подход. Не делай так.
0
Модератор
Эксперт CЭксперт С++
5167 / 2891 / 1499
Регистрация: 14.12.2018
Сообщений: 5,227
Записей в блоге: 1
22.04.2021, 12:13 3
Лучший ответ Сообщение было отмечено queeny как решение

Решение

Цитата Сообщение от queeny Посмотреть сообщение
int bArray[5000][5000];
Вы взял память из стека до 5000*5000*sizeof(int)=100.000.000 байтов ! Это много для стека.
Сможете выделяете их на куче !

Добавлено через 4 минуты
Например:
C++
1
2
3
4
5
6
7
8
    const int n = 5000;
    int** bArray = new int*[n];
    for (int i = 0; i < n; i++)
        bArray[i] = new int[n];
    // Code here !
    for (int i = 0; i < n; i++)
        delete[] bArray[i];
    delete bArray;
1
0 / 0 / 0
Регистрация: 06.06.2020
Сообщений: 31
22.04.2021, 12:21  [ТС] 4
Volga_, мне нужна именно 2D матрица.
0
Модератор
Эксперт CЭксперт С++
5167 / 2891 / 1499
Регистрация: 14.12.2018
Сообщений: 5,227
Записей в блоге: 1
22.04.2021, 12:26 5
Цитата Сообщение от queeny Посмотреть сообщение
мне нужна именно 2D матрица.
Конечно, что я показал вам здесь именно тоже двумерный массива (2Д матрица).
2
Эксперт CЭксперт С++
5113 / 4552 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
22.04.2021, 12:29 6
queeny, так код Volga_ и формирует матрицу Динамическую, в куче
1
22.04.2021, 12:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.04.2021, 12:29
Помогаю со студенческими работами здесь

Не работает матрица на ноуте
На ноуте acer travelmate 5760 перегорел шлейф матрицы. Видимо перетёрлась изоляция, он закоротил,...

Матрица a не работает в другой прог
Здравствуйте. В ячейку матрицы a загружаются кординаты точки, первое слово (16 байт) y и смещается...

Не корректно работает матрица на нетбуке
Всем привет. Есть такая проблема. На нетбуке lenovo s206 левая половина экрана нормальная, а...

Не работает матрица и монитор ноутбука
Недавно появился ноутбук и с ним было все в порядке, но позже ноутбук отложили на полгода и вообще...

Не работает матрица на ноутбук Fujitsu AH530
Приветствую. Заменял плату на ноутбуке Fujitsu AH530, но т.к. на плате донора искривились контакты...

Класс матрица (не работает конструктор копирования)
так вот,что-то глючит конструктор копирования, хотя ошибок компиляции не дает(( #include...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru