→ Для вступления в общество новичков и профессионалов программирования, пожалуйста нажмите здесь ...

Форум программистов: C++, Basic, Delphi, Pascal, JavaScript
Логин: Пароль:
Запомнить?  
@Mail.ru



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Сортировка матрицы 
Автор Сообщение
Начинающий

Регистрация: 31.12.2009
Сообщения: 8

Репутация: 0 [ ? ]
Сообщение Сортировка матрицы
Доброго времени суток!!!

Вопрос следующий. Написал прогу, которая должна сортировать строки матрицы по убыванию. Но прога корректно работает только если матрица квадратная т.е. 3х3 или 4х4 и.т.д. Если изменить размеренность например на 4х5 с сортировкой происходит какой-то коллапс. В чем проблема? На всякий случай выкладываю прогу полностью.

#include<iostream.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<string.h>

int n, m;
double k1, k2;
char Name;

class Matrix{

int i,j;
double *pMtx, *pPrMtx, *xAr;
double P,NotZero,Positive;
void print(double *, int, int);
void printArray(double *, int);

public:
Matrix();
~Matrix();
void FormMtx();
void CalcP();
void PrMtx();
void xArray();

};

void Matrix::print(double *pAr, int k, int l)
{
for (i=0;i<k;i++){

for (j=0;j<l;j++)
{
cout<< Name<<"["<<i<<"]["<<j<<"]="<<*(pAr+i*n+j)<<" ";
//cout<<'\t';
}
cout<<'\n';
}
cout<<'\n';
}

void Matrix::printArray(double *Arr, int k)
{
for(i=0;i<k;i++)
{
cout<<"Min in string"<<" ["<<i<<"] = "<<*(Arr+i);
cout<<'\n';
}
}

void Matrix::CalcP()
{
NotZero = 0;
Positive = 0;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
if(*(pMtx+i*n+j)!=0) {NotZero++;}
if(*(pMtx+i*n+j)>0) {Positive++;}
}
cout<<"Not a zero = "<<NotZero<<'\n';
cout<<"Positive = "<<Positive<<'\n';


P=(NotZero/Positive);
cout<<"P = "<<P<<'\n';
cout<<'\n';


}

void Matrix::PrMtx(){
cout<<"Matrix "<<Name<<" has changed"<<'\n';
cout<<'\n';
memcpy(pPrMtx, pMtx, sizeof(double)*n*m);
double tmp;
int itter = m;
if(P>0)
{

while(itter>0)
{
for(i=0;i<n;i++)
for(j=0;j<m-1;j++)
{


if(*(pPrMtx+i*n+j)<*(pPrMtx+i*n+j+1))
{
tmp = *(pPrMtx+i*n+j);
*(pPrMtx+i*n+j)=*(pPrMtx+i*n+j+1);
*(pPrMtx+i*n+j+1)=tmp;



}
}
itter--;
}

print(pPrMtx,n,m);
}
else
{cout<<"Array has not change!\n";}
}

void Matrix::xArray(){

cout<<"Array of min\n";
cout<<'\n';

double min;

for(j=0;j<m;j++)
{
min = *(pMtx+j);

for(i=0;i<n;i++)
{
if (*(pMtx+i*n+j)<min) {min=*(pMtx+i*n+j);}

*(xAr+j)=min;
}

}

printArray(xAr,m);
}




Matrix::Matrix(){

for (i=0;i<n;i++)
for (j=0;j<m;j++)
{
pMtx = new double[n * m];
pPrMtx = new double[n*m];
xAr = new double [n];
}

}

Matrix::~Matrix(){

delete[]pMtx;
delete[]pPrMtx;
delete[]xAr;
}

void Matrix::FormMtx(){

cout<<"Matrix "<<Name<<'\n';
cout<<'\n';
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{

*(pMtx+i*n+j)= rand()%10;
//*(pMtx+i*n+j) = k1*pow(i,2)- pow((j*k2),3);
}
print(pMtx, n, m);
}

void main(){
srand(time(0));
// A matrix
n = 3;
m = 4;
Name='A';
k1=2.7;
k2=4.1;
Matrix *pA;
pA = new Matrix;
pA->FormMtx();
pA->CalcP();
pA->PrMtx();
pA->xArray();



}


26.03.2010 0:15
Профиль Отправить email
Магистр
Аватара пользователя

Регистрация: 15.02.2009
Сообщения: 345
Откуда: Киев
Языки:
Специальность:

Репутация: 14 [ ? ]
Сообщение Re: Сортировка матрицы

_________________
Создание, продвижение сайтов: . ICQ 209937


26.03.2010 8:55
Профиль ICQ WWW
Начинающий

Регистрация: 31.12.2009
Сообщения: 8

Репутация: 0 [ ? ]
Сообщение Re: Сортировка матрицы
спасибо:)
а почему нужно минусовать единицу?


26.03.2010 21:52
Профиль Отправить email
Магистр
Аватара пользователя

Регистрация: 15.02.2009
Сообщения: 345
Откуда: Киев
Языки:
Специальность:

Репутация: 14 [ ? ]
Сообщение Re: Сортировка матрицы
В С массивы индексируются с нуля: 1-элемент массива - под индексом [0], а n-ный под индексом [n-1] .

_________________
Создание, продвижение сайтов: . ICQ 209937


26.03.2010 23:58
Профиль ICQ WWW
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 


Кто сейчас на конференции

Зарегистрированные пользователи: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
cron
© 2013 «Форум программистов Украины»