Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C++] variabili che rimangono =0

    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:

    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 }
    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:

    codice:
    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...

  2. #2
    ti sposto in Programmazione, qui si parla solo di Visual Basic

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non capisco una cosa: perchè RIDEFINISCI la variabile max?

    Questo è il tuo codice:
    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ì:
    codice:
    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.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    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...

    Grazie ancora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.