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

Задать размер двумерного массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 40, средняя оценка - 4.63
maSt
 Аватар для maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
20.10.2012, 13:37     Задать размер двумерного массива #1
по форуму искал, но находил только для одномерных либо, немного не понятные.
Можете написать и объяснить как ввести с клавиатуры размер двухмерного массива и создать этот массив?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.10.2012, 13:54     Задать размер двумерного массива #2
Как-то так:
C++
1
2
3
4
5
6
int n, m;
cin >> n >> m;
 
int **pp = new int*[n];
for (int i = 0; i < n; i++)
     pp[i] = new int[m];
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
20.10.2012, 18:20     Задать размер двумерного массива #3
Можно так:
C++
1
2
3
4
int x,y;
cin >> x;
cin >> y;
int array[x][y];
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
20.10.2012, 18:28     Задать размер двумерного массива #4
coloc, нельзя так. Размер массива должен быть константой(или выражением), определяемой на этапе компиляции.
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
20.10.2012, 18:48     Задать размер двумерного массива #5
Странно, у меня компилятор ни на что не ругается при таком методе... И в настройках компилятора прописано виводить все уведомления об ошибках. (IDE Dev C++)
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
20.10.2012, 18:52     Задать размер двумерного массива #6
coloc, VLA - расширение компилятора. Стандарт С++ определяет следующее объявление массива
Код
D1 [constant-expression] attribute-specifier-seq
И все.
Евгений 1994
0 / 0 / 0
Регистрация: 20.10.2012
Сообщений: 9
20.10.2012, 22:01     Задать размер двумерного массива #7
введи просто большую константу масива.
например
C++
1
2
3
4
int a[100][100];
int x,y;
cin >> x;
cin >> y;
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
20.10.2012, 22:04     Задать размер двумерного массива #8
Евгений 1994, вопрос стоит не "как запихнуть в массив не более 10 000 элеметов", а "как динамически выделить память под массив произвольного размера".
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
20.10.2012, 22:12     Задать размер двумерного массива #9
soon, так есть variable length array.

Добавлено через 27 секунд
Цитата Сообщение от maSt Посмотреть сообщение
Можете написать и объяснить как ввести с клавиатуры размер двухмерного массива и создать этот массив?
Используйте std::vector.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
20.10.2012, 22:13     Задать размер двумерного массива #10
go, в С99, если мне не изменяет память. В С++ такого нет. По стандарту.
Евгений 1994
0 / 0 / 0
Регистрация: 20.10.2012
Сообщений: 9
20.10.2012, 22:35     Задать размер двумерного массива #11
точно нету.
mr_free
 Аватар для mr_free
69 / 3 / 0
Регистрация: 08.08.2012
Сообщений: 223
Записей в блоге: 1
20.10.2012, 22:53     Задать размер двумерного массива #12
Значит так, сейчас прозвучит мудрая и очевидная идея.
Можно задавать как простой двумерный массив с определенными значениями размера массива (I = номер столбца, j=номер строки).
Например, так
C++
1
2
3
4
5
6
int n,m;
cin>>n>>m;
int a[n][m];//вместо n,m могут быть числа
for (int i=0; i<n; i++)
{    for(int j=0;j<n;j++)
      cin>>a[i][j]; }//считали двумерный массив
