Ahoj! mam udelat projekt a sem totalni hlupec na C.
Zadani:
Napiste program, ktery bude provadet operace s maticemi - scitani,odecitani,nasobeni. Na vstup bude operator (znak +,-,*), nazvy vstupnich souboru odkud se maji nacist matice a soubor, dp ktereho se ma vypsat vysledek. Program implementujte pro principialne neomezenou velikost matic.
asi tak.... diky za kazdou radu a pomoc...... vazne nevim.....
Fórum › C / C++
Pomoc s projektem prosim! (matice)
Treba vediet ze scitavat a odcitavat matice je mozne len ked maju rovnaky rozmer - napr maticu 3x3 mozes scitat len s maticou 3x3
Pri nasobeni treba vediet ze musis nasobit maticu typu mxn s maticou typu nxp a vznikne matica typu mxp, pricom prvky sa nasobia sposobom prvok 1. - 1. riadok * 1. stlpec...
Kdysi jsem neco takoveho delal, takze jsem to zredukoval na minimum. Ovsem ukladani a nacitani si uz budes muset udelat sam. Jen jeste poznamenam, ze u funcki ktere maji jako formalni parametr nazvany out, tak jej uvnitr funkce alokuji, proto je dulezite, aby jsi nevolal na tento argument InitMatrix - funkce ji volaji interne samy(musi, ledaze by jsi kontroloval a vypocitaval rozmerz matice sam), proto nepredavaj matici, na ktreou jsi uz InitMatrix volal - prisel bys o data a jeste k tomu vytvoril memory leak.
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
float **data;
size_t Rows, Cols;
}TMatrix;
void LoadIdentity(TMatrix* m) // jen pro ilustraci - vytvori jednotkovou matici
{ int i,j;
for(i = 0; i < m->Rows; ++i)
for(j = 0; j < m->Cols; ++j) m->data[i][j] = (float)(i == j);
}
int InitMatrix(TMatrix *out, size_t r, size_t c)
{ out->data = (float**)malloc(sizeof(float*)*r);
if(!out->data) return 0;
out->Rows = r;
out->Cols = c;
int i;
for(i=0; i < r; ++i)
out->data[i] = (float*)malloc(sizeof(float)*c);
return 1;
}
void ReleaseMatrix(TMatrix* m)
{ int i;
for(i=0; i < m->Rows; ++i) free(m->data[i]);
free(m->data);
m->data = NULL;
}
void PrintMatrix(const TMatrix *m)
{ int i,j;
for(i = 0; i < m->Rows; ++i)
{ for(j = 0; j < m->Cols; ++j)
printf("%.2f ", m->data[i][j]);
printf("\n");
}
}
int MultMatrix(const TMatrix* a, const TMatrix *b, TMatrix *out)
{ if(a->Cols != b->Rows) return 0;
if(!InitMatrix(out, a->Rows, b->Cols)) return 0;
int i, j, m;
for(i = 0; i < a->Rows; ++i)
for(j = 0; j < b->Cols; ++j)
{ float sum = 0.0f;
for(m = 0; m < b->Rows; ++m)
sum += a->data[i][m]*b->data[m][j];
out->data[i][j] = sum;
}
return 1;
}
int SumMatrix(const TMatrix* a, const TMatrix* b, TMatrix *out)
{ if(a->Rows != b->Rows || a->Cols != b->Cols) return 0;
if(!InitMatrix(out, a->Rows, b->Cols)) return 0;
int i, j;
for(i = 0; i < out->Rows; ++i)
for(j = 0; j < out->Cols; ++j)
out->data[i][j] = a->data[i][j] + b->data[i][j];
return 1;
}
int SubMatrix(const TMatrix* a, const TMatrix* b, TMatrix *out)
{ if(a->Rows != b->Rows || a->Cols != b->Cols) return 0;
if(!InitMatrix(out, a->Rows, b->Cols)) return 0;
int i, j;
for(i = 0; i < out->Rows; ++i)
for(j = 0; j < out->Cols; ++j)
out->data[i][j] = a->data[i][j] - b->data[i][j];
return 1;
}
int main(int argc, char *argv[])
{
TMatrix a, b, c; // na c se nevola InitMatrix
if(InitMatrix(&a, 5,3))
{ LoadIdentity(&a);
PrintMatrix(&a);
}
printf("\n");
if(InitMatrix(&b, 5,3))
{ LoadIdentity(&b);
b.data[0][0] = 5.f;
PrintMatrix(&b);
}
printf("\n");
if(SumMatrix(&a, &b, &c))
{ PrintMatrix(&c);
}
printf("\n");
system("PAUSE");
return 0;
}
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Pomoc s projektem — založil Corvidae
Pomoc s projektem — založil M5
Pomoc s projektem — založil Kristýna
Pomoc s projektem do školy — založil aivos
Potřebuji pomoc s projektem — založil verbatimcz
Moderátoři diskuze