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

Выделение динамической памяти в двумерном массиве - C++

Восстановить пароль Регистрация
 
Ferz137
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 17
27.01.2014, 10:19     Выделение динамической памяти в двумерном массиве #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
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
/*
Программа создаёт двумерный массив 10х10. Заполняет его случайными числами из
диапазона [-200;200], ищет минимальный и максимальный элементы массива, меняет местами
столбец, содержащий минимальный элемент массива, со строкой, содержащей максимальный элемент массива.
*/
#include <iostream>
#include <iomanip>
#include <cstdlib>
 
using namespace std;
//////////Глобальные переменные, структуры, классы////////
int mas[10][10];
struct element {
    int x;
    int y;
};
//////////Прототипы функций///////////////////////////////
void zapolnenie_massiva();
void vivod_massiva();
void poisk_elementov(element &min, element &max);
void obmen_strokami(int &a, int &b);
//////////////////////////////////////////////////////////
int main()
{
    element min, max;               // структурные переменные, хранящие индексы
                                    // минимального и максимального элементов массива
    zapolnenie_massiva();
    vivod_massiva();
    poisk_elementov(min, max);
    
    cout << endl;
    cout << "Min: a[" << min.x+1 << "][" << min.y+1 << "]" << endl;
    cout << "Max: a[" << max.x+1 << "][" << max.y+1 << "]" << endl;
    cout << endl;   
    
    obmen_strokami(min.y, max.x);
    vivod_massiva();
        
    return 0;
}
//////////////////////////////////////////////////////////
void zapolnenie_massiva() {
    for (int i=0; i<10; i++) {
        for (int j=0; j<10; j++) {
            mas[i][j] = rand()%401 - 200;
        }       
    }
}
void vivod_massiva(){
    for (int i=0; i<10; i++) {
        for (int j=0; j<10; j++) {
            cout << setw(6) << mas[i][j];
        }
        cout << endl;
    }
}
void poisk_elementov(element &min, element &max) {
    int MIN=200;
    int MAX=-200;
    for (int i=0; i<10; i++) {
        for (int j=0; j<10; j++) {
            if (MIN > mas[i][j]) {
                MIN = mas[i][j];
                min.x=i;
                min.y=j;
            }
            if (MAX < mas[i][j]) {
                MAX = mas[i][j];
                max.x=i;
                max.y=j;
            }
        }
    }
}
void obmen_strokami(int &a, int &b) {
    int empty;
    for (int i=0; i<10; i++){
        empty=mas[i][a];
        mas[i][a]=mas[b][i];
        mas[b][i]=empty;
    }
}
Как здесь сделать через new введение размерности матрицы? Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2014, 10:19     Выделение динамической памяти в двумерном массиве
Посмотрите здесь:

Выделение динамической памяти в функции C++
C++ Выделение динамической памяти
Выделение динамической памяти C++ C++
C++ выделение динамической памяти
Выделение динамической памяти C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
27.01.2014, 10:32     Выделение динамической памяти в двумерном массиве #2
т.е. ты хочешь заменить статический массив динамическим?
Тогда надо поменять int mas[10][10]; на int **mas;а далее объявление что-то типа
C++
1
2
 mas=new int*[N];
    for (int i=0;i<M; i++) mas[i]=new int[M];
Этот код выделит память под матрицу N x M
но его в конце программы надо очистить
C++
1
2
3
 
    for (int i=0;i<M; i++) delete [] mas[i];
delete [] mas;
Sergey_Chizhov
1 / 1 / 0
Регистрация: 21.09.2013
Сообщений: 30
27.01.2014, 10:33     Выделение динамической памяти в двумерном массиве #3
C++
1
2
3
** Mas = new char *[nrow];
    for (int i=0;i<nrow;i++) 
        Mas[i]=new char [MAX];
Добавлено через 1 минуту
C++
1
2
3
4
    
int** Mas = new int *[nrow];  //nrow-количество строк (задается как переменная)
    for (int i=0;i<nrow;i++) 
        Mas[i]=new int [ncow];
//ncow-количество столбцов(задается как переменная)
Ferz137
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 17
27.01.2014, 10:34  [ТС]     Выделение динамической памяти в двумерном массиве #4
А куда это вставлять? Можете подставить?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.01.2014, 10:47     Выделение динамической памяти в двумерном массиве #5
Цитата Сообщение от Ferz137 Посмотреть сообщение
А куда это вставлять?
перед вызовом
C++
1
zapolnenie_massiva();
Ferz137
0 / 0 / 0
Регистрация: 08.01.2014
Сообщений: 17
27.01.2014, 19:28  [ТС]     Выделение динамической памяти в двумерном массиве #6
Всем спасибо!
Yandex
Объявления
27.01.2014, 19:28     Выделение динамической памяти в двумерном массиве
Ответ Создать тему
Опции темы

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