SUNDEC
Messages postés13Date d'inscriptionlundi 28 juillet 2008StatutMembreDernière intervention 5 février 2010
-
24 janv. 2010 à 16:51
SUNDEC
Messages postés13Date d'inscriptionlundi 28 juillet 2008StatutMembreDernière intervention 5 février 2010
-
27 janv. 2010 à 18:35
Bonjour. Je demande de l'aide pour transformer des degres sexagésimaux sous une entrrée
DD.MMSS (MM= minutes, SS=secondes) ex;: 44°10'00'' donc 44.1000 en valeur décimales.
réponse: 44.167
C'est en BASIC tout simple, et non en VB que je voudrais le code.
Le code que j'ai ecrit est faux et je ne sais d'ou vient l'erreur
TU =INT(HH)+((INT(100*HH)/100)-INT(HH))/.6+(100*HH-INT(100*HH))/36:PRINT"TU=":PRINT TU
Merci d'avance.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 24 janv. 2010 à 17:14
Bonjour,
J'ignore ce que TU entends par correspondance décimales, mais c'est pour moi (avec ton exemple) :
:
((44 * 3600) + (10 * 60) + (0 * 60)) / 3600 =====>> 44,6666666666666... et non 44,1000
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Salut ucfoutu
ton résultat et ta formule sont faux
1° Il ne faut pas multiplier les secondes par 60
2° Il ne sert à rien de multiplier les degrès par 3600 pour ensuite les rediviser par 3600
44 + ((10 * 60) + 0) / 3600) =====>> 44,1666666666666... arrondi à 4,167
soit D les degrès, M les minutes et S les secondes la formules est
TU = D + ((M * 60) + S) / 3600)
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 24 janv. 2010 à 17:50
Salut Alain,
Ouais, je suis allé trop vite
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
SUNDEC
Messages postés13Date d'inscriptionlundi 28 juillet 2008StatutMembreDernière intervention 5 février 2010 24 janv. 2010 à 17:51
Ah! la calculette donne 44.1666 .Le chiffre à transformer est bien 44.1000 (en notation DD.MMSS) ce qui donne bien 44.167 en notation décimale
44*3600=158400
10*60=600
00 =00
SOIT 159000/3600=44.167
cela dit, ma ligne de code est fausse et je me casse la tête à trouver où est la faute.
Merci en tout cas!
Vous n’avez pas trouvé la réponse que vous recherchez ?
SUNDEC
Messages postés13Date d'inscriptionlundi 28 juillet 2008StatutMembreDernière intervention 5 février 2010 24 janv. 2010 à 18:02
NB J'ai oublié de préciser que les degres, minutes secondes sont demandés dans l'input sous la forme DD.MMSS Certes on peut changer l'input et entrer les degres d'abord puis les minutes et enfin les secondes pour simplifier le code. Mais si on garde l'input sous la forme DD.MMSS il faut décomposer la formule et le programme doit "détricoter" chacun des termes. d'ou la succession de ))) qui me perturbe
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 24 janv. 2010 à 18:35
Marche bien (44.166667) si l'on remplace HH par 44.1000 dans la formule de casy
Observation sous VB
Si on type HH en single ===>> en effet : 44.177
Si, par contre (logique) on le type en double ===>> 44.166667
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 24 janv. 2010 à 20:54
Dans le cas présent, la perte de précision dans le calcul vient de l'opération HH-INT(HH) soit pour ce cas particulier 44.1-44
Si 44.1 est représenté par une variable de type Double on aura pour résultat 0,100000000000001, si elle est représenté par un Single, on aura 9,999847E-02
Et donc ensuite multiplié par 100 puis 60, ça donne respectivement 600 et 540
[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
SUNDEC
Messages postés13Date d'inscriptionlundi 28 juillet 2008StatutMembreDernière intervention 5 février 2010 25 janv. 2010 à 09:21
Bonjour.Merci de suivre ce problème. Je crois qu'on approche. Voici le code que je viens d'utiliser:
DEFDBL A-Z
H = 44.1
TU# = (INT(H) * 3600 + INT((H - INT(H)) * 100) * 60 + ((H - INT(H)) * 100 - INT((HH - INT(H)) * 100)) * 100) / 3600
PRINT TU#
A#= (INT(H) * 3600)
B#= INT((H - INT(H)) * 100) * 60
C#= ((H - INT(H)) * 100 - INT((HH - INT(H)) * 100) * 100) / 3600
PRINT A#+B#+C#
Voici les réponses de BASIC
Press any key to continue
166.649995761448 (TU# ......!!!!)
158400 (oui)
540 (Devrait être 600
122.224999957615 (faux de toute evidence)
159062.224999958 (devrait être 159000)
PRINT A# + B# + C#
et la réponse:
44.1777735392253
158400
540 'memes comments
122.224999957615 (meme comments le dernier terme est faux)
159062.224999958
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 25 janv. 2010 à 09:38
Essayye d'affubler HH du signe # (HH#) dans la formule de Casy.
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
SUNDEC
Messages postés13Date d'inscriptionlundi 28 juillet 2008StatutMembreDernière intervention 5 février 2010 25 janv. 2010 à 17:30
A 42wawa42
ça marche, a condition de ne rentrer que des degres et des minutes. Il faut aussi corriger les secondes.
Ex: 34°22'45"
SOIT en input 34.2245
le resultat correct est 34.37916