Informatică, întrebare adresată de tmbogdan120, 8 ani în urmă

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

Răspuns de andrewbach1999
0

#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;

}


tmbogdan120: idea e ca eu o sa folosesc sa creez mai multe matrici care vreu sa le înmulltesc si sa nu scriu scelasi cod de 4 orii si msrsi mult
Alte întrebări interesante