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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 40, средняя оценка - 4.63
maSt
5 / 5 / 1
Регистрация: 28.02.2010
Сообщений: 166
#1

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

20.10.2012, 13:37. Просмотров 6460. Ответов 17
Метки нет (Все метки)

по форуму искал, но находил только для одномерных либо, немного не понятные.
Можете написать и объяснить как ввести с клавиатуры размер двухмерного массива и создать этот массив?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2012, 13:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задать размер двумерного массива (C++):

Размер двумерного массива - C++
Есть функция void edit(char *file, char **text){ FILE *f; if ((f=fopen(file, "ab")) == NULL){ printf("%s %s\n",file,...

Задать размер массива - C++
Доброго времени суток. Делаю программу, которая шифрует перестановкой с ключем. Суть алгоритма: 1. Есть исходное сообщение и ключ, по...

Как задать переменный размер массива - C++
Как задать переменный размер массива?

Как задать произвольный размер массива - C++
В общем проблема такая, есть задание (написанное каким то недалеким человеком). В нем не указано половины информации, то есть, делай как...

Задать размер массива в стороннем файле - C++
В файле записано число, допустим 5, нужно считать его и создать массив такого размера ifstream f("file.txt"); int t; f >> t; ...

Можно ли задать размер строкового массива переменной - C++
Можно ли задать размер строкового массива переменной? Например считаю сколько слов в введенном предложении а затем создаю массив с...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5419 / 4815 / 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];
2
coloc
погромист
410 / 246 / 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];
0
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
20.10.2012, 18:28 #4
coloc, нельзя так. Размер массива должен быть константой(или выражением), определяемой на этапе компиляции.
0
coloc
погромист
410 / 246 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
20.10.2012, 18:48 #5
Странно, у меня компилятор ни на что не ругается при таком методе... И в настройках компилятора прописано виводить все уведомления об ошибках. (IDE Dev C++)
0
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
20.10.2012, 18:52 #6
coloc, VLA - расширение компилятора. Стандарт С++ определяет следующее объявление массива
Код
D1 [constant-expression] attribute-specifier-seq
И все.
0
Евгений 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;
0
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
20.10.2012, 22:04 #8
Евгений 1994, вопрос стоит не "как запихнуть в массив не более 10 000 элеметов", а "как динамически выделить память под массив произвольного размера".
0
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
20.10.2012, 22:12 #9
soon, так есть variable length array.

Добавлено через 27 секунд
Цитата Сообщение от maSt Посмотреть сообщение
Можете написать и объяснить как ввести с клавиатуры размер двухмерного массива и создать этот массив?
Используйте std::vector.
0
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
20.10.2012, 22:13 #10
go, в С99, если мне не изменяет память. В С++ такого нет. По стандарту.
0
Евгений 1994
0 / 0 / 0
Регистрация: 20.10.2012
Сообщений: 9
20.10.2012, 22:35 #11
точно нету.
0
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++)
... //идет заполнение массива
Если что объяснить спрашивай
Помог, нажми спасибо!
1
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 и так далее.
Я просто с указателями раньше вообще не имел дела и не могу понять в чем ошибка.
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.10.2012, 09:46 #14
Во втором посте что-то не так?
0
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;
            }
 
    
    
}
можно и автоматом и в ручную заполнить и выбрать размер массива
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2012, 09:54
Привет! Вот еще темы с ответами:

Не получается задать произвольный размер массива в struct - C++
Добрый вечер. Возникла проблема с лабараторной в универе. Не могу задать произвольный размер массива, т.е. чтобы его мог вводить...

Как задать размер массива равным значению входного аргумента - C++
Создаю массив длины, вводимой пользователем (динамические массивы не предлагать). Выдается ошибка: Error E2313 Векторочистка.cpp 75:...

Можно ли определить размер динамического двумерного массива, количество строк и столбцов? - C++
help

Задать размер динамического массива через переменную, обявленную как extern - C++
Привет народ, скажите, почему не компилирует: #include&quot;stdafx.h&quot; #include&quot;iostream&quot; using namespace std; extern const int y; int...


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

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

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