
C - Sucet matic
Ahoj chcel som si spravit velmi jednoduchy programik na scitanie matic ale neviem sa vysomarit z toho scitania :D Ide mi hlava vybuchnut to je strasne :D Nevie niekto nahodou nejaky dobry sposob scitania matic? :D alebo popripade upravit ten moj? Je urcite zly :D
#include <stdio.h>
#include <stdlib.h>
#include "Matice.h"
int main()
{
int PocetRiadkovA=0;
int PocetStlpcovA=0;
int PocetRiadkovB=0;
int PocetStlpcovB=0;
int i=0;
int j=0;
int k=0;
printf("Program na sucet 2 matic\n");
printf("Zadaj pocet riadkov matice A: ");
scanf("%d",&PocetRiadkovA);
printf("Zadaj pocet stlpcov matice A: ");
scanf("%d",&PocetStlpcovA);
printf("Zadaj pocet riadkov matice B: ");
scanf("%d",&PocetRiadkovB);
printf("Zadaj pocet stlpcov matice B: ");
scanf("%d",&PocetStlpcovB);
if(PocetStlpcovA!=PocetRiadkovB)
{
printf("MaticaA nema tolko stlpcov kolko MaticaB riadkov");
return 0;
}
int MaticaA[PocetRiadkovA][PocetStlpcovA];
int MaticaB[PocetRiadkovB][PocetStlpcovB];
int MaticaC[PocetRiadkovA][PocetStlpcovB];
for(j=0;j<PocetRiadkovA;++j) //nacitanie MaticeA
{
for(i=0;i<PocetStlpcovA;++i)
{
printf("MaticaA - Zadaj %d. stlpec riadku %d: ",i+1,j+1);
scanf("%d",&MaticaA[j][i]);
}
}
printf("\n");
for(j=0;j<PocetRiadkovA;++j) //vypis MaticeA
{
for(i=0;i<PocetStlpcovA;++i)
{
printf("%d",MaticaA[j][i]);
}
printf("\n");
}
for(j=0;j<PocetRiadkovB;++j) //nacitanie MaticeB
{
for(i=0;i<PocetStlpcovB;++i)
{
printf("MaticaB - Zadaj %d. stlpec riadku %d: ",i+1,j+1);
scanf("%d",&MaticaB[j][i]);
}
}
printf("\n");
for(j=0;j<PocetRiadkovB;++j) //vypis MaticeB
{
for(i=0;i<PocetStlpcovB;++i)
{
printf("%d",MaticaB[j][i]);
}
printf("\n");
}
for(k=0;k<PocetStlpcovB;++k) //Nasobenie MaticeA a MaticeB - TU JE CHYBA!!!
{
for(j=0;j<PocetRiadkovA;++j)
{
for(i=0;i<PocetStlpcovA;++i)
{
MaticaC[j][k]=(MaticaA[j][i]*MaticaB[i][k])+Matica C[j][k];
}
}
}
printf("\n");
for(j=0;j<PocetRiadkovA;++j) //vypis matice C teda vysledku
{
for(i=0;i<PocetStlpcovB;++i)
{
printf("%d",MaticaC[j][i]);
}
printf("\n");
}
return 0;
}
V nadpise máš součet, v dotazu máš součet, v kódu máš součin. Jsi si jistý, že víš, co chceš?
Prvky matice C musíš nejdřív vynulovat, než do nich začneš přičítat.
som sa pomilil sucin chcem :D a tie prvky matice C musim po jednom vynulovat alebo sa to da nejak rychlejsie?
Stačí vynulovat každý jednotlivý prvek těsně před tím, než do něj začneš přičítat.
Udělej si zatím jen for cykly vypisující indexy, ať víš, jestli to indexuje správně. Pak to teprve pusť na data.
Mam to takto vypise mi to pekne nulovu maticu C vsetko ide pocet riadkov stlpcov je super iba teraz vediet ako zapisat ten sucin.
#include <stdio.h>
#include <stdlib.h>
#include "Matice.h"
int main()
{
int PocetRiadkovA=0;
int PocetStlpcovA=0;
int PocetRiadkovB=0;
int PocetStlpcovB=0;
int i=0;
int j=0;
int k=0;
printf("Program na sucet 2 matic\n");
printf("Zadaj pocet riadkov matice A: ");
scanf("%d",&PocetRiadkovA);
printf("Zadaj pocet stlpcov matice A: ");
scanf("%d",&PocetStlpcovA);
printf("Zadaj pocet riadkov matice B: ");
scanf("%d",&PocetRiadkovB);
printf("Zadaj pocet stlpcov matice B: ");
scanf("%d",&PocetStlpcovB);
if(PocetStlpcovA!=PocetRiadkovB)
{
printf("MaticaA nema tolko stlpcov kolko MaticaB riadkov");
return 0;
}
int MaticaA[PocetRiadkovA][PocetStlpcovA];
int MaticaB[PocetRiadkovB][PocetStlpcovB];
int MaticaC[PocetRiadkovA][PocetStlpcovB];
for(j=0;j<PocetRiadkovA;++j) //nacitanie MaticeA
{
for(i=0;i<PocetStlpcovA;++i)
{
printf("MaticaA - Zadaj %d. stlpec riadku %d: ",i+1,j+1);
scanf("%d",&MaticaA[j][i]);
}
}
printf("\n");
for(j=0;j<PocetRiadkovA;++j) //vypis MaticeA
{
for(i=0;i<PocetStlpcovA;++i)
{
printf("%d",MaticaA[j][i]);
}
printf("\n");
}
printf("\n");
for(j=0;j<PocetRiadkovB;++j) //nacitanie MaticeB
{
for(i=0;i<PocetStlpcovB;++i)
{
printf("MaticaB - Zadaj %d. stlpec riadku %d: ",i+1,j+1);
scanf("%d",&MaticaB[j][i]);
}
}
printf("\n");
for(j=0;j<PocetRiadkovB;++j) //vypis MaticeB
{
for(i=0;i<PocetStlpcovB;++i)
{
printf("%d",MaticaB[j][i]);
}
printf("\n");
}
for(j=0;j<PocetRiadkovA;++j) //Nasobenie MaticeA a MaticeB
{
for(i=0;i<PocetStlpcovB;++i)
{
MaticaC[j][i]=0;
}
}
printf("\n");
for(j=0;j<PocetRiadkovA;++j) //vypis matice C teda vysledku
{
for(i=0;i<PocetStlpcovB;++i)
{
printf("%d",MaticaC[j][i]);
}
printf("\n");
}
return 0;
}
A co to teda po tom součinu vypisuje?
no sucin neviem spravit :D to vypisuje iba tu prazdnu maticu C ktora obsahuje same nuly
Co vypisuje ten tvůj původní program?
ked som mal MaticuA 123 a MaticuB 12 vysledok znel 20012833502001103052
456 34 8164
56
no super zle mi to odriadkovalo -_-
A už jsi do toho původního programu přidal to vynulování?
To neni mozne to funguje! :D no ale akoze to som teda necakal ked som to vymyslal :D wow :D diky za rady :)
No a pro příště se těmi radami řiď hned na začátku. Tu nulování jsi tam měl přidat už před hodinou.