Также, если заранее не известен размер массива, то можно создать, так назывемый двумерный динамический массив, выполняеться это при помощи указателей.
C++
1
2
3
4
5
6
7
8
int **p;
int n,m,i,j;
cin>>n>>m;
p=new int*[n];
for (i=0;i<n;i++){
p[i]=new int [m]; //это все была инициализация массива
for (j=0; j<m; j++)
... //идет заполнение массива
Если что объяснить спрашивай
Помог, нажми спасибо!
maSt
 Аватар для maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
21.10.2012, 02:46  [ТС]     Задать размер двумерного массива #13
mr_free,
Первый вариант ,кстати, невозможен , n и m должны быть константными значениями.
А второй вариант, при попытке заполнения просто выдает ошибку
Просто попытался каждому значению присвоить сумму номеров строк и столбцов.
То есть tab[0][0] было бы 0 . [0][1] было бы 1 и так далее.
Я просто с указателями раньше вообще не имел дела и не могу понять в чем ошибка.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2012, 09:46     Задать размер двумерного массива #14
Во втором посте что-то не так?
SAUtrade
13 / 13 / 1
Регистрация: 21.10.2012
Сообщений: 140
21.10.2012, 09:54     Задать размер двумерного массива #15
это часть моей домашней проги....
C++ (Qt)
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
#include <iostream> 
#include <time.h>
#include <stdlib.h>
 
using namespace std; 
 
void print(int **arr, int ncol, int nrow) 
{ 
    for(int i = 0; i < nrow; i++)
    {
        for(int j = 0; j < ncol; j++)
            cout << arr[i][j] << " ";
        cout << endl;
    }
}
 
 
int main()
{   
    srand(time(NULL));
    int nrow, ncol, n1 = 0, n2 = 0;
    int i, j;
        
    cout << "Enter amount row: ";
    cin >> nrow;
    cout << endl << "Enter amount column: ";
    cin >> ncol;
        
    // Объявляется переменная типа "указатель на указатель на int"
    // и выделяется память под массив указателей на строки массива
    int **arr = new int*[nrow]; 
    //Цикл выделяет память под каждую строку массива 
    for (i = 0; i < nrow; i++)
    //Каждому элементу массива указателей на строки присваевается адресс начала участка памяти
    arr[i] = new int [ncol];
 
    cout << "Fill in array: " << endl << "1. Auto" << endl << "2. Manual" << endl << "Make your choice: ";
    cin >> n1;
 
        switch(n1)
            {
                case 1:
                    for(int i = 0; i < nrow; i++)
                        for(int j = 0; j < ncol; j++)
                            arr[i][j] = rand()%100;
                    cout << endl << "Generated array: " << endl;
                    print(arr, nrow, ncol);
                    break;
                
                case 2:
                    cout << endl << "Enter elements array: " ;
                        for(int i = 0; i < nrow; i++)
                            for(int j = 0; j < ncol; j++)
                                cin >> arr[i][j];
                    cout << "Your array: " << endl;
                    print(arr, nrow, ncol);
                    break;
                
                default :
                    cout << "Your choice is not correct" << endl;
                    break;
            }
 
    
    
}
можно и автоматом и в ручную заполнить и выбрать размер массива
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2012, 09:58     Задать размер двумерного массива #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
29
30
31
32
33
#include <iostream>
using namespace std;
 
int main()
{
  int n, m;
  cin >> n >> m;
 
  int **pp = new int*[n];
  for (int i = 0; i < n; i++)
       pp[i] = new int[m];
 
  for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            pp[i][j] = i + j;
  
  cout << endl;
  for (int i = 0; i < n; i++)
  {
        for (int j = 0; j < m; j++)
            cout << pp[i][j] << ' ';
        cout << endl;
  }
  
  for (int i = 0; i < n; i++)
        delete pp[i];
    
  delete [] pp;    
  
  cout << endl;
  system("pause");
  return 0;
}
Миниатюры
Задать размер двумерного массива  
mr_free
 Аватар для mr_free
69 / 3 / 0
Регистрация: 08.08.2012
Сообщений: 223
Записей в блоге: 1
28.10.2012, 19:47     Задать размер двумерного массива #17
Цитата Сообщение от maSt Посмотреть сообщение
mr_free,
Первый вариант ,кстати, невозможен , n и m должны быть константными значениями.
А второй вариант, при попытке заполнения просто выдает ошибку
Просто попытался каждому значению присвоить сумму номеров строк и столбцов.
То есть tab[0][0] было бы 0 . [0][1] было бы 1 и так далее.
Я просто с указателями раньше вообще не имел дела и не могу понять в чем ошибка.
Первый вариант рабочий, просто рефлекторно написал так как можно объявлять двумерные массивы в MinGW, ведь в нем нетребуються указатели.
Так же все GUI компиляторы не требуют объявления указателей. А вот Студия и т.д. требуют!
А со вторым лажанул
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2012, 19:56     Задать размер двумерного массива
Еще ссылки по теме:

C++ Задать размер динамического массива через переменную, обявленную как extern
Как задать размер массива равным значению входного аргумента C++
Не получается задать произвольный размер массива в struct C++

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

Или воспользуйтесь поиском по форуму:
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
28.10.2012, 19:56     Задать размер двумерного массива #18
Цитата Сообщение от mr_free Посмотреть сообщение
Первый вариант рабочий, просто рефлекторно написал так как можно объявлять двумерные массивы в MinGW, ведь в нем нетребуються указатели.

Он не возможен, зарубите себе на носу уже. Нельзя так делать по стандарту. То, что это пропускает MinGW, объясняется расширением компилятора. И, да, с чего это там указатели не требуются?
Цитата Сообщение от mr_free Посмотреть сообщение
Так же все GUI компиляторы не требуют объявления указателей. А вот Студия и т.д. требуют!
Компилятор не может быть с гуем, это, как минимум, напрасная трата ресурсов.
Yandex
Объявления
28.10.2012, 19:56     Задать размер двумерного массива
Ответ Создать тему
Опции темы

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