Salut am o problema cu codul asta si nu stiu cum sa rezolv . vreau sa creez o funtie care poate sa imi creeze o matrice cu memorie dinamica alocata dar nu imi merge codul.
coudul este:
#include
using namespace std;
void dimensiondefind(int& x, int& y)
{
cout << "the rows matrix= ";
cin >> x;
cout << "the matrix colums = ";
cin >> y;
}
int matrixcreation(int rows, int colums)
{
int **matrix = (int**)malloc(rows * sizeof(int));
if (matrix == NULL)
{
cout << "null matrix";
exit(0);
}
for (int i = 0; i < rows; i++)
{
matrix[i] = (int*)malloc(colums * sizeof(int));
if (matrix[i] == NULL)
{
cout << "null matrix";
exit(0);
}
}
return **matrix;
}
int main()
{
int rows1=1, colums1=1;
dimensiondefind(rows1, colums1);
int **Matrix1;
Matrix1 = (int**)matrixcreation(rows1, colums1);
for (int i = 0; i < rows1; i++)
{
for (int j = 0; j < colums1; j++)
{
cout << "Matrix1[" << i << "][" << j << "]=";
cin >> Matrix1[i][j];
}
}
for (int i = 0; i < rows1; i++)
{
for (int j = 0; j < colums1; j++)
{
cout << Matrix1 << " ";
}
cout << endl;
}
return 0;
}
Răspunsuri la întrebare
#include <bits/stdc++.h>
using namespace std;
void dimensionDefined(int& x, int& y) {
cout << "the rows matrix= ";
cin >> x;
cout << "the matrix colums = ";
cin >> y;
}
int** matrixCreation(int rows, int colums) {
int **matrix = (int**)malloc(rows * sizeof(int));
if (matrix == NULL) {
cout << "null matrix";
exit(0);
}
for (int i = 0; i < rows; i++) {
matrix[i] = (int*)malloc(colums * sizeof(int));
if (matrix[i] == NULL) {
cout << "null matrix";
exit(0);
}
}
return matrix;
}
int main() {
int rows1, colums1;
// nu ai nevoie sa definesti aici rows1
// columns 1 ca oricum o sa fie date in cin >>
// sfat nu mai folosi functii pentru totul
// de exemplu dimensionDefined e redundant
// poti sa faci acelasi lucru in 4 linii,
// dar fara o functie in plus;
// da impresia ca e mult mai complicat
// programul tau decat chiar este
// ps te complici
dimensionDefined(rows1, colums1);
int **Matrix1 = matrixCreation(rows1, colums1);
// la fel si cu matrixCreation
// foloseste functii cand
// fac ceva mai complicat decat doar sa initializeze ceva
// aici era bug-ul -> nu mai faci
// casting din int in int**,
// ci faci direct functia sa fie int**
// e bine cand declari ceva, orice sa-i si dai o
// valoare direct
// (asta cand poti)
// sfat
// cand denumesti o functie, de exemplu
// dimensiondefined, incearca sa
// 1) faci al douile cuvant sa inceapa cu majuscula
// deci dimensionDefind
// 2) daca nu iti place cum arata dimensionDefined poti
// sa denumesti dimension_defined
// 3) incearca sa ai consistenta cu denumirile,
// adica ori le denumesti pe toate in acelasi mod
for (int i = 0; i < rows1; i++) {
for (int j = 0; j < colums1; j++) {
cout << "Matrix1[" << i << "][" << j << "]=";
cin >> Matrix1[i][j];
}
}
for (int i = 0; i < rows1; i++) {
for (int j = 0; j < colums1; j++) {
cout << Matrix1[i][j] << " ";
}
cout << endl;
}
// in general dupa ce folosesti pointeri
// e bine sa le dai delete sau free
for(int i = 0; i < rows1; i++) {
free(Matrix1[i]);
}
free(Matrix1);
return 0;
}
o solutie mai usor de citit si mai scurta, care face acelasi lucru:
#include <bits/stdc++.h>
using namespace std;
int main() {
int rows, cols;
cout << "the rows matrix = ";
cin >> rows;
cout << "the matrix colums = ";
cin >> cols;
int **matrix = (int**)malloc(rows * sizeof(int));
for (int i = 0; i < rows; i++) {
matrix[i] = (int*)malloc(cols * sizeof(int));
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << "matrix[" << i << "][" << j << "] = ";
cin >> matrix[i][j];
}
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
for(int i = 0; i < rows; i++) {
free(matrix[i]);
}
free(matrix);
return 0;
}