TRANSFORMER DEGRES SEX EN DECIMALES

SUNDEC Messages postés 13 Date d'inscription lundi 28 juillet 2008 Statut Membre Dernière intervention 5 février 2010 - 24 janv. 2010 à 16:51
SUNDEC Messages postés 13 Date d'inscription lundi 28 juillet 2008 Statut Membre Derniè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.

24 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
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
0
Profil bloqué
24 janv. 2010 à 17:45
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.

GRENIER Alain
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
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
0
SUNDEC Messages postés 13 Date d'inscription lundi 28 juillet 2008 Statut Membre Derniè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!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SUNDEC Messages postés 13 Date d'inscription lundi 28 juillet 2008 Statut Membre Derniè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
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
24 janv. 2010 à 18:06
ucfoutu> ton résultat est faux, c'est 44.166667 et non pas 44.66667
44.1000°DMS donne bien 44.16667°décimaux

Ta formule de calcul est d'ailleurs aussi fausse (aucune incidence de le cas présent) :

((44 * 3600) + (10 * 60) + (0 * 60)) / 3600


En transcrivant donc cette formule en BASIC "pur" comme dit notre amis, ça devrait donné ceci je pense :

TU==(INT(HH)*3600+INT((HH-INT(HH))*100)*60+((HH-INT(HH))*100 - INT((HH-INT(HH))*100))*100)/3600

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
24 janv. 2010 à 18:06
Arrrgg j'ai été trop lent à répondre apparement


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
SUNDEC Messages postés 13 Date d'inscription lundi 28 juillet 2008 Statut Membre Dernière intervention 5 février 2010
24 janv. 2010 à 18:16
A "CASY
Cette ligne de programme donne 44.177 et non 44.167
qui est exact. Il y a encore qqchose qui cloche.

NB Suis heUreux de voir que je ne suis pas le seul à parler en BASIC
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
24 janv. 2010 à 18:30
Testé à la main et avec Excel, la formule donne bien 44.166667

Vérifie que tu as bien recopier la formule correctement


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
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
0
SUNDEC Messages postés 13 Date d'inscription lundi 28 juillet 2008 Statut Membre Dernière intervention 5 février 2010
24 janv. 2010 à 19:46
Transformer en double? Que voulez vs dire?
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
24 janv. 2010 à 20:39
Single (en VB ou FLoat en C) est un nombre à virgule flottante simple précision codé sur 32 bits (4 octets)

Double est un nombre à virgule flottante double précision codé sur 64 bits (8 octets).
Voir la norme IEEE754

De part leur constitution ces nombres provoquent obligatoirement des arrondis dans les calculs, plus importants avec un single.


Quel est ta version du BASIC, ou le compilateur que tu utilise ou la machine cible ????


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
24 janv. 2010 à 20:42
http://www.progmatique.fr/article-39-Variables.html

____________________
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
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
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
0
SUNDEC Messages postés 13 Date d'inscription lundi 28 juillet 2008 Statut Membre Derniè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)
0
SUNDEC Messages postés 13 Date d'inscription lundi 28 juillet 2008 Statut Membre Dernière intervention 5 février 2010
25 janv. 2010 à 09:26
Encore une erreur. Pour DEFDBL j'ai changé HH en H
Le code est donc:
DEFDBL A-Z
H = 44.1
TU# = (INT(H) * 3600 + INT((H - INT(H)) * 100) * 60 + ((H - INT(H)) * 100 - INT((H - INT(H)) * 100)) * 100) / 3600
PRINT TU#
A# = (INT(H) * 3600): PRINT A#
B# = INT((H - INT(H)) * 100) * 60: PRINT B#
C# = ((H - INT(H)) * 100 - INT((HH - INT(H)) * 100) * 100) / 3600: PRINT C#

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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 228
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
0
42wawa42 Messages postés 143 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 6 septembre 2011
25 janv. 2010 à 13:09
hello Sundec

Voila
'h_m = heure.minute > variable single ou double
'h_d = heure.décimale > variable single ou double
h_m = 44.1
h_d = Int(h_m) + (((h_m - Int(h_m)) * 100) / 60)

A plus sur VBFrance
42wawa42
0
SUNDEC Messages postés 13 Date d'inscription lundi 28 juillet 2008 Statut Membre Derniè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

Tel qu'il est le code donne 34.37416
0
42wawa42 Messages postés 143 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 6 septembre 2011
26 janv. 2010 à 14:37
Hello Sundec

Voila,voila mais.....
'h_m = heure.minute > variable single ou double
'h_d = heure.décimale > variable single ou double
h_m = 34°22'45
h_d = Int(h_m) + (Int((h_m - Int(h_m)) * 100) / 60) + (Int((h_m * 100 - Int(h_m * 100)) * 100) / 3600)
le resultat correct est = 34.3791666666667............je pense bravo juste.. Sundec
A plus sur VBFrance
42wawa42
0