BİLİŞİM - BİLGİSAYAR - EĞİTİM
  Dinamik Bellek Kullanımı
 

9.6 Dinamik bellek kullanımı:

Üç boyutlu dizi tanımı ve kullanımı.

Üç boyut --> Gerilim - Akım - Zaman

 

Örnek 9.6.1: Tek boyutlu diziyi üç boyutlu gibi kullanma.

 

/* Üç boyutlu dinamik dizi kullanımı. Her boyut farklı uzunlukta

   Dizi tek boyutlu gözüküyor. Ancak indis, hesaplanarak bulunuyor

 

   Yani

       *(a + i*y*z + j*z +k)

               ^       ^

               ^       ^ 3. boyutun uzunluğu

               ^2. boyutun uzunluğu

   şeklinde kullanılabilir.

*/

#define x    4

#define y    5

#define z    9

void matris_yaz(int *);

main()

{

  int *a;

  int i, j, k;

  a=(int *) malloc(x * y * z * sizeof(int)); /* eleman sayisi kadar yer ac */

  clrscr();

  for (i=0; i<x; i++) {

      printf("i = %d n", i);

      for (j=0; j<y; j++) {

          for (k=0; k<z; k++) {

              *(a + i*y*z + j*z +k) = i*j*k;

              printf("%5d ",*(a + i*y*z + j*z +k));

          }

          printf("n");

      }

  }

 

  matris_yaz(a);

}

void matris_yaz(int *m)

{

  int i, j, k;

  clrscr();

  for (i=0; i<x; i++) {

      printf("i = %d n", i);

      for (j=0; j<y; j++) {

          for (k=0; k<z; k++) {

              printf("%5d ",*m);

              *m++;

          }

          printf("n");

      }

      getch();

  }

}

 

Örnek 9.6.2:

 

/* Uc boyutlu dinamik dizi kullanimi. Her boyut farkli uzunlukta

   Bu yontem ile diziye normal dizi gibi erismek mumkun

   Yani

       a[i][j][k]

   seklinde kullanilabilir.

 

*/

#define x    8

#define y    4

#define z   10

main()

{

/*

  typedef int *boyut1;

  typedef boyut1 *boyut2;

  typedef boyut2 *boyut3;

  boyut3 a;

*/

  double ***a;

  int i,j,k;

  a=(double *) malloc(x*sizeof(double*));            /* 1. boyut icin yer ayir  (işaretçiler)   */

  for (i=0; i<x; i++)                                             /* 2. boyut icin yer ayir.  (işaretçiler)  */

      *(a+i)=(double *) malloc(y*sizeof(double*)); /* 1. boyutun her elemani n   */

                                                                          /* elemanli diziyi gosterir   */

 for (i=0; i<x; i++)                        /* 3. boyut icin yer ayir (matrisin elemanlar)    */

      for (j=0; j<y; j++)

          *(*(a+i) + j) = (double *) malloc(z*sizeof(double));

  clrscr();

  for (i=0; i<x; i++)

      for (j=0; j<y; j++)

          for (k=0; k<z; k++)

              *(*(*(a + i) + j) + k) = i*j*k;

  for (i=0; i<x; i++) {

      printf("i = %d n", i);

      for (j=0; j<y; j++) {

          for (k=0; k<z; k++)

              printf("%4.1f ",a[i][j][k]);

          printf("n");

      }

      getch();

  }

}
 
 
  Bugün 129 ziyaretçi (197 klik) www.bilisim-egitim.tr.gg  
 
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol