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

Násobení dvou matic – C / C++ – Fórum – Programujte.comNásobení dvou matic – C / C++ – Fórum – Programujte.com

 

Zke
~ Anonymní uživatel
5 příspěvků
4. 11. 2012   #1
-
0
-

Ahojte, dělám program pro násobení dvou matic. Uživatel zadá hodnoty sloupců a řádků matic A a B, přitom sloupce matice A = řádkům matice B. Po vynásobení matic se vytiskne výsledná matice C. Mám rozdělaný kód a nevím jak dál:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int sloupceA_radkyB, radkyA, sloupceB;
int i, j ,k;
int A, B;
int C=0;
srand(time(0));
int Pole[2][3];

int main(int argc, char **argv)
{
printf("Program pro nasobeni dvou matic\n");
printf("Zadejte hodnoty sloupce matice A:\n");
scanf("%d", &sloupceA_radkyB);

printf("Zadejte hodnoty radku matice A:\n");
scanf("%d", &radkyA);

printf("\nPravidlo pro nasobeni matic:\n" "Pro nasobeni matic se musi pocet sloupcu matice A rovnat poctu radku matice B.\n\n");

printf("Zadejte hodnoty sloupce matice B:\n");
scanf("%d", &sloupceB);

printf("Hodnoty matice A:\n");

for(i=0; i<2; ++i)
{
  for(j=0; j<3; ++j)
  {
   Pole[i][j] = rand() % 11;
  }
}
for (i=0; i<=(radkyA-1);i++)   /* opakuj pro všechny řádky v A */
for (j=0; j<=(sloupceB-1);j++)   /* opakuj pro všechny sloupce v B */
for (k=0; k<=(sloupceA_radkyB-1); k++)
C[i][j]=C[i][j]+(A[i][k]*B[k][j]);   /* pronásob vektor i-tého řádku matice A s vektorem j-tého sloupce matice B*/

return 0;
}

Nahlásit jako SPAM
IP: 109.164.84.–
reciproke0
Návštěvník
4. 11. 2012   #2
-
0
-

Jak dál? To je prosté nesnažit se poslepovat program z nějkého kódu o kterém skoro nemám ponětí... A ještě lépe nejprve si stanovit přesné požadavky na daný program. Až to budeš mít, můžeš si napsat načtení příslušné matice a pro kontrolu správnosti načtená data vypsat.

edit: omlouvám se on ten problém bude na mé straně v mém chápání zadání :-(

Nahlásit jako SPAM
IP: 82.208.4.–
reciproke0
Návštěvník
4. 11. 2012   #3
-
0
-

Takže předpokládejme že máš načtené rozměry matic. Budeš pokračovat jejich alokací a naplněním. Například...

int **A;

A = (int**)malloc(radkyA * sizeof(int*));  // vytvoří "řádky"
 
for(i=0; i<radkyA; ++i)
{
	A[i] = (int*)malloc(sizeof(int) * sloupceA_radkyB);	// na každém řádku "vytvoří sloupce"
	for(j=0; j<sloupceA_radkyB; ++j)
	{
    		A[i][j] = rand() % 11;	// matici naplní
   	}
}

obdobně s příslušnými počty pro matici B a pro C také, jen doporučuji použít calloc(), ta ji rovnou vynuluje. Pak už jen výpočet, ten máš ok.

Nahlásit jako SPAM
IP: 82.208.4.–
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

Násobení matic — založil Redwizara

Nasobeni matic — založil dreIx

Dynamicke nasobeni matic — založil cecilconrad

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ý