RETROGICIEL
A LA SECONDE PRET
RETROGICIEL
A LA SECONDE PRET
⇩. Présentation
La seconde est l'unité de base du S.I. (Système Internationale de mesures) pour mesurer le temps, de symbole : s (sans point abréviatif). Elle correspond à la durée de 9 192 631 770 oscillations liées à la fréquence de transition hyperfine de l'atome de césium.
Mais pour plus de facilité, on exprime souvent les durées écoulées par des multiples de cette unité : la minute, qui vaut 60 secondes ; l'heure qui vaut 3600 secondes ; le jour qui vaut ... ? voyons 24 x 3600 = 86400 secondes, ouf ; le mois, encore plus de secondes, l'année, là, c'est beaucoup plus ...
Elaborons un petit programme qui calculera toutes les secondes correspondantes à une durée calendaire, et inversement. Pour commencer, on considérera que :
- 1 minute vaut 60 secondes ;
- 1 heure vaut 60 minutes ;
- 1 jour vaut 24 heures ;
- 1 semaine vaut 7 jours ;
- 1 mois vaut 30 jours et ;
- 1 année vaut 365 jours.
⇩. Consignes
Le programme doit :
demander si l'utilisateur veut convertir :
des secondes en périodes calendaires ou ;
des périodes calendaires en secondes ;
obtenir par saisies les valeurs à convertir ;
effectuer les calculs attendus ;
afficher le résultat ;
calculer et afficher le nombre de semaines correspondantes ;
demander si l'utilisateur veut faire un autre calcul ou ;
quitter le programme.
D'abord, faite-le fonctionner. Ensuite, faite-le beau. Enfin, faite-le performant.
Amusez-vous bien !
Télécharger RETROGICIEL - A la seconde prèt.
Cette présentation nécessite que Python 3 soit installé sur votre machine.
Après avoir téléchargé le fichier A la seconde pret.7z, décompressez-le dans le répertoire de votre choix.
Ouvrez le répertoire qui vient d'être créé.
Lancez le fichier Retrogiciel.py.
Cliquez sur l'onglet RUN et testez le programme.
Créez votre propre script dans un des langages proposés ou un autre de votre choix.
Le répertoire contient aussi :
- Python.py, l'exemple en PYTHON sans tkinter ;
- Tkinter.py, l'exemple en PYTHON avec tkinter ;
- Qb84.bas, l'exemple en QBASIC avec qb64 ;
- Bbc.bas, l'exemple en BBC BASIC avec bbc sdl.
# --- Origine Nerd ---
# --- RETROGICIEL - PYTHON ---
# --- A la seconde prèt ---
# -*- coding: utf-8 -*-
# --- DÉFINITION DES FONCTIONS PERSONNALISEES ---
# --- Convertir des périodes calendaires en secondes ---
def FNC_Periodes ( ) :
print ( "\nConvertion de périodes calendaires en secondes ..." )
try :
ksecondes = 0
for kperiode in ( ( "d'années" , 31536000 ) , ( "de mois" , 2592000 ) , ( "de jours" , 86400 ) ,
( "d'heures" , 3600 ) , ( "de minutes" , 60 ) , ( "de secondes" , 1 ) ) :
ksaisie = input ( f"Entrez le nombre { kperiode [ 0 ] } ... " )
kvaleur = 0 if ksaisie == "" else int ( ksaisie )
ksecondes += kvaleur * kperiode [ 1 ]
print ( f"\nCette période correspond à { ksecondes } seconde(s) ;" )
return ksecondes
except :
print ( "\nERREUR ! Saisie non valide !" )
return 0
# --- Convertir des secondes en périodes calendaires ---
def FNC_Secondes ( ) :
print ( "\nConvertion de secondes en périodes calendaires ..." )
try :
ksecondes = int ( input ( "Entrez le nombres de secondes ... " ) )
print ( f"\n{ ksecondes } secondes correspondent à :" )
print ( f"{ ksecondes // 31536000 } années(s) ;" )
kreste = ksecondes % 31536000
print ( f"{ kreste // 2592000 } mois ;" )
kreste %= 2592000
print ( f"{ kreste // 86400 } jour(s) ;" )
kreste %= 86400
print ( f"{ kreste // 3600 } heure(s) ;" )
kreste %= 3600
print ( f"{ kreste // 60 } minute(s) ;" )
print ( f"{ kreste % 60 } seconde(s)." )
return ksecondes
except :
print ( "\nERREUR ! Saisie non valide !" )
return 0
# --- DEBUT DU PROGRAMME ---
print ( "A LA SECONDE PRET.\n" )
# --- BOUCLE PRINCIPALE ---
while True :
# ---- choix de convesion ---
print ( "A. Convertir des secondes en périodes calendaires." )
print ( "B. Convertir des périodes calendaire en secondes." )
print ( "C. Quitter les programme" )
kchoix = input ( "votre choix ? " )
# --- Traitement des données saisies ---
if kchoix.upper ( ) == "A" : ksecondes = FNC_Secondes ( )
if kchoix.upper ( ) == "B" : ksecondes = FNC_Periodes ( )
if kchoix not in "ABab" : break
# --- Conversion en semaines des secondes totales ---
if ksecondes != 0 : print ( f"soit environ { ksecondes // 604800 } semaine(s)." )
print ( )
# --- FIN DU PROGRAMME ---
print ( "Au revoir" )
# --- Programme : JFB ---
# --- Juin 2024 ---
# --- Fin ---
Pour mieux comprendre l'exemple en PYTHON sans tkinter.
# --- Origine Nerd ---
# --- RETROGICIEL - TKINTER ---
# --- Le poids idéal ---
# -*- coding: utf-8 -*-
# --- IMPORTATION DES MODULES ---
# --- Modules de la bibliothèque standard ---
import tkinter
# --- DÉFINITION DES FONCTIONS PERSONNALISEES ---
# --- Calculer ---
def FNC_Calculer ( ) :
ktotal = 0
if TKI_Principal.focus_lastfor ( ) == ENT_Total :
FNC_Secondes ( )
else :
FNC_Periodes ( )
# --- Convertion en semaines ---
if TKV_Total.get ( ) != "0" :
ksemaines = int ( TKV_Total.get ( ) ) // 604800
LAB_Semaines [ "text" ] = f"soit environ { ksemaines } semaine(s)."
else :
LAB_Semaines [ "text" ] = "..."
# --- Erreur de saisies - MaZ des controles ---
def FNC_Erreur ( ) :
for kvariable in ( TKV_Total , TKV_Annees , TKV_Mois , TKV_Jours , TKV_Heures , TKV_Minutes , TKV_Secondes ) :
kvariable.set ( "0" )
# --- Convertir des périodes calendaires en secondes ---
def FNC_Periodes ( ) :
try :
ktotal = int ( TKV_Annees.get ( ) ) * 31536000
ktotal += int ( TKV_Mois.get ( ) ) * 2592000
ktotal += int ( TKV_Jours.get ( ) ) * 86400
ktotal += int ( TKV_Heures.get ( ) ) * 3600
ktotal += int ( TKV_Minutes.get ( ) ) * 60
ktotal += int ( TKV_Secondes.get ( ) )
TKV_Total.set ( ktotal )
except :
ktotal = 0
FNC_Erreur ( )
# --- Convertir des secondes en plusieurs périodes ---
def FNC_Secondes ( ) :
try :
ktotal = int ( TKV_Total.get ( ) )
TKV_Annees.set ( ktotal // 31536000 )
kreste = ktotal % 31536000
TKV_Mois.set ( kreste // 2592000 )
kreste = kreste % 2592000
TKV_Jours.set ( kreste // 86400 )
kreste = kreste % 86400
TKV_Heures.set ( kreste // 3600 )
kreste = kreste % 3600
TKV_Minutes.set ( kreste // 60 )
TKV_Secondes.set ( kreste % 60 )
except :
ktotal = 0
FNC_Erreur ( )
# --- CREATION DE L'INTERFACE GRAPHIQUE ---
# --- Création de la fenêtre principale ---
TKI_Principal = tkinter.Tk ( )
TKI_Principal.title ( "RETROGICIEL - Ala seconde prèt." )
# --- Création des variables de controles ---
TKV_Total = tkinter.StringVar ( )
TKV_Annees = tkinter.StringVar ( )
TKV_Mois = tkinter.StringVar ( )
TKV_Jours = tkinter.StringVar ( )
TKV_Heures = tkinter.StringVar ( )
TKV_Minutes = tkinter.StringVar ( )
TKV_Secondes = tkinter.StringVar ( )
# --- Création des controles nommées ---
ENT_Total = tkinter.Entry ( TKI_Principal , textvariable = TKV_Total , width = 12 )
ENT_Annees = tkinter.Entry ( TKI_Principal , textvariable = TKV_Annees , width = 4 )
ENT_Mois = tkinter.Entry ( TKI_Principal , textvariable = TKV_Mois , width = 4 )
ENT_Jours = tkinter.Entry ( TKI_Principal , textvariable = TKV_Jours , width = 4 )
ENT_Heures = tkinter.Entry ( TKI_Principal , textvariable = TKV_Heures , width = 4 )
ENT_Minutes = tkinter.Entry ( TKI_Principal , textvariable = TKV_Minutes , width = 4 )
ENT_Secondes = tkinter.Entry ( TKI_Principal , textvariable = TKV_Secondes , width = 4 )
LAB_Semaines = tkinter.Label ( TKI_Principal , text = "..." )
# --- Mise en place des controles (anonymes et nommés) dans la fenêtre principale ---
tkinter.Label ( TKI_Principal , text = "A LA SECONDE PRET !" ).grid ( row = 0 , column = 0 , columnspan = 2 , sticky = "nesw" )
ENT_Total.grid ( row = 1 , column = 0 , sticky = "nesw" )
tkinter.Label ( TKI_Principal , text = "seconde(s) totales." , anchor = "w" ).grid ( row = 1 , column = 1 , sticky = "w" )
tkinter.Button ( TKI_Principal , text = "Calculer ..." , command = FNC_Calculer ).grid ( row = 2 , column = 0 , sticky = "nesw" )
tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy ).grid ( row = 2 , column = 1 , sticky = "nesw" )
ENT_Annees.grid ( row = 3 , column = 0 , sticky = "nesw" )
tkinter.Label ( TKI_Principal , text = "année(s)." , anchor = "w" ).grid ( row = 3 , column = 1 , sticky = "w" )
ENT_Mois.grid ( row = 4 , column = 0 , sticky = "nesw" )
tkinter.Label ( TKI_Principal , text = "mois." , anchor = "w" ).grid ( row = 4 , column = 1 , sticky = "w" )
ENT_Jours.grid ( row = 5 , column = 0 , sticky = "nesw" )
tkinter.Label ( TKI_Principal , text = "jour(s)." , anchor = "w" ).grid ( row = 5 , column = 1 , sticky = "w" )
ENT_Heures.grid ( row = 6 , column = 0 , sticky = "nesw" )
tkinter.Label ( TKI_Principal , text = "heure(s)." , anchor = "w" ).grid ( row = 6 , column = 1 , sticky = "w" )
ENT_Minutes.grid ( row = 7 , column = 0 , sticky = "nesw" )
tkinter.Label ( TKI_Principal , text = "minutes(s)." , anchor = "w" ).grid ( row = 7 , column = 1 , sticky = "w" )
ENT_Secondes.grid ( row = 8 , column = 0 , sticky = "nesw" )
tkinter.Label ( TKI_Principal , text = "seconde(s)." , anchor = "w" ).grid ( row = 8 , column = 1 , sticky = "w" )
LAB_Semaines.grid ( row = 9 , column = 0 , columnspan = 2 , sticky = "w" )
# --- DEBUT DU PROGRAMME ---
TKI_Principal.mainloop ( )
# --- Programme : JFB ---
# --- Juin 2024 ---
# --- Fin ---
Pour mieux comprendre l'exemple en PYTHON avec tkinter.
' --- Origine Nerd propose pour ---
' --- RETROGICIEL - QB64 ---
' --- A la seconde pret ---
' --- DEBUT DU PROGRAMME ---
PRINT "A LA SECONDE PRET"
' --- BOUCLE PRINCIPALE ---
DO
' --- Choix de la conversion ---
PRINT "A. Convertir des secondes en periodes calendaires."
PRINT "B. Convertir des periodes calendaire en secondes."
PRINT "C. Quitter les programme"
INPUT "Votre choix "; kchoix$
' --- Traitement du choix de l'utilisateur ---
IF UCASE$(kchoix$) = "A" THEN ksecondes& = FNC_Secondes
IF UCASE$(kchoix$) = "B" THEN ksecondes& = FNC_Periodes
' --- Conversion des secondes en semaines ---
IF ksecondes& <> 0 THEN PRINT "soit environ"; ksecondes& \ 604800; " semaine(s)."
LOOP UNTIL UCASE$(kchoix$) = "C"
' --- FIN DU PROGRAMME ---
PRINT "Au revoir."
END
' --- DEFINITION DES FONCTIONS PERSONNALISEES ---
' --- Convertir des périodes calendaires en secondes ---
FUNCTION FNC_Periodes
ksecondes& = 0
PRINT "Convertion de periodes calendaires en secondes ..."
INPUT "Entrez le nombre d'annees ... ", kquantite&
ksecondes& = ksecondes& + (kquantite& * 31536000)
INPUT "Entrez le nombre de mois ... ", kquantite&
ksecondes& = ksecondes& + (kquantite& * 2592000)
INPUT "Entrez le nombre de jours ... ", kquantite&
ksecondes& = ksecondes& + (kquantite& * 86400)
INPUT "Entrez le nombre d'heures ... ", kquantite&
ksecondes& = ksecondes& + (kquantite& * 3600)
INPUT "Entrez le nombre de minutes ... ", kquantite&
ksecondes& = ksecondes& + (kquantite& * 60)
INPUT "Entrez le nombre de secondes ... ", kquantite&
ksecondes& = ksecondes& + kquantite&
PRINT "Cette periode correspond a"; ksecondes&; "secondes."
FNC_Periodes = ksecondes&
END FUNCTION
' --- Convertir des secondes en périodes calendaires ---
FUNCTION FNC_Secondes
PRINT "Convertion de secondes en periodes calendaires ..."
INPUT "Entrez le nombres de secondes ... "; ksecondes&
PRINT ksecondes&; "secondes correspondent a :"
PRINT ksecondes& \ 31536000; "annees(s) ;"
kreste& = ksecondes& MOD 31536000
PRINT kreste& \ 2592000; "mois ;"
kreste& = kreste& MOD 2592000
PRINT kreste& \ 86400; "jour(s) ;"
kreste& = kreste& MOD 86400
PRINT kreste& \ 3600; "heure(s) ;"
kreste& = kreste& MOD 3600
PRINT kreste& \ 60; "minute(s) ;"
PRINT kreste& MOD 60; "seconde(s)."
FNC_Secondes = ksecondes&
END FUNCTION
' --- Programme : JFB ---
' --- Juin 2024 ---
' --- Fin ---
Pour mieux comprendre l'exemple en QB64.
REM --- Origine Nerd propose pour ---
REM --- RETROGICIEL - BBC BASIC ---
REM --- A la seconde pret ---
REM --- DEBUT DU PROGRAMME ---
PRINT "A LA SECONDE PRET"
REM --- BOUCLE PRINCIPALE ---
REPEAT
REM --- Choix de la conversion ---
ksecondes% = 0
PRINT "A. Convertir des secondes en periodes calendaires."
PRINT "B. Convertir des periodes calendaire en secondes."
PRINT "C. Quitter les programme"
INPUT "Votre choix "; kchoix$
REM --- Traitement du choix de l'utilisateur ---
IF kchoix$ = "A" OR kchoix$ = "a" THEN PROC_Secondes
IF kchoix$ = "B" OR kchoix$ = "b" THEN PROC_Periodes
REM --- Conversion des secondes en semaines ---
IF ksecondes% <> 0 THEN PRINT "soit environ "; STR$(ksecondes% DIV 604800); " semaine(s)."
UNTIL kchoix$ = "C" OR kchoix$ = "c"
REM --- FIN DU PROGRAMME ---
PRINT "Au revoir."
END
REM --- DEFINITION DES FONCTIONS PERSONNALISEES ---
REM --- Convertir des périodes calendaires en secondes ---
DEF PROC_Periodes
ksecondes% = 0
PRINT "Convertion de periodes calendaires en secondes ..."
INPUT "Entrez le nombre d'annees ... ", kquantite%
ksecondes% = ksecondes% + (kquantite% * 31536000)
INPUT "Entrez le nombre de mois ... ", kquantite%
ksecondes% = ksecondes% + (kquantite% * 2592000)
INPUT "Entrez le nombre de jours ... ", kquantite%
ksecondes% = ksecondes% + (kquantite% * 86400)
INPUT "Entrez le nombre d'heures ... ", kquantite%
ksecondes% = ksecondes% + (kquantite% * 3600)
INPUT "Entrez le nombre de minutes ... ", kquantite%
ksecondes% = ksecondes% + (kquantite% * 60)
INPUT "Entrez le nombre de secondes ... ", kquantite%
ksecondes% = ksecondes% + kquantite%
PRINT "Cette periode correspond a "; STR$(ksecondes%); " secondes."
ENDPROC
REM --- Convertir des secondes en périodes calendaires ---
DEF PROC_Secondes
PRINT "Convertion de secondes en periodes calendaires ..."
INPUT "Entrez le nombres de secondes ... "; ksecondes%
PRINT ksecondes%; "secondes correspondent a :"
PRINT STR$(ksecondes% DIV 31536000); " annees(s) ;"
kreste% = ksecondes% MOD 31536000
PRINT STR$(kreste% DIV 2592000); " mois ;"
kreste% = kreste% MOD 2592000
PRINT STR$(kreste% DIV 86400); " jour(s) ;"
kreste% = kreste% MOD 86400
PRINT STR$(kreste% DIV 3600); " heure(s) ;"
kreste% = kreste% MOD 3600
PRINT STR$(kreste% DIV 60); " minute(s) ;"
PRINT STR$(kreste% MOD 60); " seconde(s)."
ENDPROC
REM --- Programme : JFB ---
REM --- Juin 2024 ---
REM --- Fin ---
Pour mieux comprendre l'exemple en BBC BASIC.