Potreboval by som to pomoct skompilovat aby mi to islo a pripadne ci mam dobre spravenie nasobenie matic dakujem.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void scitanie(int *ma,int *mb, int *mc, int r,int s) //Funkcia pre scitanie
{
int g,j,z=0; //Deklaracie premennych pre cykly + nulovanie premenej "z"
for(g=0;g<r;g++) //Cyklus bude pracovat kym i<r a j<s
{ //"r"-pocet riadkov, "s"- pocet stlpcov
for(j=0;j<s;j++)
{
*(mc+z)=*(mb+z)+*(ma+z); //vypocet,ktory funkcia vykona
z++; //zvysovanie premennej "z" o 1
}
}
}
void odcitanie(int *ma,int *mb, int *mc, int r, int s) // Funkcia pre odcitanie
{
int g,j,z=0;
for(g=0;g<r;g++)
{
for(j=0;j<s;j++)
{
*(mc+z)=*(ma+z)-*(mb+z); //vypocet,ktory funkcia vykona
z++; //zvysovanie premennu "z" o 1
}
}
void nasob(int *ma,int *mb, int *mc, int r, int s)
{
int i,j,g,k,m,n,x;
for (g=0; g<m+1;g++)
for (j=0; j<n+1; j++)
*mc = 0;
for (i=0; i<m; i++)
for (j=0; j<x; j++)
for (k=0; k<x; k++)
*mc+=*ma * *mb;
printf("Sucin matic m.1 a m.2 je v matici m.3\n");
printf ("\n");
}
int main()
{
int g,j; //Deklaracia premennych pre cykly
int m,n;
int y,x; //Deklaracia premennych pre pocet riadkov a stlpcov
int moznost; //deklaracia premennej pri funkcii switch
FILE *subor; //deklaracia suboru
subor=fopen("vypis.txt","w"); //otvorenie suboru s parametrom write
printf("\nToto je program na scitovanie a odcitovanie dvoch matic.\n"); //vypis na obbrazovku
printf("\n\n Matica A a matica B sa zapisu do suboru vypis.TXT)");
printf("\n\n Zadajte pocet riadkov v matici A = ");
scanf("%d",&m); //zadavanie rozmeru matice z klavesnice
printf("\n Zadajte pocet stlpcov v matici A = ");
scanf("%d",&n);
printf("\n Zadajte pocet riadkov v matici B = ");
scanf("%d",&y);
printf("\n Zadajte pocet stlpcov v matici B = ");
scanf("%d",&x);
printf("\n Zadajte cisla matice A :\n");
int a[m][n],b[y][x]; //Deklaracia matic so zadanymi rozmermi
for (g=1;g<m+1;g++) //cyklus pre plnenie matice
{
for (j=1;j<n+1;j++) //cyklus pre plnenie matice
{
printf("\n Matica A: [%d,%d] = ",g,j); //vypis na obbrazovku suradnice prvkov matice A
scanf("%d",&a[g][j]); //cita cisla z klavesnice
}
}
printf("\n\n"); //vypis na obbrazovku
printf("\n Zadajte cisla matice B: \n"); //vypis na obbrazovku
for (g=1;g<y+1;g++) //cyklus pre plnenie matice
{
for (j=1;j<x+1;j++) //cyklus pre plnenie matice
{
printf("\n Matica B: [%d,%d] = ",g,j); //vypis na obrazovku suradnice prvku pola
scanf("%d",&b[g][j]); //citanie z klaves. cislo prvku pola
}
}
printf("\n Matica A = \n\n"); //vypis na obrazovku
fprintf(subor,"\n Matica A = \n\n"); //vypis do suboru
for (g=1;g<m;g++) //cykly pre vypis vybranych cisel na obrazovku
{
for (j=1;j<n;j++)
{
printf(" [%d]",a[g][j]); //vypise zvolene cisla
fprintf(subor," [%d]",a[g][j]); //vypise do suboru zvolene cisla
}
printf("\n"); //vynecha riadok
fprintf(subor,"\n"); //vynecha riadok
}
printf("\n Matica B = \n\n"); //obdobne ako pri matici A
fprintf(subor,"\n Matica B = \n\n"); //Vypis zvolenych prvkov
for (g=1;g<y;g++)
{
for (j=1;j<x;j++)
{
printf(" [%d]",b[g][j]);
fprintf(subor," [%d]",b[g][j]);
}
printf("\n");
fprintf(subor,"\n");
}
printf("\n Prosim vyberte si matematicku operaciu\n\n"); //vypis na obrazovku
printf("\n***...citanie matic...*** [1]\n"); //vypis na obrazovku
printf("\n***...odcitanie matic...*** [2]\n"); //vypis na obrazovku
scanf("%d",&moznost); //nacitanie cisla
switch(moznost){ //switch v tejto casti preskuma zvolene cislo
case 1:
{
int c[m][n]; //pri zvoleni 1 sa vykona nasledovne
if ((m == y)&&(n == x)) //porovna ci je rovnaky pocet riadkov a stlpcov matic
{
printf("\n Scitanie matic A,B:\n\n");
fprintf(subor,"\n Scitane matice A,B:\n\n");
scitanie(&a[1][1],&b[1][1],&c[1][1],m,n); //volanie funkcie scitanie
for (g=1;g<m+1;g++){ //cykly pre vypis vyslednej matice na obrazovku
for (j=1;j<n+1;j++){
printf(" [%d]",c[g][j]);
fprintf(subor," [%d]",c[g][j]);
}
printf("\n");
fprintf(subor,"\n");
}
}
else{ //V pripade ze nie su rovnake matice tak vypise nasledovne
printf("\n Nemozem scitat matice!!! "); //Vypis na obrazovku
printf("\n Stlacte akukolvek klavesu pre koniec programu!");
}
break; //Ukoncenie tejto casti / klaves 1
}
case 2:{int c[m][n]; //Deklaracia vyslednej matice
if ((m == y)&&(n == x)) //Porovnanie riadkov a stlpcov
{
printf("\n Odcitanie matic A,B:\n\n");
fprintf(subor,"\n Odcitane matice A,B:\n\n");
odcitanie(&a[1][1],&b[1][1],&c[1][1],m,n); // zavola funkciu s nazvom odcitanie
for (g=1;g<m+1;g++) //cykly pre vypis
{
for (j=1;j<n+1;j++)
{
printf(" [%d]",c[g][j]); //vypis vyslednej matice na obrazovku
fprintf(subor," [%d]",c[g][j]); //zapis vyslednej matice do suboru vypis.txt
}
printf("\n");
fprintf(subor,"\n");
}
}
else //ak nie su rovnake pocty stlpcov a riadkov v maticiach
{ //tak vypise nasledovne
printf("\n Taketo rozmery matic sa nedaju odcitat!!! ");
printf ("\n Po stlaceni lubovolnej klavesy sa program ukonci!");
}
break; //Ukoncenie tejto casti / klaves 2
}
case 3:
{
int m,x,c[m][x]; //Deklaracia vyslednej matice
if ((n == x)) //Porovnanie riadkov a stlpcov
{
printf("\n Nasobenie matic A,B:\n\n");
fprintf(subor,"\n Nasobenie matic A,B:\n\n");
nasob(&a[1][1],&b[1][1],&c[1][1],n,x); // zavola funkciu s nazvom odcitanie
for (g=1;g<m+1;g++) //cykly pre vypis
{
for (j=1;j<y+1;j++)
{
printf(" [%d]",c[m][y]); //vypis vyslednej matice na obrazovku
fprintf(subor," [%d]",c[m][y]); //zapis vyslednej matice do suboru vypis.txt
}
printf("\n");
fprintf(subor,"\n");
}
}
else //ak nie su rovnake pocty stlpcov a riadkov v maticiach
{ //tak vypise nasledovne
printf("\n Taketo rozmery matic sa nedaju odcitat!!! ");
printf ("\n Po stlaceni lubovolnej klavesy sa program ukonci!");
}
break;
}
default:
{ //V pripade, ze bola zvolena zla moznost
printf("\n Zadali ste nespravnu volbu!!!"); //vypise tento text na obrazovku
printf("\n Po stlaceni lubovolnej klavesy sa program ukonci!");
}
}
fclose(subor); //Uzavrie otvoreny subor vypis.txt
getch(); //Ukoncenie programu lubovolnym klavesom
return 0;
}
}