Práce s ukazateli – dvourozměné pole

Napište program, který bude realizovat tyto činnosti pomocí funkcí:

Použijte vzor uvedený na konci tohoto souboru.

Pozn.:

Dvourozměrné pole PPP je typu double **. To znamená, že se jedná o ukazatel na (pole) ukazatel(ů). Každý z ukazatelů v tomto poli dále ukazuje na prvky pole. Pole ukazatelů je možné brát například jako řádky a indexy v poli prvků jako sloupce.

Alokace pole tedy vypadá tak, že naalokujeme pole ukazatelů na double, které má velikost shodnou s počtem sloupců. Pro každý z prvků tohoto pole je dále naalokováno pole prvků double o délce rovné počtu sloupců.

Přístup ke sloupcům je PPP[i], přístup k prvkům pole je PPP[i][j] – jedná se tedy o postupnou indexaci ukazatelů.



============= vzor ==================

#include <stdio.h>
#include <conio.h>
#include <alloc.h>

int init_matrix (int ***mat,int x, int y,int value)
{
 // Dyn. alokace dvourozmern. pole velikosti x,y
 // s prvky nastavenymi na hodnotu value
 // vraci: 1 kdyz ok, jinak 0

 return (1); // Vse je vporadku
}

void print_matrix (int** mat,int x,int y)
{
 // Vytisknuti pole mat o velikosti x,y

}

void soucet_matrix (int** mat_a,int** mat_b,int *** mat_c,int x,int y)
{
 // Soucet mat_c=mat_a+mat_b o velikosti x,y
}

void disp_matrix (int*** mat,int x, int y)
{
 // Dealokace dvourozmer. pole o velikosti x,y
}

#define X 5
#define Y 6

int main (void)
{
  int **a =NULL;
  int **b =NULL;
  int **c =NULL;

 // clrscr();
//  printf("Volna pamet Near Heapu %lu bytu.\nVolna pamet Far Heapu %lu bytu.\n",(unsigned long)coreleft(),(unsigned long)farcoreleft());

  printf("\nAlokuju.........\n");
  if (init_matrix (&a,X,Y,2)==0) { printf("Nedostatek pameti.\n");return; }
  if (init_matrix (&b,X,Y,3)==0) { printf("Nedostatek pameti.\n");return; }
  if (init_matrix (&c,X,Y,0)==0) { printf("Nedostatek pameti.\n");return; }
//  printf("Volna pamet Near Heapu %lu bytu.\nVolna pamet Far Heapu %lu bytu.\n",(unsigned long)coreleft(),(unsigned long)farcoreleft());

  a[0][0]=4;  // Pristup do pole
  print_matrix (a,X,Y);
  print_matrix (b,X,Y);
  soucet_matrix(a,b,&c,X,Y);
  print_matrix (c,X,Y);

  printf("\nDealokuju.........\n");
  disp_matrix(&a,X,Y);
  disp_matrix(&b,X,Y);
  disp_matrix(&c,X,Y);
//  printf("Volna pamet Near Heapu %lu bytu.\nVolna pamet Far Heapu %lu bytu.\n",(unsigned long)coreleft(),(unsigned long)farcoreleft());
 return 0;
}



=========== konec vzoru ===============

Poslední úpravy 2005-10-02