Go Down

Topic: piccolo problemino con una funzione matematica (Read 626 times) previous topic - next topic

ghery82


int HH[2];

int tempH;

int tempH1;

int tempH2;

int tempH3;

---------------------------------------

tempH1=HH[0]*36000;
tempH2=HH[1]*3600;
tempH3=tempH1+tempH2;
tempH=tempH3/3600;

se inserisco dal tastierino prima 0 (HH[0]) e poi 9 (HH[1]) il risultato di tempH è 9
se inserisco dal tastierino prima 1 (HH[0]) e poi 0 (HH[1]) il risultato di tempH è -8

perchè?

Perinerzia

Ciao! Intanto forse dovresti fare un po' di pulizia, troppe variabili per un solo conto, basta che scrivi:

tempH=HH[0]*10+HH[1];

Comunque dovresti controllare se effettivamente HH[0] è 1 e HH[1] è 0

ghery82

adesso faccio questa prova e vediamo che risultato mi da .. cmq si sono sicuro ho fatto tutte le prove

astrobeed


perchè?


1*36000 = 36000, una variabile int può rappresentare al massimo un numero compreso tra 32767 e -32768, 36000 corrisponde a -29536 e da qui il risultato -8, la parte decimale viene troncata, quando dividi per 3600, devi usare variabili "unsigned int".


Perinerzia


1*36000 = 36000, una variabile int può rappresentare al massimo un numero compreso tra 32767 e -32768, 36000 corrisponde a -29536 e da qui il risultato -8, la parte decimale viene troncata, quando dividi per 3600, devi usare variabili "unsigned int".

Giusto! Non ci avevo mica pensato...
Comunque se non hai bisogno di tempH1 tempH2 tempH3 per altre cose puoi tranquillamente usare la formula che ho scritto prima lasciando le costanti int

ghery82

e se devo far spuntare sull'LCD la variabile tempH con lo 0 davanti quando essa è minore di 10?
esiste una funzione particolare ?

Perinerzia

Beh, puoi metterci una condizione: se tempH minore di 10 stampa "0" e poi tempH. Credo ci siano altri modi per stampare una variabile con il numero di cifre che ti pare, ma non sono sicurissimo, sicuramente con l'if funziona  :)



Go Up