PDA

Visualizza la versione completa : [c] problema determintante matrice


razzoman
23-11-2013, 09:33
ciao a tutti, devo creare un programma che da file prenda gli elementi di una matricce quadrata e restituisca il det. ora l algoritmo credo sia giusto,ma mi da un warning (nn facendo funzionare il programma)


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int matri(int **M,int rc);
int finale(int **M);


int main(int argc,char *argv[])
{
int **M;
int i,j,rc;
FILE *f;
int prova=0;
f=fopen(argv[1],"r");
while(!feof(f))
{
fscanf(f,"%d",&prova);
prova++;
}
rc=sqrt(prova);
rewind(f);
M=(int**)malloc(rc*sizeof(int*));
for(i=0; i<rc; i++)
{
M[i]=(int*)malloc(rc*sizeof(int));
for(j=0; j<rc; j++)
{
fscanf(f,"%d",&M[i][j]);
}
}
printf("%d",matri(M,rc)) ;
return 0;
}
int matri(int **M,int rc)
{
int sommam=0;
int **TEM;
int i,j,k,r,c;


if (rc==2)
{
return finale(M);
}
TEM=(int**)malloc((rc-1)*sizeof(int*));
for(k=0; k<rc; k++)
{
r=0;
c=0;
for(i=1; i<rc; i++)
{ TEM[i]=(int*)malloc((rc-1)*sizeof(int));
for(j=0; j<rc; j++)
{


if(j!=k)
{
TEM[r][c]=M[i][j];
c++;
}
if(c==rc-1)
{
r++;
c=0;
}
}
}


sommam=sommam+pow(-1,k)*(M[0][k])*matri(TEM,rc-1);








}




return sommam;


}
int finale(int **M)
{


return M[0][0]*M[1][1] -M[0][1]*M[1][0];
}






grazie a tutti

oregon
23-11-2013, 09:56
Quale warning?

razzoman
23-11-2013, 09:59
Quale warning?
scusa l ho scritto nel programma e non nell introduzione,mi dice che la variabile tem potrebbe essere non usata (è dentro la funzione matri)
edit: ho trovato il problema (ora ho zero warning,non alloccavo la matrice tem) ma il programma nn funge lo stesso!

oregon
23-11-2013, 10:20
Ok ... ma "non funziona" non chiarisce il problema.

Quali dati fornisci e cosa ottieni per dire che non funziona?

razzoman
23-11-2013, 10:24
Ok ... ma "non funziona" non chiarisce il problema.

Quali dati fornisci e cosa ottieni per dire che non funziona?
metto una matrice 3*3 di det 0 (la matrice è data dagli elementi
1 2 3
0 0 0
2 3 4 )
e il programma mi da come risultato -6

oregon
23-11-2013, 10:41
Hai fatto un po' di debugging per seguire passo passo il calcolo ?

razzoman
23-11-2013, 10:44
Hai fatto un po' di debugging per seguire passo passo il calcolo ?
non ce l hanno ancora spiegato all uni,non so dove mettere le mani

oregon
23-11-2013, 10:51
Non

for(i=1; i<rc; i++)

ma

for(i=0; i<rc; i++)

razzoman
23-11-2013, 11:01
Non

for(i=1; i<rc; i++)

ma

for(i=0; i<rc; i++)
ho provato a fare il debug e ora il programma non va proprio più!( i lo faccio partire da 1 e non da 0 perchè così mi salta direttamente la riga per il determinante della matrice,cmq provo anche come dici te,grazie)
forse ho trovato l errore,facendo il debug,per contare quanti elementi c erano nella matrice mettevo un intero di prova e siccome so che era una matrice quadrata il suo quadrato mi darà il nunero di riga e colonna. il problema era che facevo fscanf(f,%d,prova) prova++, facendo ovviamente sballare i valori,ora però metto fscanf(f,%d,c)prova++;ma il programma mi da 0 errori ma nell avviarlo mi dice errore memoria non può essere written

oregon
23-11-2013, 11:10
Hai modificato la for che ti ho detto?

Loading