/* Pelda 1D matrixszorzasra: m1 = [1,2,3] m2' = [4,5,6] result = m1 * m2 = 1*4 + 2*5 + 3*6 */ #include #include typedef double* data_t; // double tipusu mutato tipus letrehozasa typedef struct { // matrix_t nevu struktura definialasa, melynek ket attributuma van: n es data int n; data_t data; } matrix_t; /* Struktura elemeinek feltoltese */ void beolvas (matrix_t *mat){ int i; printf("Add meg a meretet: "); /* KET FELE MODSZERT IS MUTATUNK A STRUKTURAK HASZNALATARA, MELYEK KOZUL BARMELY MEGKOZELITEST HASZNALHATJUK (A TOBBI FUGGVENYBEN IS) */ scanf("%d", &(*mat).n); //scanf("%d", &mat->n); // Ekvivalens az elozo sorral (*mat).data = malloc( (*mat).n * sizeof(double)); // helyet foglalunk a memoriaban matrix elemeinek //mat->data = malloc( mat->n * sizeof(double)); // Ekvivalens az elozo sorral for (i=0; i < mat->n ; i++){ // feltoltjuk a matrix elemit scanf("%lf", &(*mat).data[i]); //scanf("%lf", &mat->data[i]); // Ekvivalens az elozo sorral } } /* Struktura elemeinek kiiratasa */ void kiir (matrix_t *mat){ int i=0; printf("\n%d\n", mat->n); for (i=0; i < mat->n ; i++){ printf("%lf ", mat->data[i]); } } /* Strukturak matrix attributumainak osszeszorzasa */ int szoroz (matrix_t *mat_1, matrix_t *mat_2, double *res){ int i; if (mat_1->n != mat_2->n){ // leellenorizzuk, hogy egyforma meretuek-e a matrixok return 0; // ha nem, akkor 0 (hamis) ertekkel terunk vissza } else { for (i=0; i< mat_1->n ; i++){ // vegig nezzuk az osszes elemet *res += mat_1->data[i] * mat_2->data[i]; // es feltoltjuk a szorzatokkal } return 1; } } /* Strukturan belul foglalt memoriaterulet felszabaditasa */ void torol(matrix_t *mat){ free(mat->data); } int main(){ int sikeres; double eredmeny = 0; matrix_t elso, masodik; // 2 matrix_t struktura letrehozasa beolvas(&elso); // ertekadas beolvas(&masodik); // ertekadas // kiir(&elso); // kiir(&masodik); sikeres = szoroz(&elso, &masodik, &eredmeny); // ket matrix osszeszorzasa. A sikeres volt a szorzas a "sikeres" valtozo erteke 1 lesz, ellenkezo esetben 0 if (sikeres == 1){ printf("Az eredmeny: %lf\n", eredmeny); } else { printf("\nA mereteknek meg kell egyezniuk!\n"); } torol(&elso); // lefoglalt memoriaterulet felszabaditasa torol(&masodik); // lefoglalt memoriaterulet felszabaditasa return 0; }