|
|
|
| Существует вот такая программа, которая транспонирует матрицу, работает идеально, так вот нужно чтобы мои двумерные массивы стали динамические. Как это сделать в обычной программе у меня не вызывает никаких сложностей, но вот здесь я что-то туплю, вообще ничего не получается(, помогите разобраться, пожалуйста. Спасибо
Мой код:
#include <stdafx.h>
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int i,j,n,m;
class TRMATR
{
int q,w,e,r;
int M[250][250];
public:
int MT[250][250];
TRMATR(){};
TRMATR(int i,int j,int n,int m,int D[250][250]){M[q][w]=D[i][j];e=n;r=m;};
friend istream &operator>>(istream &stream, TRMATR &ob2);
friend ostream &operator<<(ostream &stream, TRMATR ob2);
};
istream &operator>>(istream &stream, TRMATR &ob2)
{
{
cout<<"Enter number of rows: \n";
stream>>n;
cout<<"Enter number of columns: \n";
stream>>m;
system("cls");
cout<<"Enter the matrix elements:\n";
for(i=1;i<n+1;i++)
{
for(j=1;j<m+1;j++)
{
cout<<"element "<<i<<" "<<j<<"=";
stream>>ob2.M[i][j];
system("cls");
};
};
};
return stream;
}
ostream &operator<<(ostream &stream, TRMATR ob2)
{
{
cout<<" Initial matrix: \n";
for(i=1;i<n+1;i++)
{ cout<<" \n";
for(j=1;j<m+1;j++)
{
stream<<ob2.M[i][j]<<" ";
};
}
stream<<" \n" ;
}
cout<<"-----------------------------";
////////transposition/////////////
{
for(i=1;i<n+1;i++)
{
for(j=1;j<m+1;j++)
{
ob2.MT[j][i]=ob2.M[i][j];
};};};
{
cout<<"\n Transposed matrix: \n";
for(i=1;i<m+1;i++)
{ cout<<" \n";
for(j=1;j<n+1;j++)
{
stream<<ob2.MT[i][j]<<" ";
};};
stream<<" \n" ;
};
return stream;
}
void main()
{
TRMATR ob;
cin>>ob;
cout<<ob;
} | |
|
|
|
|
|
|
|
для: Vitaliy113
(04.04.2010 в 16:14)
| | Динамическое размещение массивов осуществляется с помощью библиотечных функций: calloc() и malloc().
Следует только помнить, что ненужную для дальнейшего выполнения программы память следует освобождать при помощи функции free.
Для создания двумерного массива необходимо распределить память для массива указателей на одномерные массивы, а затем распределять память для одномерных массивов.
Пусть, например, требуется создать массив a[n][m]:
#include
int main ()
{ double **a; int n, m, i;
printf("Vvedite razmernosti massiva \n“);
scanf("%d%d",&n,&m);
a=(double **)calloc(m,sizeof(double *));
for (i=0; i<m; i++)
a[i]=(double *)calloc(n,sizeof(double));
. . . . . . . . . . . . /* --------- освобождение памяти ----------*/
for (i=0; i<m; i++)
free (a[i]);
free (a);
} | |
|
|
|
|
|
|
|
для: Miha_drinking_bout
(05.04.2010 в 00:43)
| | Спасибо большое за ответ, это вот понятно, только я обычно использовал new, ну не в этом дело, а как же тогда все то что вы написали связать с моим классом, с той программой что я привел код? | |
|
|
|
|
|
|
|
для: Vitaliy113
(05.04.2010 в 01:14)
| | а фиг его знает пока учусь и не понимаю чужих исходников. Понял только работа идет с (текстовым) потоком произвольного объема. | |
|
|
|
|
|
|
|
для: Miha_drinking_bout
(05.04.2010 в 13:03)
| | может, кто в курсах? помогитн, оч надо.... | |
|
|
|
|
|
|
|
для: Vitaliy113
(05.04.2010 в 16:57)
| | все, разобрался, все сделал, кому интересно вот код:
#include <stdafx.h>
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int i,j,n,m;
class TRMATR
{
int e,r;
int **M;
public:
int MT[250][250];
TRMATR(){};
TRMATR(int n,int m){
M=new int*[n];
for (i=1; i<n+1; i++)
M[i] = new int[m];
};
friend istream &operator>>(istream &stream, TRMATR &ob2);
friend ostream &operator<<(ostream &stream, TRMATR ob2);
};
istream &operator>>(istream &stream, TRMATR &ob2)
{
{
//system("cls");
cout<<"Enter the matrix elements:\n";
for(i=1;i<n+1;i++)
{
for(j=1;j<m+1;j++)
{
cout<<"element "<<i<<" "<<j<<"=";
stream>>ob2.M[i][j];
system("cls");
};
};
};
return stream;
}
ostream &operator<<(ostream &stream, TRMATR ob2)
{
{
cout<<" Initial matrix: \n";
for(i=1;i<n+1;i++)
{ cout<<" \n";
for(j=1;j<m+1;j++)
{
stream<<ob2.M[i][j]<<" ";
};
}
stream<<" \n" ;
}
cout<<"-----------------------------";
////////transposition/////////////
{
for(i=1;i<n+1;i++)
{
for(j=1;j<m+1;j++)
{
ob2.MT[j][i]=ob2.M[i][j];
};};};
{
cout<<"\n Transposed matrix: \n";
for(i=1;i<m+1;i++)
{ cout<<" \n";
for(j=1;j<n+1;j++)
{
stream<<ob2.MT[i][j]<<" ";
};};
stream<<" \n" ;
};
return stream;
}
void main()
{
cout<<"Enter number of rows: \n";
cin>>n;
cout<<"Enter number of columns: \n";
cin>>m;
TRMATR ob(n,m);
cin>>ob;
cout<<ob;
}
по аналогии можно сделать и матрицу MT, но мне это уже не нужно было) | |
|
|
|