PDA

Visualizza la versione completa : [C++] variabili che rimangono =0


re_arturo2000
22-10-2003, 13:40
Ciao, da un p di tempo ho un piccolo problemino che non riesco a risolvere. Ad es. ho tre lati di un triangolo e devo determinare qual' il pi grande e faccio:



1 double x,y,z,max;
2 main{
3 if(x>y && x>z)double max=x;
4 if(y>x && y>z)double max=y;
5 if(z>x && z>y)double max=z;
6 cout << max;
7 }


solo che max resta sempre uguale a zero. Tempo fa avevo trovato un espediente aggiungevo dopo la quinta linea double max=max; e tutto procedeva bene (perch non lo so). Ora, avendo fatto una classe triangolo quando vado a definire una funzione dove utilizzo il codice sopra per determinare il lato maggiore non posso utilizzare l'espediente di prima perch me lo considera come doppia dichiarazione di una variabile. Questa la funzione:



long double triangolo::area2(long double lato1,long double lato2,long double lato3){
long double max,ret0=0,ret=-1,ret2=-2;
if(lato1>lato2 && lato1>lato3)long double max=lato1;
if(lato2>lato1 && lato2>lato3)long double max=lato2;
if(lato3>lato1 && lato3>lato2)long double max=lato3;
long double condizione = (lato1+lato2+lato3) - (2*max);
if (condizione == 0){return ret0;}
if (condizione > 0){
long double pr=(lato1+lato2+lato3)/2;
long double a2=sqrt(pr*(pr-lato1)*(pr-lato2)*(pr-lato3));
return a2;
}
if (condizione < 0){return ret;}
else {return ret2;}
/* ***CODICI DI ERRORE***
Quando la funzione area2 assume i seguenti valori: 0 e -1 significa che i dati inseriti non consentono
di disegnare graficamente il triangolo, quindi il triangolo stesso non pu esistere.
ret0=0 : significa che la somma dei lati minori uguale al lato maggiore, quindi l'area
uguale a zero;
ret=-1 : significa che la somma dei lati minori pi piccola del lato maggiore, quindi
il triangolo non pu esistere;
ret2=-2 : errore imprevisto;
*/
}


Qualcuno sa come si possa fare perch max non resti uguale a zero?
Grazie... :dh: :dh: :dh:

ladyBlu
22-10-2003, 14:10
ti sposto in Programmazione, qui si parla solo di Visual Basic ;)

LeleFT
22-10-2003, 15:27
Non capisco una cosa: perch RIDEFINISCI la variabile max?

Questo il tuo codice:


1 double x,y,z,max;
2 main{
3 if(x>y && x>z)double max=x;
4 if(y>x && y>z)double max=y;
5 if(z>x && z>y)double max=z;
6 cout << max;
7 }


Io l'avrei fatto cos:


1 double x,y,z,max;
2 main{
3 if(x>y && x>z) max=x;
4 if(y>x && y>z) max=y;
5 if(z>x && z>y) max=z;
6 cout << max;
7 }


In fin dei conti, la variabile max l'hai gi dichiarata nella prima linea! Aggiungendo di nuovo double, la ridefinisci... perch? Riefindo la variabile max (anteponendo di nuovo il tipo double), si rientra nel caso della visibilit delle variabili nei blocchi di codice: la tua 'nuova' variabile max (creata all'interno del ramo then del tuo if) OSCURA la variabile globale... e dopo aver avuto il suo valore, cessa di esistere, per il codice esterno al tuo if (che vede quella globale, non ancora toccata).

Ho visto che hai fatto la stessa cosa per il codice sottostante... credo che il problema sia lo stesso.

Ciao.

re_arturo2000
22-10-2003, 17:22
Grazie!!! :) credevo che ogni volta che dovevo usare una variabile dovevo anche indicare il tipo, invece solo quando si dichiarano le varibili si deve indicare il tipo... :dh: :dh:

Grazie ancora :ciauz: :ciauz:

Loading