incompatible pointer type hatası

Başlatan gocen, 03 Mayıs 2011 - 16:52:55

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

gocen

double Determinant(double **a,int n){}
bu şekilde tanımlanmış bir fonksiyonu çağırırken
şu şekilde çağırdım
double mtrx[SIZE][SIZE]={ {1,0,3,0}, {5,6,7,8}, {9,1,1,2}, {0,4,5,0}, {0,4,5,7} };
double det;
det = Determinant(mtrx,SIZE);

aldığım hata şu şekilde
[Warning] passing arg 1 of `Determinant' from incompatible pointer type
nasıl çağırmak gerekiyo acaba
Ayinesi iştir kişinin lafa bakılmaz,
Şahsın görünür, rütbe-i aklı eserinde.
Ziya Paşa

Erdem


    double matris[5][4] = { {1, 0, 3, 0 },
                            {5, 6, 7, 8 },
                            {9, 1, 1, 2 },
                            {0, 4, 5, 0 },
                            {0, 4, 5, 7 }};

    double (*p)[4] = matris;


Dikkat ederseniz iki boyutlu dizinin ilk öğesinin türü double[4] tür. O yüzden ilk öğesine olan gösterge yukarıdaki gibi oluyor.
Eğer Arch Linux tabanlı bir dağıtıma geçmek isterseniz Arcolinux D sürümünü buradan indirebilirsiniz.

Elektronik

gocen

kodu bi inceleyebilir misiniz hata hala devam ediyo
#include <stdio.h>
#include <math.h>
#define SIZE 5
/*
   Recursive definition of determinate using expansion by minors.
*/
double Determinant(double **a,int n)
{
   int i,j,j1,j2;
   double det = 0;
   double **m = NULL;

   if (n < 1) { /* Error */

   } else if (n == 1) { /* Shouldn't get used */
      det = a[0][0];
   } else if (n == 2) {
      det = a[0][0] * a[1][1] - a[1][0] * a[0][1];
   } else {
      det = 0;
      for (j1=0;j1<n;j1++) {
         m = malloc((n-1)*sizeof(double *));
         for (i=0;i<n-1;i++)
            m[i] = malloc((n-1)*sizeof(double));
         for (i=1;i<n;i++) {
            j2 = 0;
            for (j=0;j<n;j++) {
               if (j == j1)
                  continue;
               m[i-1][j2] = a[i][j];
               j2++;
            }
         }
         det += pow(-1.0,j1+2.0) * a[0][j1] * Determinant(m,n-1);
         for (i=0;i<n-1;i++)
            free(m[i]);
         free(m);
      }
   }
   return(det);
}

/*
   Find the cofactor matrix of a square matrix
*/
void CoFactor(double **a,int n,double **b)
{
   int i,j,ii,jj,i1,j1;
   double det;
   double **c;

   c = malloc((n-1)*sizeof(double *));
   for (i=0;i<n-1;i++)
     c[i] = malloc((n-1)*sizeof(double));

   for (j=0;j<n;j++) {
      for (i=0;i<n;i++) {

         /* Form the adjoint a_ij */
         i1 = 0;
         for (ii=0;ii<n;ii++) {
            if (ii == i)
               continue;
            j1 = 0;
            for (jj=0;jj<n;jj++) {
               if (jj == j)
                  continue;
               c[i1][j1] = a[ii][jj];
               j1++;
            }
            i1++;
         }

         /* Calculate the determinate */
         det = Determinant(c,n-1);

         /* Fill in the elements of the cofactor */
         b[i][j] = pow(-1.0,i+j+2.0) * det;
      }
   }
   for (i=0;i<n-1;i++)
      free(c[i]);
   free(c);
}

/*
   Transpose of a square matrix, do it in place
*/
void Transpose(double **a,int n)
{
   int i,j;
   double tmp;

   for (i=1;i<n;i++) {
      for (j=0;j<i;j++) {
         tmp = a[i][j];
         a[i][j] = a[j][i];
         a[j][i] = tmp;
      }
   }
}

int main(){
double mtrx[SIZE][SIZE]={ {1,0,3,0,1}, {5,6,7,8,2}, {9,1,1,2,3}, {0,4,5,0,4}, {0,4,5,7,5} };
double det;
int cofactor[SIZE][SIZE],s_mtrx[SIZE-1][SIZE-1],i,j,a,b,k,minor;

det = Determinant(mtrx,SIZE);
printf("det=%lf",det);
}
Ayinesi iştir kişinin lafa bakılmaz,
Şahsın görünür, rütbe-i aklı eserinde.
Ziya Paşa

Erdem

Fazla C bilmiyorum ama yazdığın koda göre 5 satır ve sütün var. O zaman ilk elemana göndereceğin göstergenin türü de  double (*p)[5] = matris; olur.

Bence öğrenmek için kendin yazmaya çalışmak daha iyi olur. Örneğin burada 5x5 bir matrisin determinantının nasıl hesaplanacağı anlatılıyor.

http://answers.yahoo.com/question/index?qid=20070123154335AAIVKZd
Eğer Arch Linux tabanlı bir dağıtıma geçmek isterseniz Arcolinux D sürümünü buradan indirebilirsiniz.

Elektronik