Hello,

The code below calculates the determinant of the matrix. I know that the method of global 2-d pointers is a poor programming practice (so u don't need to reply saying that!!!), but it is a simple method for an amateur programmer. As the code didn't work, I set two watches,
(After giving the input as a 3x3 matrix with elements numbered from 1 to 9) one on e[k][l] & another on b[k1][l1]. To my surprise, b[k1][l1] got modified on its own inspite the fact that e[k][l] at k=1 and l=1 had the value of 5.

Somebody plz help me out.

-Jishnu.

``````#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void show(float **a,int n);
float det(float **b,int n);
void minor(float **a,int o,int i,int j);
void main()
{
clrscr();
int o,i,j;
float **a,ans;
cout<<"Enter The Order Of Matrix:";
cin>>o;
for(i=0;i<o;i++)
a[i]=new float[o];
for(i=0;i<o;i++)
for(j=0;j<o;j++)
cin>>a[i][j];
ans=det(a,o);
cout<<ans;
getch();
}
void show(float **a,int n)
{
cout<<"\n";
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{cout<<setw(8)<<a[i][j]<<" ";}
cout<<"\n\n";
}
}
float **b;
float det(float **c,int n)
{
float ans=0;
float *d;
d=new float[n];
for(int i=0;i<n;i++)
d[i]=c[0][i];
if(n>2)
{
for(int i=0;i<n;i++)
{
minor(c,n,0,i);
if(i%2==0)
ans+=d[i]*det(b,n-1);
else
ans-=d[i]*det(b,n-1);
}
}
if(n==2)
{
return(c[0][0]*c[1][1]-c[0][1]*c[1][0]);
}
return ans;
}
void minor(float **e,int o,int i,int j)
{
int k1=0,l1;
for(int k=0;k<o;k++)
{
l1=0;
for(int l=0;l<o;l++)
{
if(k==i)
{k1--;break;}
if(l==j)
continue;
[B]b[k1][l1]=e[k][l];:-O [/B]
l1++;
}
k1++;
}
}``````

>>float **a;
that is the declaration of a 2-dimensional array of floats. Somewhat similar to this when both dimensions are known: `float a[2][5]` Before allocating memory for the second dimension (5 in the above dimension) you have to allocate memory for the first (2 in the above example)

Line 18 is using an uninitialized variable a. You have to allocate the matrix like this:

``````a = new float*[o]; // allocate first dimension
for(int i = 0; i < o; i++)
{
a[i] = new float(o);
// initialize each element
for(int j = 0; j < o; j++)
a[i][j] = 0.0F;
}``````

I suppose we'll have to wait a while longer for you to discover indentation as well as code tags :icon_rolleyes:

Also, whether you intend this to be a C program or a C++ program (and not some random mix like it is at the moment).

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.