Форум: Форум C++Разное
Новые темы: 00
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как сделать двумерный динамический массив в классе
 
 автор: Vitaliy113   (04.04.2010 в 16:14)   письмо автору
 
 

Существует вот такая программа, которая транспонирует матрицу, работает идеально, так вот нужно чтобы мои двумерные массивы стали динамические. Как это сделать в обычной программе у меня не вызывает никаких сложностей, но вот здесь я что-то туплю, вообще ничего не получается(, помогите разобраться, пожалуйста. Спасибо
Мой код:


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

  Ответить  
 
 автор: Miha_drinking_bout   (05.04.2010 в 00:43)   письмо автору
 
   для: 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);
}

  Ответить  
 
 автор: Vitaliy113   (05.04.2010 в 01:14)   письмо автору
 
   для: Miha_drinking_bout   (05.04.2010 в 00:43)
 

Спасибо большое за ответ, это вот понятно, только я обычно использовал new, ну не в этом дело, а как же тогда все то что вы написали связать с моим классом, с той программой что я привел код?

  Ответить  
 
 автор: Miha_drinking_bout   (05.04.2010 в 13:03)   письмо автору
 
   для: Vitaliy113   (05.04.2010 в 01:14)
 

а фиг его знает пока учусь и не понимаю чужих исходников. Понял только работа идет с (текстовым) потоком произвольного объема.

  Ответить  
 
 автор: Vitaliy113   (05.04.2010 в 16:57)   письмо автору
 
   для: Miha_drinking_bout   (05.04.2010 в 13:03)
 

может, кто в курсах? помогитн, оч надо....

  Ответить  
 
 автор: Vitaliy113   (06.04.2010 в 16:08)   письмо автору
 
   для: 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, но мне это уже не нужно было)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования