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

Вызов двумерного массива - C++

Восстановить пароль Регистрация
 
Lucky721
0 / 0 / 2
Регистрация: 13.04.2013
Сообщений: 65
29.05.2013, 19:58     Вызов двумерного массива #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
#include<math.h>
#include<windows.h>
#include<iostream.h>
#include<stdlib.h>
int CreateArray(int a, int b, int n, int m) {
    int** Arr = new int *[n];
    for (int i = 0; i < n; i++) {
    Arr[i] = new int [m];
    }
    for (i=0;i<n; i++) {
        for(int j=0;j<m; j++) {
            Arr[i][j]=rand() % (b - a + 1) + a;
        }
    }
    return 0;
}
void main() {
     SetConsoleOutputCP(1251);
     int a, b, m, n;
     cout << " Введите ширину массива: \n";
     cin>>n;
     cout << " Введите длину массива: \n";
     cin>>m;
     cout << " Введите нижнюю границу диапазона : \n";
     cin>>a;
     cout << " Введите верхнюю границу диапазона: \n";
     cin>>b;
     CreateArray(a,b,n,m);
     
 
 
}

Нужна помощь. В этой функции я создаю двумерный массив размера m на n с числами из диапазона [a,b]. Как мне к нему обратиться в основной функции?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2013, 19:58     Вызов двумерного массива
Посмотрите здесь:

залить из двумерного массива данные в одномерный длиной, равной количеству всех элементов исходного массива C++
C++ ввод двумерного массива,ввод размерности массива,заполнение массива случайными числами
Функции двумерного массива. Транспонировать матрицу через ввод вывод функции двумерного массива. C++
Найти номер строки и столбца двумерного массива для минимального элемента этого массива C++
C++ Написать функцию проверяющую есть ли отрицательные элементы в указанной строке двумерного массива. Удалить из массива все строки с отрицательными элем
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Гром
 Аватар для Гром
199 / 118 / 10
Регистрация: 20.03.2009
Сообщений: 1,075
Записей в блоге: 15
29.05.2013, 20:06     Вызов двумерного массива #2
Возвращайте вместо нуля Arr:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int CreateArray(int a, int b, int n, int m) {
    int** Arr = new int *[n];
    for (int i = 0; i < n; i++) {
        Arr[i] = new int [m];
        for(int j=0;j<m; j++) {
            Arr[i][j]=rand() % (b - a + 1) + a;
        }
    }
    return Arr;
}
 
int main()
{
//...
int** MyArr = CreateArray(a, b , n, m);
std::cout << MyArr[0][0];
for (int i = 0; i < n; ++i)
    delete[] MyArr[i];
delete[] MyArr;
}
Lucky721
0 / 0 / 2
Регистрация: 13.04.2013
Сообщений: 65
29.05.2013, 20:33  [ТС]     Вызов двумерного массива #3
C++
1
2
3
4
5
int** MyArr = CreateArray(a, b , n, m);
std::cout << MyArr[0][0];
for (int i = 0; i < n; ++i)
    delete[] MyArr[i];
delete[] MyArr;
вот эта часть кода обязательна?
Как мне просто в майн функции к примеру напечатать его. Точнее циклы я знаю, просто, как обращаться?
Гром
 Аватар для Гром
199 / 118 / 10
Регистрация: 20.03.2009
Сообщений: 1,075
Записей в блоге: 15
29.05.2013, 20:42     Вызов двумерного массива #4
Вы присваиваете переменной MyArr нужного типа то значение, которое создали в функции CreateArray, т.е. указатель на созданный массив. А потом обращаетесь с ним как с обычным массивом. Конечно, надо не забывать подчищать за собой память в конце.
C++
1
std::cout << MyArr[0][0];
это просто пример использования - вывели угловой элемент массива.
Lucky721
0 / 0 / 2
Регистрация: 13.04.2013
Сообщений: 65
29.05.2013, 20:47  [ТС]     Вызов двумерного массива #5
C++
1
error C2440: 'return' : cannot convert from 'int ** ' to 'int'
Вот такую ошибку выводит
Гром
 Аватар для Гром
199 / 118 / 10
Регистрация: 20.03.2009
Сообщений: 1,075
Записей в блоге: 15
29.05.2013, 20:50     Вызов двумерного массива #6
Опечатка у меня. Забыл поправить int CreateArray(аргументы) на int** CreateArray(аргументы)
Lucky721
0 / 0 / 2
Регистрация: 13.04.2013
Сообщений: 65
29.05.2013, 20:59  [ТС]     Вызов двумерного массива #7
Теперь собственно
C++
1
error C2065: 'Arr' : undeclared identifier
как и было в начале, вот в этой строке
C++
1
cout<<Arr[i][j]<<"\t";
Добавлено через 1 минуту
Ой, теперь моя ошибка, все в норме
Гром
 Аватар для Гром
199 / 118 / 10
Регистрация: 20.03.2009
Сообщений: 1,075
Записей в блоге: 15
29.05.2013, 21:04     Вызов двумерного массива #8
Код вне функции CreateArray ничего не знает про ее внутренние данные, и не должен знать. Именно поэтому мы передаем во внешний мир созданный массив в качестве результата функции. Если мы просто вызовем ее и никуда не запишем результат, то все данные о созданном масииве окажутся навеки потеряны, и мы не сможем с ним никак работать. Если мы присвоим указатель на возвращенный массив некоторой переменной (типа указатель нужного типа), то через эту переменную сможем работать с массивом.
В данном случае вам надо работать уже с MyArr, поскольку данные о массиве мы сохранили туда.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2013, 21:40     Вызов двумерного массива
Еще ссылки по теме:

C++ Написать программу, которая вычисляет сумму элементов двумерного массива по столбцам. Организовать ввод массива с клавиатуры по строкам
C++ Заменить все элементы массива, попадающие в интервал, нулем. Выполнить двумя способами: с помощью одномерного и двумерного массива.
1. Написать функцию проверяющую есть ли отрицательные элементы в указанной строке двумерного массива. Удалить из массива все строки с отрицательными э C++

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

Или воспользуйтесь поиском по форуму:
Lucky721
0 / 0 / 2
Регистрация: 13.04.2013
Сообщений: 65
29.05.2013, 21:40  [ТС]     Вызов двумерного массива #9
Цитата Сообщение от Гром Посмотреть сообщение
Код вне функции CreateArray ничего не знает про ее внутренние данные, и не должен знать. Именно поэтому мы передаем во внешний мир созданный массив в качестве результата функции. Если мы просто вызовем ее и никуда не запишем результат, то все данные о созданном масииве окажутся навеки потеряны, и мы не сможем с ним никак работать. Если мы присвоим указатель на возвращенный массив некоторой переменной (типа указатель нужного типа), то через эту переменную сможем работать с массивом.
В данном случае вам надо работать уже с MyArr, поскольку данные о массиве мы сохранили туда.
Большое спасибо т.е MyArr это указатель на массив?

Добавлено через 13 минут
Цитата Сообщение от Lucky721 Посмотреть сообщение
Большое спасибо т.е MyArr это указатель на массив?
точнее указатель на указать на массив
И еще вопрос, если мне нужно написать еще одну функцию для работы с массивом, в качестве параметра мне передавать сам массив MyArr и его размерности?
Yandex
Объявления
29.05.2013, 21:40     Вызов двумерного массива
Ответ Создать тему
Опции темы

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