Dynamicke nasobeni matic – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Dynamicke nasobeni matic – C / C++ – Fórum – Programujte.comDynamicke nasobeni matic – C / C++ – Fórum – Programujte.com

 

cecilconrad
~ Anonymní uživatel
30 příspěvků
13. 12. 2010   #1
-
0
-

Zdravim tento program me funguje na ctvercove matice, kdyz zadam ale treba matici



A:
1 -1
2 0
-3 4

B:
1 2
3 4


#include <stdio.h>

#include <stdlib.h>

double **vytvor(int,int);
void nastav(int *,int *,char);
void smazat(double **,int);
double **nacti(double **,int, int,char);
double **soucin(double **,double **,int,int, int);
void vypis(double **,int,int,char);

int main()
{
int ax,ay,bx,by,cx,cy;
int n;
double **a,**b,**c;

nastav(&ax,&ay,'A');
nastav(&bx,&by,'B');

if(ay == bx)
{
n = ay;
cx = ax;
cy = by;
}
else
{
printf("!!! Pocet sloupcu matice A se musi rovnat poctu radkum matice B\n");
return 1;
}
a = vytvor(ax,ay);
b = vytvor(bx,by);

nacti(a,ax,ay,'A');
nacti(b,bx,by,'B');

c = soucin(a,b,n,cx,cy);

vypis(c,cx,cy,'C');

smazat(a,ay);
smazat(b,by);
smazat(c,cy);

return 0;
}

double **vytvor(int x,int y)
{
double **mat;
int i;
mat = (double**)malloc(x * sizeof(double *));
for(i = 0;i < y; i++)
mat[i] = (double*)malloc(y * sizeof(double));
return mat;
}

void nastav(int *x,int *y,char nazev)
{
printf("Zadej pocet radku matice %c: ",nazev);
scanf("%d",x);
printf("Zadej pocet sloupcu matice %c: ",nazev);
scanf("%d",y);
}

void smazat(double **mat,int y)
{
int i;
for(i = 0;i < y; i++)
free(mat[i]);
free(mat);
}

double **nacti(double **mat,int x, int y,char nazev)
{
int i,j;
printf("Zadej matici %c o rozmeru %d x %d:\n",nazev,x,y);
for(i = 0;i < x;i++)
{
for(j = 0;j < y;j++)
{
printf("A[%d][%d] = ",i+1,j+1);
scanf("%lf",&mat[i][j]);
}
printf("\n");
}
return vytvor(x,y);
}

double **soucin(double **a,double **b,int n,int x, int y)
{
double **c;
c = vytvor(x,y);
int i,j,k;
for(i = 0;i < x;i++)
for(j = 0;j < n;j++)
{
c[i][j] = 0;
for(k = 0;k < n;k++)
c[i][j] = c[i][j] + a[i][k] * b[k][j];
}
return c;
}

void vypis(double **mat,int x,int y,char nazev)
{
int i,j;
printf("Matice %c:\n",nazev);
for(i = 0;i < x;i++)
{
for(j = 0;j < y;j++)
printf("%5.2lf ",nazev,i+1,j+1,mat[i][j]);
printf("\n");
}
}

Nahlásit jako SPAM
IP: 195.178.88.–
cecilconrad
~ Anonymní uživatel
30 příspěvků
13. 12. 2010   #2
-
0
-

Tak chyba nalezena na radku 53 ma byt x namisto y

for(i = 0;i < x; i++)

Nahlásit jako SPAM
IP: 195.178.88.–
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, 36 hostů

Podobná vlákna

Násobení matic — založil Redwizara

Nasobeni matic — založil dreIx

Násobení dvou matic — založil Zke

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ý