Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/64: Рейтинг темы: голосов - 64, средняя оценка - 4.95
1 / 1 / 0
Регистрация: 10.11.2019
Сообщений: 124

Создание и заполнение двумерного массива через функцию

27.09.2020, 15:08. Показов 12174. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно создать квадратную матрицу через функцию. Я делаю функции в котором заполняю и вывожу двумерный массив, но мне выдает ошибку error: cannot convert 'int (*)[n]' to 'int**' Раньше создавал в main самом, без всяких проблем. А тут нужно через функции все, и как-то не получилось
Код прикрепил. Заранее спасибо за помощь
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
 
using namespace std;
 
 
void fillArray(int **arr, int n)
{
    srand(time(NULL));
    for(int i = 0; i<n; i++)
    {
        for(int j = 0; j<n; j++)
        {
            arr[i][j] = (rand() % 10) + 0;
        }
        cout << endl;
    }
}
 
void printArray(int **arr, int n)
{
    for(int i = 0; i<n; i++)
    {
        for(int j = 0; j<n; j++)
        {
            cout << setw(2) << arr[i][j];
        }
    }
}
 
int main()
{
    setlocale(LC_ALL, "");
    int n;
    int arr[n][n];
    cout << "Введите размер квадратной матрицы: ";
    cin >> n;
    cout << endl;
    fillArray(arr,n);
    cout << "\t\tКвадратная матрица" << endl;
    printArray(arr,n);
 
 
 
 
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.09.2020, 15:08
Ответы с готовыми решениями:

Создание и заполнение двумерного массива из данных в excel
Есть 2 столбца в excel со значениями x и у. Известно, что данные записаны в столбцах A и B соответственно. Сколько строк неизвестно. ...

Реализовать создание и заполнение одним числом двумерного массива конструктором с тремя параметрами
Добрый день. Одно из заданий лабораторной работы : &quot;Реализовать создание и заполнение одним числом двумерного массива конструктором...

Не могу понять в чем проблема Создание двумерного массива и заполнение его по спирали
#include&lt;iostream&gt; using namespace std; int main() { int s=1,m,i=1,j,save,chet=0,r,saveb=0,savea=0,sheta=0,g=0; ...

6
136 / 90 / 48
Регистрация: 16.08.2016
Сообщений: 362
27.09.2020, 15:19
del
0
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
27.09.2020, 16:07
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
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include <iomanip>
#include <iostream>
 
#include <ctime>
 
 
 
class Matrix {
 
public:
    /*Matrix() :
        storage_(nullptr), rows_(0), cols_(0) { }*/
 
    Matrix(std::size_t rows, std::size_t cols) :
        storage_(new int* [rows]), rows_(rows), cols_(cols) {
 
        for (std::size_t i = 0; i < rows_; ++i)
            storage_[i] = new int[cols_];
 
    }
 
    ~Matrix() {
 
        for (std::size_t i = 0; i < rows_; ++i)
            delete[] storage_[i];
 
        delete[] storage_;
 
    }
 
    int& operator()(std::size_t row, std::size_t col) {
 
        if (row >= rows_ || col >= cols_)
            throw std::invalid_argument("Invalid argument");
 
        return storage_[row][col];
 
    }
 
    int& operator()(std::size_t row, std::size_t col) const {
 
        if (row >= rows_ || col >= cols_)
            throw std::invalid_argument("Invalid argument");
 
        return storage_[row][col];
 
    }
 
    void swapRows(std::size_t fIndex, std::size_t sIndex) {
 
        if (fIndex >= rows_ || sIndex >= rows_)
            throw std::invalid_argument("Invalid argument");
 
        std::swap(storage_[fIndex], storage_[sIndex]);
 
    }
 
    std::size_t getColsNumber() const { return cols_; }
    std::size_t getRowsNumber() const { return rows_; }
 
    Matrix(const Matrix&) = delete;
    Matrix& operator=(const Matrix&) = delete;
    Matrix(Matrix&&) noexcept = delete;
    Matrix& operator=(Matrix&&) noexcept = delete;
 
private:
    int** storage_;
    std::size_t rows_;
    std::size_t cols_;
 
};
 
void fillMatrixRandomly(Matrix& matrix, int minValue, int maxValue) {
 
    for (std::size_t i = 0; i < matrix.getRowsNumber(); ++i)
 
        for (std::size_t j = 0; j < matrix.getColsNumber(); ++j) {
 
            int value = minValue + (rand() % std::abs(minValue - maxValue + 1));
            matrix(i, j) = value;
 
        }
 
}
 
std::istream& fillMatruxManually(Matrix& matrix, std::istream& is) {
 
    for (std::size_t i = 0; i < matrix.getRowsNumber(); ++i) {
 
        for (std::size_t j = 0; j < matrix.getColsNumber(); ++j) {
 
            is >> matrix(i, j);
 
        }
 
    }
 
    return is;
 
}
 
std::ostream& printMatrix(const Matrix& matrix, std::ostream& os) {
 
    for (std::size_t i = 0; i < matrix.getRowsNumber(); ++i) {
 
        for (std::size_t j = 0; j < matrix.getColsNumber(); ++j)
            os << matrix(i, j) << ' ';
 
        std::cout << '\n';
 
    }
 
    return os;
 
}
 
bool checkSymmerty(const Matrix& matrix) {
 
    if (matrix.getRowsNumber() != matrix.getColsNumber())
        return false;
 
    for (std::size_t i = 0; i < matrix.getRowsNumber(); ++i)
        for (std::size_t j = i + 1; j < matrix.getColsNumber(); ++j)
            if (matrix(i, j) != matrix(j, i))
                return false;
 
    return true;
 
}
 
int main() {
 
    srand(time(NULL));
 
    Matrix matrix(3, 3);
 
    fillMatruxManually(matrix, std::cin);
    printMatrix(matrix, std::cout);
 
    std::cout << "Matrix is symmetry? "
        << std::boolalpha << checkSymmerty(matrix) << '\n';
 
 
    return 0;
 
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.09.2020, 20:52
Cyberforever,
Цитата Сообщение от Cyberforever Посмотреть сообщение
Раньше создавал в main самом, без всяких проблем
размер массива вводится ДО его объявления. кроме того размер статического массива должен быть известен до компиляции. т.е. если Вам нужно вводить размер массива с клавиатуры, по стандарту С++ применяется динамический массив:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int** Create(int n) // создание 
{
    int** a = new int* [n];
    for (int i = 0; i < n; i++)
        a[i] = new int[n];
    return a;
}
 
void Random(int** a, int n, int A, int B) // заполнение 
{    
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            a[i][j]=rand()%(B-A+1) + A;
}
 
void Print(int** a, int n) // вывод на печать 
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            cout << a[i][j] << " ";
        cout << "\n";
    }
}
 
int main()
{
    srand((int)time(0));
    int n, A=1, B=9, **a;
    cout << "n="; cin >> n;
    
    a=Create(n);
    
    Random(a, n, A, B);
    Print(a, n);
    
    for (int i = 0; i < n; i++)
    delete[]a[i];
    delete[]a; 
system("pause");
return 0;
}
0
1 / 1 / 0
Регистрация: 10.11.2019
Сообщений: 124
27.09.2020, 22:45  [ТС]
Цитата Сообщение от Yetty Посмотреть сообщение
int** Create(int n) // создание
{
    int** a = new int* [n];
    for (int i = 0; i < n; i++)
        a[i] = new int[n];
    return a;
}
Для чего нам вот это делать, просто видел много раз, когда искал ответ на свой вопрос, не хотел просто копипаст делать, хочу именно понять.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.09.2020, 22:51
Опять эта дичь с созданием массива внутри ф-ции и ее возвратом наружу.

Добавлено через 36 секунд
Цитата Сообщение от Yetty Посмотреть сообщение
по стандарту С++ применяется динамический массив:
По стандарту и здравому смыслу применяет вектор или свой класс.
0
1 / 1 / 0
Регистрация: 10.11.2019
Сообщений: 124
27.09.2020, 22:59  [ТС]
Как я понял,мы создаем сначала массив динамический,а после этого только наполняем рандом числами, после этого в конце программы удаляем динамический массив,да?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.09.2020, 22:59
Помогаю со студенческими работами здесь

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

Заполнение массива через функцию
Задание следующее: Написал следующий код: #include &quot;math.h&quot; void cosinus (int *a, float *b) {

Передача двумерного массива в функцию через указатели
поставлена такая задача - Реализовать функцию перемножения двумерных матриц bool Multi-plyMatrices(int** matrixA, int aRows, int aCols,...

Вывод динамического двумерного массива через функцию
Имею следующий код: void matrix_output (int **matrix, int N) { for (int i=0; i&lt;N; i++) { for...

Создание двумерного массива через Select
Вот такой код string str = &quot;1\t2\r\n3\t4&quot;; string parsed = str .Split(new string { &quot;\r\n&quot; }, StringSplitOptions.None) .Select(s...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru