Нужно создать двумерный массив (размеры массива вводятся с клавы), заполненный рандомными числами. Создание и вывод массива нужно запихнуть в функцию, а в int main() просто их вызвать.
Вот мой код, который не работает:
#include <iostream>
#include <random>
using namespace std;
void CreateMatrix(int n, int m)
{
srand(time(0));
int B[n][m];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
B[n][m] = rand() % 10;
}
}
}
void ShowMatrix(int n, int m)
{
int B[n][m];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << B[n][m] << " ";
}
cout << endl;
}
}
int main()
{
setlocale(LC_ALL, "Russian");
int a,b;
cout << "Введите а и b через пробел: " << endl;
cin >> a >> b;
CreateMatrix(a,b);
ShowMatrix(a,b);
}
C/C++
Создать и вывести двумерный массив через функции
#include
#include
using namespace std;
int** create(int a, int b)
{
if (a
Естественно, код работает.
CreateMatrix должна вернуть массив, а точнее - указатель на него.
ShowMatrix помимо размера массива должна принимать указатель на него, чтобы его можно было вывести.
CreateMatrix должна вернуть массив, а точнее - указатель на него.
ShowMatrix помимо размера массива должна принимать указатель на него, чтобы его можно было вывести.
Ваш код не работает, потому что вы создаете массив B внутри функции CreateMatrix, и он уничтожается после выхода из этой функции. Поэтому функция ShowMatrix не имеет доступа к этому массиву.
Чтобы исправить эту проблему, вы можете создать массив в функции main и передать его в качестве аргумента в функции CreateMatrix и ShowMatrix. Также вам нужно исправить индексы при обращении к элементам массива: вместо B[n][m] нужно использовать B[i][j].
Вот исправленный код:
#include <iostream>
#include <random>
using namespace std;
void CreateMatrix(int n, int m, int** B)
{
srand(time(0));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
B[i][j] = rand() % 10;
}
}
}
void ShowMatrix(int n, int m, int** B)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << B[i][j] << " ";
}
cout << endl;
}
}
int main()
{
setlocale(LC_ALL, "Russian");
int a,b;
cout << "Введите а и b через пробел: " << endl;
cin >> a >> b;
int** B = new int*[a];
for (int i = 0; i < a; i++)
B[i] = new int[b];
CreateMatrix(a,b,B);
ShowMatrix(a,b,B);
for (int i = 0; i < a; i++)
delete[] B[i];
delete[] B;
return 0;
}
Чтобы исправить эту проблему, вы можете создать массив в функции main и передать его в качестве аргумента в функции CreateMatrix и ShowMatrix. Также вам нужно исправить индексы при обращении к элементам массива: вместо B[n][m] нужно использовать B[i][j].
Вот исправленный код:
#include <iostream>
#include <random>
using namespace std;
void CreateMatrix(int n, int m, int** B)
{
srand(time(0));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
B[i][j] = rand() % 10;
}
}
}
void ShowMatrix(int n, int m, int** B)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << B[i][j] << " ";
}
cout << endl;
}
}
int main()
{
setlocale(LC_ALL, "Russian");
int a,b;
cout << "Введите а и b через пробел: " << endl;
cin >> a >> b;
int** B = new int*[a];
for (int i = 0; i < a; i++)
B[i] = new int[b];
CreateMatrix(a,b,B);
ShowMatrix(a,b,B);
for (int i = 0; i < a; i++)
delete[] B[i];
delete[] B;
return 0;
}
Илья Milutin
проверки на NULL нет ни одной... А здесь это уже обсуждалось
Михаил Михаил
Почему-то массив заполняется одинаковыми числами, хотя должен разными
Похожие вопросы
- Обработка двумерных массивов в функциях
- Двумерные массивы C++, ничего не понимаю((( Нужна помощь
- Запись и чтение двумерного массива в бинарный файл
- Двумерный массив C++
- Задача.Программирование.С++.Динамический двумерный массив.
- Ввести двумерный массив A(n x m)
- Указатель превращается в двумерный массив. (Си)
- Как работать с элементами динамического массива из функции?
- Заполнить двумерный массив 5*3 и найти строку с максимальным произведением элементов. C++
- Отразить двумерный массив с размером m x n относительно побочной диагонали