|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 417
|
[c++] Problema con funzione ricorsiva
Devo scrivere un programma che calcoli il determinante di una matrice al max 6*6 mediante una funzione ricorsiva.
Il codice della funzione che calcola il determinante che ho scritto è questo: Codice:
float determinante(float x[IMAX][IMAX], int n_rig)
{
float min_estratto[IMAX][IMAX];
float det;
int h=n_rig-1;
if (n_rig>2)
{
for (int n_col=0; n_col<IMAX; n_col++)
{
matrice_minore(x,min_estratto,n_col,h+1);
det=det+(x[n_rig][n_col]*pow(-1,n_col+n_rig)*determinante(min_estratto,h));
printf("\t\t%d\n",h);
}
h=h-1;
}
if (n_rig==2) return (x[0][0]*x[1][1]-x[0][1]*x[1][0]);
return det;
}
Il problema non è della funzione matrice_minore che mediante dei printf ho visto che funziona correttamente quanto della funzione determinante che mi restituisce sempre e comunque un valore del determinante uguale a zero. Cosa c'è che non va? |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
attento che non inizializzi det a zero.
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 417
|
Una variabile locale viene automaticamente inizializzata a zero.
Il problema è che non funge proprio la ricorsione... Perchè a det non viene assegnato questo valore? Codice:
det=det+(x[n_rig][n_col]*pow(-1,n_col+n_rig)*determinante(min_estratto,h)); |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
Quote:
![]() ommiodio ![]() scusa sa rotflo ma l'hai detto troppo convinto per non farmi ridere
|
|
|
|
|
|
|
#6 | |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Quote:
Infatti il seguente codice Codice:
void foo()
{
float f;
cout << f;
}
Codice:
1.#QNAN |
|
|
|
|
|
|
#7 | |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Re: [c++] Problema con funzione ricorsiva
Quote:
Ancora piu' dubbio quel pow(-1,...) , dovrebbe bastare qualcosa del tipo Codice:
det = det + x[n_rig][n_col]*determinante(min_estratto); |
|
|
|
|
|
|
#8 | |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Quote:
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 417
|
l'h la passo a n_rig
Il pow serve perchè x[n_rig][n_col] deve essere alternativamente positiva e negativa. Cmq Marco grazie per l'aiuto. |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Al posto di pow(-1,n_col+n_rig) metti:
Codice:
inline float pow_minus1(const int riga, const int colonna)
{
return (float)((riga+colonna)&0x1)?-1:1;
}
|
|
|
|
|
|
#11 | ||
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Quote:
Quote:
|
||
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 417
|
Quote:
Codice:
int h=n_rig-1; Codice:
h=h-1; determinante(min_estratto,n_rig-1)? |
|
|
|
|
|
|
#13 | |
|
Member
Iscritto dal: Nov 2003
Messaggi: 42
|
Quote:
__________________
ANGI |
|
|
|
|
|
|
#14 | |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Quote:
(pensavo a qualcosa del tipo ((riga+colonna)&0x1)*2-1)) |
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Quote:
Con un "profiler". Mi ricordo che ne esisteva uno gratise. |
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Ultima modifica di cionci : 23-03-2004 alle 18:36. |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 417
|
C'è l'ho fatta!!!
Grazie per l'aiuto! |
|
|
|
|
|
#18 | |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Quote:
|
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 417
|
Ho riscritto il programma da zero.
C'erano vari errori cmq non grossolani... Ti allego il file .cpp così mi dai un parere |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 417
|
Ecco il file
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:08.




















