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; }
|