Pomoc s projektem prosim! (matice) – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pomoc s projektem prosim! (matice) – C / C++ – Fórum – Programujte.comPomoc s projektem prosim! (matice) – C / C++ – Fórum – Programujte.com

 

Razl0
Duch
29. 3. 2007   #1
-
0
-

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.....

Nahlásit jako SPAM
IP: ...–
Payne
~ Anonymní uživatel
37 příspěvků
1. 4. 2007   #2
-
0
-

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...

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
1. 4. 2007   #3
-
0
-

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

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Podobná vlákna

Pomoc s projektem — založil Corvidae

Pomoc s projektem — založil M5

Pomoc s projektem — založil Kristýna

Potřebuji pomoc s projektem — založil verbatimcz

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý