Množenje matrica C++ (zadatak)

Teme vezane za console/GUI programiranje u C/C++ jeziku
3 post(ov)a • Stranica: 1/1.

Množenje matrica C++ (zadatak)

PostPostao/la nemesis » 02 ruj 2013, 13:46

realna matrica dimenzija mxn (m<=10,n<=10) "(<= manje jednako da vas ne zbuni)" moze da se opise sledecim tipom:
typedef struct mat { float data[10][10]; int m,n;}MATRICA;
napisati program koji ucitava dvije matrice, a zatim izracunava i ispisuje njihov proizvod. Za ucitavanje matrice treba definisati i koristiti funkciju ciji je prototip: MATRICA citaj();
za mnozenje matrica treba definisati i koristiti funkciju:
void mnozenje (MATRICA,MATRICA,MATRICA *);
za ispis matrice definisati i koristiti funkciju:
void ispis(MATRICA);

ako neko zna i ima vremena da uradi ja bi mu bio veoma zahvalan za kod sa komentarima sta i kako, razbijam glavu, ne ide mi nikako ovo cudo

Re: jel zna neko uraditi ovaj zadatak

PostPostao/la Armin » 02 ruj 2013, 16:20

c code
#include<stdio.h>

//matrica, struktura
typedef struct mat
{
float data[10][10];
int m,n;
}
MATRICA;

//deklaracije funkcija
MATRICA citaj();
void ispis(MATRICA);
void mnozenje (MATRICA,MATRICA,MATRICA*);

//glavni program
int main()
{
MATRICA A = citaj();
printf("\nMatrica A:\n");
ispis(A);
MATRICA B = citaj();
printf("\nMatrica B:\n");
ispis(B);
MATRICA C;
mnozenje(A,B,&C);
printf("\nMatrica C=A*B:\n");
ispis(C);
return 0;
}
//definicije funkcija
MATRICA citaj()
{
MATRICA mat; // deklarises objekat tipa MATRICA
printf("\nUnesite dimenzije matrice u formatu m n: ");
scanf("%d %d",&mat.m,&mat.n);//ucitavas dimenzije matrice
int i,j;
for(i = 0;i < mat.m;i++) //prolazis kroz sve redove
{
for(j=0;j<mat.n;j++) //prolazis kroz sve kolone
{
printf("Unesite element mat[%d][%d] = ",i+1,j+1);
scanf("%f",&mat.data[i][j]); //unosis elemente objekta data jedan po jedan
}
}
return mat; //vracas objekat tipa MATRICA kao rezultat
}

void ispis(MATRICA mat)
{
printf("\n");
int i,j;
for(i=0;i<mat.m;i++)
{
for(j=0;j<mat.n;j++)
{
printf("%.2f\t",mat.data[i][j]); //ispis elemenata zaokruzeno na 2 decimale, zatim tab space
}
printf("\n");//prelaz u novi red
}
}

void mnozenje(MATRICA A, MATRICA B, MATRICA* C)
{
int red,kolona,i;
if(A.n != B.m)
{
printf("Dimenzije matrica nisu odgovarajuce za mnozenje.");
//kraj
}
else
{
(*C).m = A.n;
(*C).n = B.m;
for(red = 0;red<(*C).m;red++)for(kolona=0;kolona<(*C).n;kolona++)(*C).data[red][kolona] = 0; //potrebno prvo nulirati sve vrijednosti matrice
for(red=0;red<A.m;red++)
{
for(kolona=0;kolona<B.n;kolona++)
{
for(i=0;i<A.n;i++) //ovaj uslov je mogao glasiti i<B.m
{
(*C).data[red][kolona] += A.data[red][i] * B.data[i][kolona];
}
}
printf("\n");
}
}
}


Kao referencu za način množenja sam koristio sljedeći link: http://msdn.microsoft.com/en-us/library/hh873134.aspx

Primjer pozivanja:

Kod: Označi sve
Unesite dimenzije matrice u formatu m n: 2 3
Unesite element mat[1][1] = 1.2
Unesite element mat[1][2] = 2.3
Unesite element mat[1][3] = 3.4
Unesite element mat[2][1] = 4.5
Unesite element mat[2][2] = 5.6
Unesite element mat[2][3] = 6.7

Matrica A:

1.20    2.30    3.40
4.50    5.60    6.70

Unesite dimenzije matrice u formatu m n: 3 3
Unesite element mat[1][1] = 1
Unesite element mat[1][2] = 2
Unesite element mat[1][3] = 3
Unesite element mat[2][1] = 4
Unesite element mat[2][2] = 5
Unesite element mat[2][3] = 6
Unesite element mat[3][1] = 7
Unesite element mat[3][2] = 8
Unesite element mat[3][3] = 9

Matrica B:

1.00    2.00    3.00
4.00    5.00    6.00
7.00    8.00    9.00



Matrica C=A*B:

34.20   41.10   48.00
73.80   90.60   107.40
0.00    0.00    0.00


I molio bih da od sad kad pišeš temu stavis naslov konkretnije, npr "Program za matrični račun. Potrebna pomoć". Naslovi tipa "hej vidi ovo", "znal ovo neko" itd. nisu prikladni.
"Ne žalim što su drugi pokrali moje ideje. Žalim što nemaju svoje"
Nikola Tesla

Re: jel zna neko uraditi ovaj zadatak

PostPostao/la nemesis » 02 ruj 2013, 18:37

hvala puno i izvini za naslov teme, pazicu ubuduce


3 post(ov)a • Stranica: 1/1.

Na mreži

Trenutno korisnika/ca: / i 1 gost.