RETROGICIEL
LES ANNEES BISSEXTILES
RETROGICIEL
LES ANNEES BISSEXTILES
⇩. Présentation
Une année bissextile a une durée de 366 jours au lieu de 365 pour une année standard. La journée supplémentaire, le 29 février, permet de compenser la différence entre la durée d'une année calendaire, de 365 jours, d'une année sidérale, de 365,25 jours en moyenne. Une année sidérale étant le temps que met la Terre pour effectuer une rotation complète autour du Soleil.
Sans cette particularité des années bissextiles, les dates des équinoxes et des solstices se décaleraient peu à peu dans le calendrier. Ce qui, en conséquence, déplacerait aussi les saisons, été/hiver, au cours des siècles.
Une année sera bissextile si elle est divisible par 4 et si elle n'est pas un multiple de 100, sauf si c'est un multiple de 400. Par exemple :
- 1899 n'est pas bissextile car pas un multiple de 4 ;
- 1900 n'est pas bissextile car multiple de 100, mais pas de 400 ;
- 2000 est bissextille car multiple de 400 ;
- 1960 est bissextille car multiple de 4, mais pas de 100.
⇩. Consignes
Le programme doit :
demander à l'utilisateur une année à tester ;
afficher si c'est une année bissextile ou pas ;
afficher l'année bissextiles précédant cette année ;
afficher l'année bissextiles suivant cette année ;
demander si l'utilisateur veut tester une autre année.
D'abord, faite-le fonctionner. Ensuite, faite-le beau. Enfin, faite-le performant.
Amusez-vous bien !
Télécharger RETROGICIEL - Les années bissextiles.
Cette présentation nécessite que Python 3 soit installé sur votre machine.
Après avoir téléchargé le fichier Les années bissextiles.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 ---
# --- Les années bissextiles ---
# -*- coding: utf-8 -*-
# --- DÉFINITION DES FONCTIONS POUR PROGRAMME ADAPTE ---
# --- Analyse d'une année ---
def FNC_Analyse ( Q ) :
if Q % 4 != 0 : return False # l'année n'est pas divisible par 4
if Q % 400 == 0 : return True # l'année est divisible par 400
if Q % 100 == 0 : return False # l'année est divisible par 100
return True # l'année est donc bissextile
# --- Affichage du message global ---
def FNC_Resultats ( Q ) :
# --- Teste l'année saisie ---
kresultat = "est" if FNC_Analyse ( Q ) else "n'est pas"
kmessage = f"{ Q } { kresultat } une année bissextile.\n\n"
# --- Rechercher les années bissextiles encadrant l'année saisie ---
for kvaleur in ( -1 , 1 ) :
kannee = Q
kplace = "précédente" if kvaleur == -1 else "suivante"
while True :
kannee = kannee + kvaleur
if FNC_Analyse ( kannee ) : break
kmessage += f" Année bissextile { kplace } : { kannee }.\n"
# --- PRESENTATION ---
print ( "LES ANNEES BISSEXTILES." )
print ( "..." )
# --- BOUCLE PRINCIPALE ---
while True :
# --- Saisie de l'utilisateur ---
kchoix = input ( "\nEntrez l'année à tester ou Q pour quitter ... " )
if kchoix.upper ( ) == "Q" : break
# --- Conversion et controle de la validité de l'année ---
try :
kannee = int ( kchoix )
except :
print ( f"Désolé mais { kchoix } n'est pas une saisie valable." )
continue
# --- Teste l'année saisie ---
kresultat = "est" if FNC_Analyse ( kannee ) else "n'est pas"
print ( f"\n{ kannee } { kresultat } une année bissextile.\n")
# --- Rechercher les années bissextiles encadrant l'année saisie ---
for kvaleur in ( -1 , 1 ) :
ktest = kannee
kplace = "précédente" if kvaleur == -1 else "suivante"
while True :
kannee = kannee + kvaleur
if FNC_Analyse ( kannee ) : break
print ( f"Année bissextile { kplace } : { kannee }.")
# --- FIN DU PROGRAMME ---
print ( "Au revoir" )
# --- Programme : JFB ---
# --- Septembre 2024 ---
# --- Fin ---
Pour mieux comprendre l'exemple en PYTHON sans tkinter.
# --- Origine Nerd ---
# --- RETROGICIEL - TKINTER ---
# --- Les années bissextiles ---
# -*- coding: utf-8 -*-
# --- IMPORTATION DES MODULES ---
# --- Modules de la bibliothèque standard ---
import tkinter
# --- DÉFINITION DES FONCTIONS PERSONNALISEES ---
# --- Analyse d'une année ---
def FNC_Analyse ( Q ) :
if Q % 4 != 0 : return False # l'année n'est pas divisible par 4
if Q % 400 == 0 : return True # l'année est divisible par 400
if Q % 100 == 0 : return False # l'année est divisible par 100
return True # l'année est donc bissextile
# --- Affichage du message global ---
def FNC_Resultats ( Q ) :
# --- Teste l'année saisie ---
kresultat = "est" if FNC_Analyse ( Q ) else "n'est pas"
kmessage = f"{ Q } { kresultat } une année bissextile.\n\n"
# --- Rechercher les années bissextiles encadrant l'année saisie ---
for kvaleur in ( -1 , 1 ) :
kannee = Q
kplace = "précédente" if kvaleur == -1 else "suivante"
while True :
kannee = kannee + kvaleur
if FNC_Analyse ( kannee ) : break
kmessage += f" Année bissextile { kplace } : { kannee }.\n"
LAB_Message [ "text" ] = kmessage
# --- Controle de validité et conversion de la saisie ---
def FNC_Saisie ( ) :
try :
LAB_Message [ "text" ] = ""
kannee = int ( TKI_Annee.get ( ) )
except :
LAB_Message [ "text" ] = f"Désolé mais { TKI_Annee.get ( ) }\nn'est pas une saisie valable."
TKI_Annee.set ( "" )
return
FNC_Resultats ( kannee )
# --- CREATION DE L'INTERFACE GRAPHIQUE ---
# --- Création de la fenêtre principale ---
TKI_Principal = tkinter.Tk ( )
TKI_Principal.title ( "RETROGICIEL - Les années bissextiles" )
# --- Création des variables de controles ---
TKI_Annee = tkinter.StringVar ( )
# --- Création des controles nommées ---
ENT_Annee = tkinter.Entry ( TKI_Principal , textvariable = TKI_Annee , justify = "center" , width = 5 )
BUT_Calcul = tkinter.Button ( TKI_Principal , text = "Evaluer ..." , command = FNC_Saisie )
LAB_Message = tkinter.Label ( TKI_Principal , text = "..." , width = 30 , height = 5 , justify = "left" , anchor = "w" )
# --- Mise en place des controles (anonymes et nommés) dans la fenêtre principale ---
ENT_Annee.grid ( row = 0 , column = 0 , sticky = "nesw" )
BUT_Calcul.grid ( row = 0 , column = 1 , sticky = "nesw" )
tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy ).grid ( row = 0 , column = 2 , sticky = "nesw" )
LAB_Message.grid ( row = 1 , column = 0 , columnspan = 3 , sticky = "nesw" )
# --- DEBUT DU PROGRAMME ---
TKI_Principal.mainloop ( )
# --- Programme : JFB ---
# --- Septembre 2024 ---
# --- Fin ---
Pour mieux comprendre l'exemple en PYTHON avec tkinter.
' --- Origine Nerd propose pour ---
' --- RETROGICIEL - QB64 ---
' --- Les années bissextiles ---
' --- DEBUT DU PROGRAMME ---
PRINT "LES ANNEES BISSEXTILES"
' --- BOUCLE PRINCIPALE ---
DO
' --- Saisie ... ---
INPUT "Entrez une annee ou Q pour quitter "; kchoix$
IF UCASE$(kchoix$) = "Q" THEN EXIT DO
kannee% = VAL(kchoix$)
' --- Teste si la saisie est valable ---
IF kannee% <> 0 THEN FNC_Resultats (kannee%) ELSE PRINT kchoix$; " n'est pas une saisie valable"
LOOP
' --- FIN DU PROGRAMME ---
PRINT "Au revoir."
END
' --- DEFINITION DES FONCTIONS PERSONNALISEES ---
' --- Analyse d'une annee ---
FUNCTION FNC_Analyse$ (Q%)
kresultat$ = " est "
IF Q% MOD 4 <> 0 THEN kresultat$ = " n'est pas "
IF Q% MOD 400 = 0 THEN kresultat$ = " est "
IF Q% MOD 100 = 0 THEN kresultat$ = " n'est pas "
FNC_Analyse$ = kresultat$
END FUNCTION
' --- Affichage des resultats d'analyse d'annees ---
SUB FNC_Resultats (Q%)
' --- Teste l'annee saisie ---
kresultat$ = FNC_Analyse$(Q%)
PRINT STR$(Q%); kresultat$; "bissextile."
' --- Rechercher les annees bissextiles encadrant l'annee saisie ---
FOR kvaleur% = -1 TO 1 STEP 2
kannee% = Q%
IF kvaleur% = -1 THEN kplace$ = "precedente" ELSE kplace$ = "suivante"
DO
kannee% = kannee% + kvaleur%
LOOP WHILE FNC_Analyse$(kannee%) <> " est "
PRINT "Annee bissextile "; kplace$; " :"; STR$(kannee%); "."
NEXT kvaleur%
END SUB
' --- Programme : JFB ---
' --- Septembre 2024 ---
' --- Fin ---
Pour mieux comprendre l'exemple en QB64.
REM --- Origine Nerd propose pour ---
REM --- RETROGICIEL - BBC BASIC ---
REM --- Les années bissextiles ---
REM --- DEBUT DU PROGRAMME ---
PRINT "LES ANNEES BISSEXTILES"
REM --- BOUCLE PRINCIPALE ---
REPEAT
REM --- Saisie ... ---
INPUT "Entrez une annee ou Q pour quitter "; kchoix$
IF kchoix$ = "q" OR kchoix$ = "Q" THEN EXIT REPEAT
kannee% = VAL(kchoix$)
REM --- Teste si la saisie est valable ---
IF kannee% <> 0 THEN PROC_Resultats(kannee%) ELSE PRINT "Cette saisie n'est pas valable."
UNTIL FALSE
REM --- FIN DU PROGRAMME ---
PRINT "Au revoir."
END
REM --- DEFINITION DES FONCTIONS PERSONNALISEES ---
REM --- Analyse si une annees est bissextile ---
DEF FN_Analyse(Q%)
kresultat$ = " est "
IF Q% MOD 4 <> 0 THEN kresultat$ = " n'est pas "
IF Q% MOD 400 = 0 THEN kresultat$ = " est "
IF Q% MOD 100 = 0 THEN kresultat$ = " n'est pas "
= kresultat$
REM --- Description de la fonction ---
DEF PROC_Resultats(Q%)
REM --- Teste l'annee saisie par l'utilisateur ---
kresultat$ = FN_Analyse(Q%)
PRINT STR$(Q%); kresultat$; "bissextile."
REM --- Recherche des annees d'encadrement ---
FOR kvaleur% = -1 TO 1 STEP 2
kannee% = Q%
IF kvaleur% = -1 THEN kplace$ = "precedente" ELSE kplace$ = "suivante"
REPEAT
kannee% = kannee% + kvaleur%
UNTIL FN_Analyse(kannee%) = " est "
PRINT "Annee bissextile "; kplace$; " : "; kannee%
NEXT kvaleur%
ENDPROC
REM --- Programme : JFB ---
REM --- Septembre 2024 ---
REM --- Fin ---
Pour mieux comprendre l'exemple en BBC BASIC.