do tej pory zrobilem dodawanie,odejmowanie i mnozenie.
chcialbym dodac macierz symetryczna oraz macierz odwrotna
macierz ma byc kwadratowa, nie jest to z gory ustalone(jak w tym przypadku 3x3) powinna rowniez dzialac np 10x10
ma ktos pomysl jak sie do tego zabrac?
myslalem nad takim rozwiazaniem macierzy odwrotnej jak w 2 poscie tutaj:
[url]http://www.matematyka.pl/45016.htm[/url]
czy radzicie cos innego ?
czytelny kod//www.wklejto.pl/145468[/url]
lub w code:
#ifndef __matrix_h
#define __matrix_h
#include "vector.h"
struct sMatrix{
sVector*row;
int size;
};
sMatrix CreateMatrix(int size);
sMatrix dodawanie(sMatrix A, sMatrix B, int size);
sMatrix odejmowanie(sMatrix A, sMatrix B, int size);
sMatrix mnozenie(sMatrix A, sMatrix B, int size);
void showMatrix(sMatrix A,int size);
void delMatrix(sMatrix A);
#endif
#ifndef _Vector_H_
#define _Vector_H_
struct sVector{
float*col;
int size;
};
sVector create(int size);
#endif
/// matix.cpp
#include "matrix.h"
#include "vector.h"
#include <iostream>
using namespace std;
sMatrix CreateMatrix(int size){
sMatrix macierz;
macierz.size=size;
macierz.row=new sVector[size];
for(int i=0;i<size;i++){
macierz.row[i]=create(size);
}
return macierz;
}
sMatrix dodawanie(sMatrix A, sMatrix B, int size)
{
sMatrix C;
C=CreateMatrix(size);
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
C.row[i].col[j]=A.row[i].col[j]+B.row[i].col[j];
}
}
return C;
}
sMatrix odejmowanie(sMatrix A, sMatrix B, int size)
{
sMatrix C;
C=CreateMatrix(size);
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
C.row[i].col[j]=A.row[i].col[j]-B.row[i].col[j];
}
}
return C;
}
sMatrix mnozenie(sMatrix A, sMatrix B, int size){
sMatrix C;
C=CreateMatrix(size);
for(int j=0;j<size;j++){
for(int i=0;i<size;i++){
C.row[i].col[j]=0;
}
}
for(int j=0;j<size;j++){
for(int i=0;i<size;i++){
for(int k=0;k<size;k++){
C.row[i].col[j]+=A.row[i].col[k]*B.row[k].col[j];
}
}
}
return C;
}
void showMatrix(sMatrix A,int size){
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
cout<<A.row[i].col[j]<<" ";
}
cout<<endl;
}
}
void delMatrix(sMatrix A){
for(int i =0;i<A.size;i++)
delete [] A.row[i].col;
delete[] A.row;
}
//vector .cpp
#include "vector.h"
#include <cstdlib>
sVector create(int size){
sVector wektor;
wektor.size=size;
wektor.col=new float[size];
for(int i=0;i<size;i++)
wektor.col[i]=rand()%21;
return wektor;
}
/// main.cpp
#include <cstdlib>
#include <iostream>
#include "matrix.h"
#include <ctime>
using namespace std;
int main(){
srand(time(NULL));
sMatrix A,B,C;
A=CreateMatrix(3);
B=CreateMatrix(3);
showMatrix(A,3);
cout<<endl;
showMatrix(B,3);
cout<<endl<<"oto dwie losowe macierze(od 0 do 20) o wymiarach 3x3.\n";
while(1){
cout<<" Wybierz 1 by je dodac, 2 by je od siebie odjac, 3 by je wymnozyc, 'x' aby wyjsc\n";
char wybor=getchar();
switch(wybor){
case '1':
C=dodawanie(A,B,3);
showMatrix(C,3);
break;
case '2' :
C=odejmowanie(A,B,3);
showMatrix(C,3);
break;
case '3' :
C=mnozenie(A,B,3);
showMatrix(C,3);
break;
case 'x': case 'X':
cout<<"koniec";
delMatrix(A);
delMatrix(B);
delMatrix(C);
return 1;
}
cin.ignore();
}
}