| 
 File: Stare vježbe/vjezbe09/54__2D_polja.c 
/*     54__2D_polja.c     Kombinirani rad s dvodimenzionalnim poljima i pointerima     -----     Program unosi dimenzije matrice A i njezine elemente, zatim racuna     sumu svih elemenata matrice, te ukoliko je matrica kvadratna     transponira ju.     Napomena: Analogon indeksiranja jednodimenzionalnog polja         x[i] == *(x+i)     za dvodimenzionalno polje jest:         A[i][j] == *(A[i]+j) == *(*(A+i)+j),     odnosno         A[i][j] == *(&A[0][0]+i*MAX+j),         gdje MAX predstavlja broj stupaca matrice A.     Primijetimo da pritom NE VRIJEDI:         A[i][j] == *(A+i*MAX+j),     buduci da se A tipovski ne podudara s:         int* A;     vec sa:         int (*A)[MAX]; */   #include <stdio.h>   #define MAXRED 20 #define MAXSTUP 20   /* Napomena: Kada je argument funkcije visedimenzionalno polje, ono se mora    deklarirati sa svim svojim dimenzijama ili sa svim dimenzijama osim prve */ void unos(float A[][MAXSTUP], int m, int n) {     int i, j;       for(i=0; i<m; i++)         for(j=0; j<n; j++) {             scanf("%f", &A[i][j]);             /* ili: scanf("%f", *(A+i)+j); */         } }   void ispis(float A[][MAXSTUP], int m, int n) {     int i, j;       for(i=0; i<m; i++) {         for(j=0; j<n; j++)                 /* ili: printf("%.2f ", *(*(A+i)+j)); */     } }   float suma_niza(float* x, int duljina) {     float suma=0;     int i;     printf("Funkcija suma_niza: x = %d\n", x );      for(i=0; i<duljina; i++)         suma+=x[i];     return suma; }   float suma_elemenata(float (*A)[MAXSTUP], int m, int n) {     float ukupno=0;     int i;     printf("Funkcija suma_elemenata: *(A+0) = %d\n", * (A +0));      for(i=0; i<m; i++)         ukupno+=suma_niza(*(A+i), n);         /* ili: ukupno+=suma_niza(&A[i][0], n); */     return ukupno; }   void transponiraj(float (*A)[MAXSTUP], int m, int n) {     int i, j;     float temp;       for(i=0; i<m; i++)         for(j=i+1; j<n; j++) {             temp=*(*(A+i)+j);             *(*(A+i)+j)=*(*(A+j)+i);             *(*(A+j)+i)=temp;         } }   int main() {     int m, n;     float A[MAXRED][MAXSTUP];       printf("Unesite broj redaka matrice A: ");      scanf("%d", &m);                 printf("Unesite broj stupaca matrice A: ");      scanf("%d", &n);     unos(A, m, n);         printf("\nFunkcija main: &A[0][0] = %d\n", &A [0][0]);      printf("\nSuma elemenata matrice A iznosi %.2f.\n\n",             suma_elemenata(A, m, n));       if(m==n)         transponiraj(A, m, n);     ispis(A, m, n);       return 0; }   
 
          
  
       |