005
04.07.2003, 10:39 Uhr
daredevil
Speicherteufel
|
juhuu!
es klappt!
C++: |
#include "stdio.h"
double det(double*m,int n){ double*h,r=m[0]*m[3]-m[1]*m[2], loes; int i,j,k,x=n-1,b=1; if(n-2){ r=0; for(i=-1;++i<n;b=-b){ h=new double[x*x]; for(j=0;j<x;j++) for(k=0;k<x;k++) h[k+j*n-j]=m[(k<i?0:1)+n+k+j*n]; r+=b*m[ i ]*det(h,x); delete[]h; } } return r; }
double* Gleich(double*m, int n, double*v) { double oben, unten; double *speicher=new double[n*n]; double *loes=new double[n]; int i, j, k, z;
unten=det(m, n);
for(k=0; k<n; k++) { for(z=0; z<(n*n); z++) speicher[z]=m[z];
for(i=0, j=0; i<(n*n); i+=n, j++) speicher[j*n+k]=v[j];
oben=det(speicher, n); loes[k]=oben/unten; }
delete [] speicher; return loes; }
int main(){ double *matrix=new double[3*3]; double *beding=new double[3]; double *loes=new double[3]; int i;
//erste Zeile matrix[0]=6; matrix[1]=2; matrix[2]=-1; //zweite Zeile matrix[3]=9; matrix[4]=1; matrix[5]=3.5;
matrix[6]=3; matrix[7]=2; matrix[8]=4;
beding[0]=9; beding[1]=20.5; beding[2]=8;
loes=Gleich(matrix,3, beding);
for(i=0; i<3; i++) printf("x%d ist gleich: %.2f\n",i, loes[i]);
delete [] beding; delete [] loes; delete [] matrix; return 0; }
|
wie gesagt, optimierung ist nicht meine sache... -- tschüss, DareDevil Dieser Post wurde am 04.07.2003 um 10:40 Uhr von daredevil editiert. |