Witam :)
Dostalem zadanie, by napisac kalkulator macierzy wykonujacy 7 dzialan - mnozenie macierzy (takze macierzowo - nie wiem o co chodzi), mnozenie przez wektor, mnozenie przez skalar, a poza tym dodawanie, odejmowanie, transponowanie. Cos tam naskrobalem, jednak duuzo mojemu programowi brakuje, a jego najwiekszym mankamentem jest to, ze wyrzuca kompletnie losowe liczby albo same 0. Najprawdopodobniej wynika to z jakiegos mojego niedopatrzenia, albo calosc jest napisana po prostu zle. Jednak ja nie potrafie znalezc bledu i bylbym wdzieczny gdyby ktos moglby mi pomoc ;) poza tym program ma pamietac ostatni wynik i pozwalac na jego wykorzystanie przy kolejnym dzialaniu i ma nie zakladac poprawnosci danych - to drugie musze jeszcze dopisac. A oto kod:
#include <stdio.h>
#define SMAX 10
int wa=0, wb=0, ka=0, kb=0, wc=0, kc=0, i, j, l, koniec=0, wybor;
double A[SMAX][SMAX], B[SMAX][SMAX], C[SMAX][SMAX];
int main(void)
{
do{
printf("1 - nowe macierze\n");
printf("2 - wykorzystanie wyniku\n");
scanf("%d", &wybor);
switch(wybor){
case 1://nowe macierze
{
printf("Wymiary macierzy nie moga przekraczac wartosci = 10\n");
printf("Podaj liczbe wierszy macierzy A: ");
scanf("%d", &wa);
printf("Podaj liczbe kolumn macierzy A: ");
scanf("%d", &ka);
printf("Uzupelnij macierz A:\n");
for(i=0; i<wa; i++){
for(j=0; j<ka; j++)
scanf("%f", &A[i][j]);}
printf("Na ilu macierzach bedziesz operowac?\n");
scanf("%d", &wybor);
switch(wybor){
case 1:
break;
case 2:
{
printf("Wymiary macierzy nie moga przekraczac wartosci = 10\n");
printf("Podaj liczbe wierszy macierzy B: ");
scanf("%d", &wb);
printf("Podaj liczbe kolumn macierzy B: ");
scanf("%d", &kb);
printf("Uzupelnij macierz B:\n");
i=0; j=0;
for(i=0; i<wb; i++){
for(j=0; j<kb; j++)
scanf("%f", &B[i][j]);}
break;}
default: break;}
break;
}
case 2://wykorzystanie wyniku - do dopisania pozniej
{
break;
}
default:
break;
}
printf("**Kalkulator macierzy**\n");
printf("**********MENU*********\n");
printf("Wybierz rodzaj dzialania\n");
printf("1 - Mnozenie macierzy\n");
printf("2 - Mnozenie macierzowo\n");
printf("3 - Mnozenie przez wektor\n");
printf("4 - Mnozenie przez skalar\n");
printf("5 - Dodawanie macierzy\n");
printf("6 - Odejmowanie macierzy\n");
printf("7 - Transponowanie macierzy\n");
scanf("%d", &wybor);
switch(wybor)
{
case 1://mnozenie zwykle
break;
case 2://mnozenie macierzowo
{
for(i=0; i<wa; i++){
for(j=0; j<ka; j++)
C[i][j]=0;}
for(i=0; i<wa; i++)
for(j=0; j<wa; j++){
for(l=0; l<ka; l++)
C[i][j] += A[i][l] * B[l][j];}
break;
}
case 3://mnozenie przez wektor
break;
case 4://mnozenie przez skalar
{
double skalar=0;
printf("Podaj liczbe, przez ktora chcesz pomnozyc macierz: ");
scanf("%f", &skalar);
for(i=0; i<wa; i++){
for(j=0; j<ka; j++){
C[i][j]=A[i][j]*skalar;}}
break;
}
case 5://dodawanie
{
if ((wa=wb) && (ka=kb)){
for(i=0; i<wa; i++){
for(j=0; j<ka; j++){
C[i][j] = A[i][j] + B[i][j];}}
wc=wa;kc=ka;}
else
printf("Wymiary macierzy sie nie zgadzaja.");
break;
}
case 6://odejmowanie
{
for(i=0; i<wa; i++){
for(j=0; j<ka; j++){
C[i][j] = A[i][j] - B[i][j];}}
break;
}
case 7://transponowanie
{
for(i=0; i<wa; i++){
for(j=0; j<ka; j++){
A[i][j]=C[j][i];}}
wc=wa;kc=ka;
break;
}
default:
break;
}
printf("Twoj wynik to:\n");
for(i=0; i<3; i++)
for(j=0; j<3; j++)
printf("c%d%d=%f\n",i+1,j+1,C[i][j]);
printf("\n");
printf("Czy chcesz wykorzystac wynik w kolejnym dzialaniu?\n");
printf("0 - konczy\n");
scanf("%d", &koniec);
}while(koniec!=0);
getchar();
return 0;
}