Zdravím, prosím vás, dělám program na sčítání, odčítání a
násobení matic. Se sčítáním a odčítáním není problém, ale s tím
násobením si vůbec nevím rady. Jakmile zadám násobení, tak mám problém
dokonce zadat druhou matici a vždycky to hodí chyby na standartní chybový
výstup. .
#include <stdio.h>#include <stdlib.h>#include "math.h"int r1,s1,r2,s2,r3,s3 = 0; //radky a sloupceint matice3[100][100]; //matice na scitani a odcitani a nasobenichar znamenko; // + - *int main (void){
printf("zadejte velikost matice:\n");
scanf("%i%i",&r1,&s1); //nacteni velikosti prvni matice
printf("matice 1 ma %i radku a %i sloupcu\n",r1,s1);
int **matice1 = (int **) malloc(sizeof(int *)*r1); //alokace prvni maticefor (int k=0; k<r1; k++){ //nacitani radku
printf("zadejte %i cisla %i radku\n",s1,k+1);
matice1[k] = (int*)malloc(sizeof(int)*s1);
for (int l=0; l<s1; l++){ //nacitani sloupcu
scanf("%i",&matice1[k][l]);
}
}
printf("Zadejte znamenko:\n");
scanf("%c%c",&znamenko,&znamenko); //nacteni znamenka
printf("Zadejte velikost druhe matice:\n");
scanf("%i%i",&r2,&s2); //nacteni druhe matice
printf("matice 2 ma %i radku a %i sloupcu\n",r1,s1);
int **matice2 = (int **) malloc(sizeof(int *)*r2);
for (int m=0; m<r1; m++){
printf("zadejte %i cisla %i radku\n",s2,m+1);
matice2[m] = (int*)malloc(sizeof(int)*s2);
for (int n=0; n<s1; n++){
scanf("%i",&matice2[m][n]);
}
}
if (znamenko == '+'){ //scitani maticif (r1 != r2 || s1 != s2){ //kdyz se nerovna pocet sloupcu, nebo radku
fprintf(stderr,"Error: Chybny vstup!");
return100;
}
printf("Vysledek scitani matic je:\n");
for (int k=0; k<r1; k++){
for (int l=0; l<s1; l++){
matice3[k][l] = matice1[k][l] + matice2[k][l];
if (l == s1 - 1){
printf("%i",matice3[k][l]);//vypsani matice bez mezer za poslednim cislembreak;
}
printf("%i ",matice3[k][l]);
}
printf("\n");
}
}
if (znamenko == '-'){ //odcitani maticif (r1 != r2 || s1 != s2){ //kdyz se nerovna pocet sloupcu, nebo radku
fprintf(stderr,"Error: Chybny vstup!");
return100;
}
printf("Vysledek odcitani matic je:\n");
for (int k=0; k<r1; k++){
for (int l=0; l<s1; l++){
matice3[k][l] = matice1[k][l] - matice2[k][l];
if (l == s2 - 1){
printf("%i",matice3[k][l]); //na konci posledniho cisla nesmi byt mezera!!break;
}
printf("%i ",matice3[k][l]);
}
printf("\n");
}
}
if (znamenko == '*')//Zasrane nasobeni!!if (r1 != s1 || r2 != s2){ //kdyz se nerovna pocet sloupcu, nebo radku
fprintf(stderr,"Error: Chybny vstup!");
return100;
}
if (r1 == s2 || s1 == r2){ //kdyz se radky prvni matice rovnaji sloupci druhe maticefor(int k=0; k<r1; k++){
for(int l=0; l<s2; l++){
for(int m=0; m<k; m++){
matice3[k][l] += matice1[k][m] * matice2[m][l];
}
printf("%i ",matice3[k][l]);
}
}
printf("\n");
}
return0;
}
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.