PDA

Visualizza la versione completa : [C] Matrici ed eliminazione di gauss


danlis
26-10-2009, 22:33
ciao a tutti ,giusto per imparare sto realizzando un " pacchetto " dii programmi in C che abbia le seguenti caratteristiche:

uno dei programmi legge da file una matrice quadrata (scritta da un altro prog con successo) e scrive su un altro file il risulatato della eliminazione di gauss (senza pivotng ma la versione semplificata)..
ed il valore deldeterminante....


lo scopo è di ripetere l'esecuzione del pacchetto un numero grande di volte e siccome la matrice di partenza è sempre diversa , studiare la distribuzione o istogramma del determinante .....


mi potete dare qualche consiglio? e poi guardate cosa mi da in output il programma (che è compilato senza errori)

velo posto
ma premetto che questa versione è di prova: nn dovrebbe applicare nessun algoritmo alla matrice ma solo ristamparla ugualle in un altro file,,,,giusto per vedere l'uso di fscanf con gli array...poi parliamo della eiminazione se vedo che nn trovo soluzioni
grazie in anticipo



#include <stdio.h>
#include <stdlib.h>


#define MAXCOL 10


int i,j;
double mat[MAXCOL][MAXCOL];
double triang[MAXCOL][MAXCOL];
double det ;


double eliminazione (double mat[MAXCOL][MAXCOL]);
double determinante (double triang[MAXCOL][MAXCOL] );



int main (){
double det ;
double mat [MAXCOL][MAXCOL];

FILE *outfile ;
FILE *outfile1 ;
outfile1 = fopen("matrici.dat", "r");
outfile = fopen("det.dat", "w");



for (i=0 ; i<MAXCOL;i++){
for (j= 0; j< MAXCOL;j++){
fscanf(outfile1, "%f \n ", &mat[i][j]);
printf("%f " , mat [i][j]);

}

printf("\n");

}

/*
for (i=0 ; i<MAXCOL;i++){
for (j= 0; j< MAXCOL;j++){


fprintf (outfile ,"%f ",mat[i][j] );
}
fprintf(outfile, "\n ");
}
*/
triang[i][j] = eliminazione (mat) ;

det = determinante (triang);
//printf("\n\n\n" );
// printf("%f\n", det );
fclose (outfile);
fclose (outfile1);
return 0;
}


double eliminazione ( double mat [MAXCOL][MAXCOL]) {
int i,j,k;
double triang [MAXCOL][MAXCOL];
double tmp[MAXCOL][MAXCOL];



for (k=0 ; k < MAXCOL; k++){

for (i = k +1 ;i < MAXCOL; i++){



tmp [i][k] = mat[i][k] ;

for (j = k; j < MAXCOL +1 ; j ++ ){
//triang [i][j] = - tmp/ mat[i][k] ;
}
}
}

return triang[MAXCOL][MAXCOL] ;

}

double determinante (double triang [MAXCOL][MAXCOL]){
int i;
double det = 1;
for (i =0 ; i< MAXCOL ; i++){
det *= triang [i][i];
}

return det;
}

mxa
26-10-2009, 23:11
1) forum sbagliato
2) usa i tag code!

LeleFT
27-10-2009, 09:12
Invito anche a leggere il Regolamento interno (http://forum.html.it/forum/showthread.php?s=&threadid=973887) per conoscere le norme di partecipazione.

I tag CODE li aggiungo io, come il linguaggio di programmazione nel titolo (che provvederò a sistemare, per dargli una forma consona).

PS: L'output del programma lo devi postare tu... non puoi chiedere alla gente di copiare/incollare, compilare ed eseguire il tuo codice.


Ciao. :ciauz:

Loading