Odpowiedzi

Najlepsza Odpowiedź!
2009-09-10T18:50:05+02:00
#include <iostream.h>
#include <conio.h>
#include <math.h>

float det(float *point,int n);
float inv(float *point1, float *point2, int n);
void show(float *point,int y, int x);

int main()
{
int wymiar=4;

float Tab[4][4]={5,45,8,6,54,1,6,88,44,88,11,22,3,5,7,2};
float Tab1[4]={5,8,16,25};

float *wsk;
float *wsk1;

wsk=&Tab[0][0];
wsk1=&Tab1[0];

inv(wsk, wsk1, wymiar); //aby wykożystać funkcję det należy wpisać do wskaźnika adres komórki [0][0]
//a następnie wywołać funkcję costam=det(wsk,wymiar);
getch();
return 0;
}
//************************************************** *********************************
//************************************************** *********************************
//funkcje:
/*funkcja wyliczająca wyznacznik z macierzy*/
float det(float *point,int n)
{
float a[n][n];

for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
a[i][j]=*point;
*point++;
}

float det=1, zmienna;

for(int i=0;i<n;i++)
for(int w=i+1;w<n;w++)
for(int k=i;k<n;k++)
{
if(a[i][i]==0)
{
det=0;
break;
}
if(k==i) zmienna=a[w][i]/a[i][i];
a[w][k]=a[w][k]-(zmienna*a[i][k]);
}

for(int i=0;i<n;i++) det=det*a[i][i];
return det;
}
//************************************************** *********************************
//************************************************** *********************************
void show(float *point,int y, int x)
{
for(int i=0;i<y;i++)
{
for(int j=0;j<x;j++)
{
cout << "\t" << *point;
*point++;
}
cout << endl;
}
}
//************************************************** *********************************
//************************************************** *********************************
//*funkcja wyliczająca wyznacznik z macierzy
float inv(float *point1, float *point2, int n)
{
float a[n][n+1]; //deklaracja tablicy zorszeszonej o kolumne wyrazów wolnych
float b[n]; //deklaracja tablicy z wyrazami wolnymi
float wyniki[n],suma; //deklaracja zmiennych wyniki - tablica przechowywująca wyniki

for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
a[i][j]=*point1; //wpisanie do tablicy wartości macierzy współczynników
*point1++;
}
b[i]=*point2; //wpisanie do tablicy wartości wyrazów wolnych
*point2++;
a[i][n]=b[i]; //uzupełnienie tablicy a wyrazami wolnymi
}

point1=&a[0][0];
show(point1, n, n+1); //wyświetlenie tablicy rozszerzonej

float zmienna;
for(int i=0;i<n;i++)
for(int w=i+1;w<n;w++)
for(int k=i;k<=n;k++)
{
if(a[i][i]==0)
{
cout << endl << "nie ma rozwiązań lub nieskończenie wiele rozwiązań";
break;
}
if(k==i) zmienna=a[w][i]/a[i][i]; //zerowanie kolumn oraz wierszy
a[w][k]=a[w][k]-(zmienna*a[i][k]); //cd
if(k==i) a[w][k]=0; //cd
}


wyniki[n-1]=a[n-1][n]/a[n-1][n-1]; //wyliczenie wartości dla niewiadomej x-1
for(int i=(n-2);i>=0;i--) //pętla wyliczająca wartości niewiadomych x-2,x-3...0
{
suma=0; //pętla wyliczająca sumy potrzebne do obliczania niewiadomych
for(int j=1;j<n;j++)
{
suma=suma+a[i][n-j]*wyniki[n-j]; //wyliczanie sum
}
wyniki[i]=(a[i][n]-suma)/a[i][i]; //wyliczanie niewiadomych
}
}