Mnozenje matrice

Mnozenje matrice

offline
  • Pridružio: 31 Dec 2011
  • Poruke: 109
  • Gde živiš: Novi Pazar

Imam problem jer ne znam kako u C-jeziku da mnozim matricu

Ovo sam pokusao sam ali mnozenje mi nije dobro
mycity.rs/must-login.png

A tekst zadatka je sledeci

mycity.rs/must-login.png

Matrica mora da bude dinamicki alocirana....



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 10 Mar 2009
  • Poruke: 101
  • Gde živiš: Podgorica

Kada jednom alociras memoriju za matricu, nema potrebe da ponovo alociras kao sto si to uradio u funkciji mnozenje. A druga stvar ti mnozis a[0][0] * a[0][0] i smjestas rezultat u promenljivu 'rez' zatim mnozis a[0][1] * a[0][1] i gazis ono sto se nalazi u rez i stavljas ovu novu vrijednost. I treca stvar, makni free(a) iz funkcije mnozenje, koliko vidim vec si postavio to u main funkciji.

Sad ne znam kako zelis da pomnozis matricu, da li sva polja i sve to stavis u jednu promenljivu, ili treba da napravis novu matricu velicine n*n koja ce sadrzati vrijednost A*A, ako je ovo prvo stavi rez += a[i][j] a ako je drugo, napravi drugu matricu b, alociraj memoriju za nju, i onda napises ovo b[i][j] = a[i][j] * a[i][j]. I na kraju te funkcije stavis return b. Ali sada posto funkcija vrace matricu, onda tip funkcije mora biti int**.

Jedino nisam siguran za malloc funkciju, da li se ovako alocira memorija za matricu, posto ja radim u C++, tako da koristim operator new, pa moram da dodam for petlju koja ce da alocira memoriju za svaki red u matrici.



offline
  • Pridružio: 31 Dec 2011
  • Poruke: 109
  • Gde živiš: Novi Pazar

Ispravio sam ove pogreske, ali ne mogu da unesem sve elemente matrice jer verovatno sam pogresno alocirao memoriju za matricu. Na primer imam matricu 3x3, i treba da unesem 9 elemenata te matrice. Krenem da unosim elemente i dodjem do sedmog elementa niza kojeg treba da unesem, ali ne mogu jer izlazi iz programa. Mozda je i do kompajlera ja koristim C free 4.0, a u zbirci je ovako alocirana memorija.. U C++ je to jednostavnije sa new i delete....
mycity.rs/must-login.png

offline
  • Pridružio: 10 Mar 2009
  • Poruke: 101
  • Gde živiš: Podgorica

Pogresno alociras memoriju. Kad napises:
int *a; a = (int*) malloc( n );
Ti pravis niz 'a' od n elemenata. Sad ovo 'a' je pokazivac na niz elemenata. Matrica (int**) je niz nizova:
int** m; m = (int**) malloc( n ); for( i=0; i<n; i++ )     m[i] = (int*) malloc( n );
Ovo 'm' je pokazivac na niz pokazivaca nizova ( 0.o ). Sto znaci da ti prvo moras da napravis niz pokazivaca a onda svakom elementu toga niza ( element je pokazivac na niz ) dodijelis niz. Nadam se da si me skapirao. Very Happy
(To ti je sve stvar pokazivaca, kad budes njih ucio sve ce ti ovo biti mnogo jasnije)

E sad jedino ne znam da li bas mora da se pise ovako
 a = (int*) malloc( sizeof(int) * n );
Posto kod mene radi bez ovog sizeof Very Happy

Funkcija 'mnozenje' je tipa 'int**' sto znaci da moras da vratis matricu (niz nizova). A ti vracas b[i][j], to jeste b[n-1][n-1] sto je 'int'. Ovo ostalo bi trebalo da bude u redu. Very Happy

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

clzola ::
E sad jedino ne znam da li bas mora da se pise ovako
 a = (int*) malloc( sizeof(int) * n );
Posto kod mene radi bez ovog sizeof Very Happy


Mora jer se trazi velicina u bajtima!

Ko je trenutno na forumu
 

Ukupno su 461 korisnika na forumu :: 2 registrovanih, 0 sakrivenih i 459 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3028 - dana 22 Nov 2019 07:47

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: plavii, Snorks