Helsingin yliopisto Tietojenkäsittelytieteen laitos
 

Tietojenkäsittelytieteen laitos

Tietoa laitoksesta:

 
Helsingin yliopisto / Tietojenkäsittelytieteen laitos / Copyright © 2000 Jan Lindström. Tämän oppimateriaalin käyttö on sallittu vain yksityishenkilöille opiskelutarkoituksissa. Materiaalin käyttö muihin tarkoituksiin, kuten kaupallisilla tai muilla kursseilla, on kielletty.

58127-1 C-ohjelmointi - Syksy 2000 : Kertausta: Luento4


#include<stdio.h>
#include<stdlib.h>

int main(void);

#define Z_SIZE 5
#define X_SIZE 5
#define Y_SIZE 5

void vapauta(int ***);
void tulosta(int ***);

int main(void)
{
   int ***Array3D;
   int x,y,z;


   /* Ensin varataan tilaa 3-ulotteisen taulukon viipaleille */
   if(!( Array3D = (int ***)malloc(sizeof(int **) * Z_SIZE )))
   {
       perror("Out of memory");
       exit(1);
   }

   for(z = 0;z < Z_SIZE;z++)
   {
       /* Tässä varataan kullekkin viipaleen riville muistia */
       if(!( Array3D[z] = (int **)malloc(sizeof(int *) * Y_SIZE)))
       {
           vapauta(Array3D);
           perror("Out of memory");
           exit(1);
       }            

       for ( y = 0; y < Y_SIZE;y++)
       {
           /* Lopulta kunkin viipaleen rivin alkiolle tilaa */
           if(!( Array3D[z][y] = (int *)malloc(sizeof(int) * Y_SIZE)))
           {
               vapauta(Array3D);
               perror("Out of memory");
               exit(1);
           }
       }
   }

   /* Nyt taulukko pitäisi olla valmis, kokeillaan */

   for(z = 0;z < Z_SIZE;z++)
   {
       for(y = 0; y < Y_SIZE;y++)
       {
           for(x = 0;x < X_SIZE;x++)
           {
               Array3D[z][y][x] = z * 100 + y * 10 + x;
           }
       }
   }

   tulosta(Array3D);
   vapauta(Array3D);
   return 0;
}

void vapauta(int ***Array3D)
{
   int y,z;

   /* Vapauta taulukko */

   for(z = 0;z < Z_SIZE;z++)
   {
       for(y = 0; y < Y_SIZE;y++)
       {
           if (Array3D[z][y] != NULL) free(Array3D[z][y]);
       }
       if (Array3D[z] != NULL ) free(Array3D[z]);
   }

   if (Array3D) free(Array3D);
}

void tulosta(int ***Array3D)
{
   int x,y,z;

   /* Tulostetaan taulukko näkyviin */

   for(z = 0;z < Z_SIZE;z++)
   {
       printf("------------------------------------------------\n");
       printf("Viipale %d\n",z);
       printf("Rivi Arvot\n");

       for(y = 0; y < Y_SIZE;y++)
       {
           printf("%2d ",y);

           for(x = 0;x < X_SIZE;x++)
           {
               printf("%4d ",Array3D[z][y][x]);
           }

           printf("\n");
       }
   }
}




Jan Lindström (Jan.Lindstrom@cs.Helsinki.FI)