PDA

View Full Version : مشکل در ایجاد آرایه دوبعدی دینامیک



hasanpix
شنبه 21 اردیبهشت 1392, 11:12 صبح
دوستان سلام
من یه کدی رو نوشتم با این که کار میکنه بصورت درست ولی در آخر خطا میده گاهی اوقات هم بصورت کامل ران نمیشه. من فکر میکنم مشکل از نوع تعریف function ها و یا pointer هام باشه. اساتید اگه میشه یک نگاهی بیندازید به این سورس ما
ممنون

#include <iostream>
#include <stdlib.h>
#include <iomanip>
#include <new>
using namespace std;
double** matrix(int, int);
void matrixzero(double**,int);
void matrixPrint(double**,int);
void matrixFree(double**,int);
void LUdecom(double**,double**,double**,int);
int main()
{
int N;
double** a;
double** l;
double** u;
cout << "******* LU Decomposition *******" << endl << endl;

cout << "Enter number of row of matrix n=" << endl;
cin >> N;
a = matrix(N, N);
l = matrix(N, N);
u = matrix(N, N);

cout << "Input matrix coefficients a(i,j)=" << endl;
for(int i=1; i<=N; i++)
for(int j=1; j<=N; j++)
cin >> a[i][j];

matrixzero(l,N);
matrixzero(u,N);


for(int i=1; i<=N; i++)
l[i][i]=1;

LUdecom(a,l,u,N);

cout << "A:" << endl;
matrixPrint(a,N);

cout << "L:" << endl;
matrixPrint(l,N);

cout << "U: " << endl;
matrixPrint(u,N);

matrixFree(a,N);
matrixFree(l,N);
matrixFree(u,N);
return 0;
}

double** matrix(int n, int m)
{
double** p;
{
p = new double* [n];
for ( int i = 0; i <= n; i++ )
p[i] = new double[m];
}
return p;
}

void matrixzero(double **p, int n)
{
for ( int i = 0; i <= n; i++)
for ( int j = 0; j <= n; j++)
p[i][j]=0;
}

void LUdecom(double **p1,double **p2,double **p3, int n)
{

for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
double sum=0;
if (i>j)
p3[i][j]=0;
else
{
for(int s=1; s<=i-1; s++)
sum+= p2[i][s]*p3[s][j];

p3[i][j]=p1[i][j]-sum;
}

if (i<j)
p2[i][j]=0;
else
{
double sum=0;
for(int k=1; k<=j-1; k++)
sum+=p2[i][k]*p3[k][j];

p2[i][j]=(p1[i][j]-sum)/p3[j][j];
p2[i][i]=1;
}
}
}
}

void matrixPrint(double** p, int n)
{
for ( int i = 1; i <= n; i++)
{
for ( int j = 1; j <= n; j++)
cout << p[i][j]<<'\t';

cout<<endl;
}
}

void matrixFree(double **p, int n)
{
for ( int i = 0; i <= n; i++)
delete[] p[i];
delete[] p;
}

UfnCod3r
شنبه 21 اردیبهشت 1392, 12:42 عصر
به این نگا کن


p = new double* [n];
for ( int i = 0; i <= n; i++ )
p[i] = new double[m];

شما n تا حافظه گرفتی ولی حلقه i <= n هست.
باید این طور بشه

p = new double* [n+1];

hasanpix
شنبه 21 اردیبهشت 1392, 16:05 عصر
دوست عزیز بسیار سپاسگزارم بابت راهنماییتون
مشکلم حل شد