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

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

Войти
Регистрация
Восстановить пароль
 
Lucky721
0 / 0 / 2
Регистрация: 13.04.2013
Сообщений: 65
#1

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

29.05.2013, 19:58. Просмотров 334. Ответов 8
Метки нет (Все метки)

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++
помогите пожалуйста. не получается вызвать массив подсчитанный в функции god. kol считает верно, и выводит в функции main. а массив &quot;а&quot;...

Заполнение двумерного массива - C++
Есть простой код, но он не работает. Выскакивает сообщение о необработанном исключении. Типо обращение к недоступному участку памяти void...

Вывод двумерного массива - C++
Решил попрактиковаться в работе с вложенными циклами, напоролся на проблему, которую понятия не имею как решить. Вот код: #include...

Передача двумерного массива - C++
Помогите разобраться int func(int *arr) { arr=1; } void main(){ int arr; arr=1;

Сортировка двумерного массива - C++
Не могу разобраться как в матрице можно сортировать элементы,после тяжёлого дня мысли уже улетучиваются... Нужно упорядочить средние...

Сортировка двумерного массива - C++
Добрый день. Дано было такое задание . &quot;Даны два числа n и m. Создать матрицу размером и заполнить случайными числами в диапазоне ....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Гром
209 / 128 / 11
Регистрация: 20.03.2009
Сообщений: 1,101
Записей в блоге: 16
Завершенные тесты: 1
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;
вот эта часть кода обязательна?
Как мне просто в майн функции к примеру напечатать его. Точнее циклы я знаю, просто, как обращаться?
Гром
209 / 128 / 11
Регистрация: 20.03.2009
Сообщений: 1,101
Записей в блоге: 16
Завершенные тесты: 1
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'
Вот такую ошибку выводит
Гром
209 / 128 / 11
Регистрация: 20.03.2009
Сообщений: 1,101
Записей в блоге: 16
Завершенные тесты: 1
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 минуту
Ой, теперь моя ошибка, все в норме
Гром
209 / 128 / 11
Регистрация: 20.03.2009
Сообщений: 1,101
Записей в блоге: 16
Завершенные тесты: 1
29.05.2013, 21:04     Вызов двумерного массива #8
Код вне функции CreateArray ничего не знает про ее внутренние данные, и не должен знать. Именно поэтому мы передаем во внешний мир созданный массив в качестве результата функции. Если мы просто вызовем ее и никуда не запишем результат, то все данные о созданном масииве окажутся навеки потеряны, и мы не сможем с ним никак работать. Если мы присвоим указатель на возвращенный массив некоторой переменной (типа указатель нужного типа), то через эту переменную сможем работать с массивом.
В данном случае вам надо работать уже с MyArr, поскольку данные о массиве мы сохранили туда.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2013, 21:40     Вызов двумерного массива
Еще ссылки по теме:

Создание двумерного массива - C++
int Mass_create() { for (int i = 0; i &lt; n; ++i) { for (int j = 0; j &lt; m; ++j) { mas = rand() % 198 - (99); ...

Обход двумерного массива - C++
Сап, нужна помощь Образовать два одномерных массива путем перезаписи в них элементов из заданного целочисленного двумерного...

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

Заполнение двумерного массива - C++
Помогите пожалуйста написать програму Двумерного массива с++ по такой схеме 1 3 4 10 11 2 5 9 12 19 6 8 13 18 20 7 14 17 21 24 15...

Вывод двумерного массива - C++
Ребят, подскажите, как исправить, пожалуйста! Массив 7x7 нужно, чтобы так и выводился: семь строк, семь столбцов, а почему-то в строчку...


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

Или воспользуйтесь поиском по форуму:
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     Вызов двумерного массива
Ответ Создать тему
Опции темы

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