Pages: [1]   Go Down
Author Topic: piccolo problemino con una funzione matematica  (Read 614 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


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è?
Logged

Albenga (SV) / Torino, Italy
Offline Offline
Newbie
*
Karma: 0
Posts: 39
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9653
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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".

Logged

Albenga (SV) / Torino, Italy
Offline Offline
Newbie
*
Karma: 0
Posts: 39
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Albenga (SV) / Torino, Italy
Offline Offline
Newbie
*
Karma: 0
Posts: 39
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

grazie per l'idea smiley
Logged

Albenga (SV) / Torino, Italy
Offline Offline
Newbie
*
Karma: 0
Posts: 39
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Figurati, alla prossima! smiley
Logged

Pages: [1]   Go Up
Jump to: