Misez P'tit, Optimisez - N°26 (Calcul d'heures de vol)

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Répondre
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3644
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Misez P'tit, Optimisez - N°26 (Calcul d'heures de vol)

Message par Hobiecat »

Allez un dernier MPO avant la fin du monde ! :mrgreen:

On entre une heure de départ et une heure d'arrivée d'un vol : soit heure1/minutes1 et heure2/minutes2, à rentrer sous forme de 4 données (donc pile remplie pour les RPN et 4 variables pour les BASIC)

L'objectif est de calculer la durée en heures et minutes du vol, sans utiliser les fonctions intégrées de calcul d'heure, ni de conversion style H/HMS. La petite contrainte amusante est que le vol dure moins de 24 heures, mais peut s'étaler sur deux jours ! :wink:

Le résultat est à présenter en une fois sur le même écran, donc pour les machines sans alpha hh.mm et pour les BASIC, je vous laisse le choix.

A vous de jouer !
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5268
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: Misez P'tit, Optimisez - N°26 (Calcul d'heures de vol)

Message par bernouilli92 »

Voici ma solution pour HP48 (ou équivalente) :
« SWAP 60 * + ROT
60 * ROT + - DUP
IF 0 <
THEN 1440 +
END DUP 60 / IP
SWAP 60 MOD 100 / +
»

Autre version qui affiche le résulat sous forme de chaîne de caractères :
« SWAP 60 * + ROT
60 * ROT + - DUP
IF 0 <
THEN 1440 +
END DUP 60 / IP
"h" + SWAP 60 MOD +
»
HP, Casio, Sharp, Psion, quelques TI et divers autres
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3421
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez P'tit, Optimisez - N°26 (Calcul d'heures de vol)

Message par C.Ret »

Hobiecat a écrit :L'objectif est de calculer la durée en heures et minutes du vol, sans utiliser les fonctions intégrées de calcul d'heure, ni de conversion style H/HMS.
Ah! Zut j'avais pensé un truc simple type HMS- .
Mince alors
La petite contrainte amusante est que le vol dure moins de 24 heures, mais peut s'étaler sur deux jours ! :wink:
Interessant:
Donc si je déclare que mon avion décolle de Paris à 08:23 et atterrit à Papette à 08:23 j'ai voyagé 24h00 et non 0h0min !?!
Par contre entre 08:22 et 08:23 je n'ai qu'une minute de vol et de 08:23 à 08:22 j'ai 23h59min !!

OK.Ok; Il faut bien réfléchir aux valeurs limites !!



Une version pour HP28S très proche de l'HP48:

Code : Tout sélectionner

« ROT - 60 / LAST MOD 100 / 4 ROLLD FLOOR + SWAP - 24 MOD + »
et son homologue qui affiche sous forme de caractère : (notons au passage que sur HP28S, l'instruction de conversion ->STR est nécessaire:

Code : Tout sélectionner

« ROT -             // (m2-m1)
  60 /              // nombre d'heure dans m2-m1
  LAST MOD          // (m2-m1) exprimé en minutes dans intervalle [0 ; 60 [
  ->STR "min" +     // converti en chaine de caractères
  4 ROLLD           // mémorise en haut de pile
  FLOOR +           // ajoute nombre d'heure m2-m1 à h2
  SWAP -            // (h2' - h1) 
  24 MOD            // exprime heures (négatives) en durée [0;24[
  ->STR "h" +       // converti en chaine de caractères
  SWAP +            // ajoute la chaine donnant les minutes.
»
Usage : on entre successivement les heures et minute du départ et de l'arrivée et on lance le programme:
8 34 18 43 [DUREE] affiche 10.09 (respectivement "10h9min" selon la version).


Même principe pour HP-41C et consoeurs :

Code : Tout sélectionner

001   LBL "DUREE"
002   x:y
003   R^
004   -             // (h2-h1)
005   RDN
006   x:y
007   -             // (m2-m1)
008   STO Y
009   60
010   ST/ Z         // calcule nombre d'heures dans (m2-m1)
011   MOD           // exprime reste (m2-m1) en minutes dans [0; 60 [
012   100
013   /             // mise en forme pour affichage .mm
014   ST+ Z         // ajoute .mm à (h2-h1)
015   RDN
016   INT           // arrondi nombre d'heure dans (m2-m1) et ajoute durée
017   +
018   24            // exprime durée au format hh.mm dans intervalle [ 0 ; 24 [
019   MOD
020   END
Et la traduction pour BASIC SHARP primaire:

Code : Tout sélectionner

10:INPUT "DEPART: H,M=";A,B,"ARRIVEE: H,M=";C,D
20:F=D-B,H=INT (F/60,E=C-A+H,F=F-60H,E=E-24*INT (E/24
30:USING "###":PRINT "D";A;B;" A";C;D;"=";E;F
40:END
P.S.: Notons que 8h34 à 8h34 fait 0 au lieu de 24 h ! :hum:


A comparer avec la version "naturelle de ce programme où l'on entre les heures de départ et d'arrivée naturellemtn au format hh.mmss :

Code : Tout sélectionner

10:INPUT "HH.MMSS DEPART:";A,"HH.MMSS ARRIVEE:",B
20:C=DMS (DEG B-DEG A:USING "###.####":IF C<=0 THEN C=24+C
30:PRINT A;B;C
40:END
Ah! Cette fois de 8.34 à 8.34 il y a bien 24h de vol !

Ou l'équivalent en RPL ;

Code : Tout sélectionner

« 24 + SWAP HMS- 24 MOD »
Ah! Zut les HMS-truc-choses sont interdits !!
Modifié en dernier par C.Ret le 21 déc. 2012 13:14, modifié 7 fois.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
doum-doum
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 991
Enregistré le : 08 déc. 2012 16:24

Re: Misez P'tit, Optimisez - N°26 (Calcul d'heures de vol)

Message par doum-doum »

Oui mais si on voyage vers l'Est ou l'Ouest ? et les fuseaux horaires ? C'est heure de vol de depart dans le fuseau de départ et idem pour l'arrivée. Parce que selon le sens du vol, on peut voyager plusieurs heures mais n'avoir que quelques minutes d'écart entre les vols, voire même moins...
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3644
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Misez P'tit, Optimisez - N°26 (Calcul d'heures de vol)

Message par Hobiecat »

Palme de la rapidité pour Bernouilli92, et une nouvelle fois, brillante démonstration de C.Ret !
doum-doum a écrit :Oui mais si on voyage vers l'Est ou l'Ouest ? et les fuseaux horaires ? C'est heure de vol de depart dans le fuseau de départ et idem pour l'arrivée. Parce que selon le sens du vol, on peut voyager plusieurs heures mais n'avoir que quelques minutes d'écart entre les vols, voire même moins...
Ce n'est pas la question : on veut le nombre d'heures de vol, indépendamment des fuseaux horaires et du sens de vol . Le genre de calcul qui, cumulé, va servir par exemple à savoir quand remplacer une pièce sur un avion... :wink:
Avatar du membre
doum-doum
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 991
Enregistré le : 08 déc. 2012 16:24

Re: Misez P'tit, Optimisez - N°26 (Calcul d'heures de vol)

Message par doum-doum »

Ok, le nombre d'heures de vol de l'avion, pas la durée du vol. J'avions point compris :D
Répondre

Retourner vers « Tous les Pockets »