RETROGICIEL
LES TYPES NUMERIQUES
RETROGICIEL
LES TYPES NUMERIQUES
⇩. Présentation
Les mathématiciens, ont classé les nombres entiers positifs en fonction la somme (nommée s) de leurs diviseurs stricts. un nombre entier positif (nommé n) est :
- premier si cette somme est égale à 1 (s = 1) ;
- déficient si cette somme est inférieure à ce nombre (s < n) ;
- déficient presque parfait si cette somme est égale à ce nombre moins 1 ( s = n-1 ) ;
- parfait si cette somme est égale à ce nombre (s = n) ;
- abondant presque parfait si cette somme est égale à ce nombre plus 1 ( s = n+1 ) ;
- abondant si cette somme est supérieure à ce nombre ( s > n + 1 ) ;
Un diviseur strict d’un nombre entier positif n est un entier positif différent de n qui divise n exactement, c’est-à-dire qu’il existe un nombre entier positif q tel que n=d×q.
⇩. Consignes
Le programme doit :
demander quel nombre l'utilisateur souhaite classifier ;
vérifier que ce nombre est bien un nombre entier plus grand que 1 ;
rechercher et afficher les diviseurs stricts de ce nombre ;
calculer et afficher la sommes des diviseurs stricts du nombre ;
afficher et justifier le type du nombre ;
demander si l'utilisateur souhaite classifier un autre nombre.
D'abord, faite-le fonctionner. Ensuite, faite-le beau. Enfin, faite-le performant.
Amusez-vous bien !
Télécharger RETROGICIEL - Les types numeriques.
Cette présentation nécessite que Python 3 soit installé sur votre machine.
Après avoir téléchargé le fichier Le poids ideal.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 types numériques ---
# -*- coding: utf-8 -*-
# --- PRESENTATION ---
print ( "Les types numériques" )
print ( "..." )
# --- BOUCLE PRINCIPALE ---
while True :
# --- Saisies et controles du nombre entier ---
while True :
try :
kchoix = int ( input ( "Entrez le nombre entier (> 1) à évaluer ... " ) )
if kchoix < 2 : 1 / 0
kracine = int ( kchoix ** .5 )
break
except :
print ( "ERREUR DE SAISIE !!!" )
# --- Recherche des diviseurs stricts ---
kdiviseurs = [ 1 ]
print ( f"\nLes diviseurs stricts de { kchoix } sont 1 et les paires :" )
for kvaleur in range ( 2 , ( kracine + 1 ) ) :
if kchoix % kvaleur == 0 :
kpaire = [ kvaleur , ( kchoix // kvaleur ) ] if kvaleur != ( kchoix // kvaleur ) else [ kvaleur ]
kdiviseurs.extend ( kpaire )
print ( kpaire )
# --- Sommes des diviseurs stricts ---
ksomme = sum ( kdiviseurs )
print ( f"\nLa sommes des diviseurs stricts de { kchoix } est { ksomme }.\n" )
# --- Recherche du type numérique de la saisie ---
if ksomme == 1 :
print ( f"Le nombre { kchoix } n'est divisible que par 1 et lui-même : " )
print ( f"{ kchoix } est donc un nombre PREMIER." )
elif ksomme == kchoix :
print ( f"La somme des diviseurs stricts est aussi { ksomme } : " )
print ( f"{ kchoix } est donc un nombre PARFAIT." )
elif ksomme == ( kchoix - 1 ):
print ( f"La somme des diviseurs stricts est presque égal à { kchoix } (-1) : " )
print ( f"{ kchoix } est donc un nombre DEFICIENT, presque parfait." )
elif ksomme == ( kchoix + 1 ):
print ( f"La somme des diviseurs stricts est presque égal à { kchoix } (+1) : " )
print ( f"{ kchoix } est donc un nombre ABONDANT, presque parfait." )
elif ksomme < kchoix :
print ( f"La somme des diviseurs stricts est inférieure à { kchoix } : " )
print ( f"{ kchoix } est donc un nombre DEFICIENT." )
elif ksomme > kchoix :
print ( f"La somme des diviseurs stricts est supérieure à { kchoix } : " )
print ( f"{ kchoix } est donc un nombre ABONDANT." )
# --- Choix du bouclage du programme ---
kchoix = input ( "\nVoulez-vous faire une autre analyse (O ou N) ?" )
if kchoix.upper ( ) == "N" : break
# --- FIN DU PROGRAMME ---
print ( "Au revoir" )
# --- Programme : JFB ---
# --- Mars 2026 ---
# --- Fin ---
Pour mieux comprendre l'exemple en PYTHON sans tkinter.
# --- Origine Nerd ---
# --- RETROGICIEL - TKINTER ---
# --- Les types numériques ---
# -*- coding: utf-8 -*-
# --- IMPORTATION DES MODULES ---
# --- Modules de la bibliothèque standard ---
import tkinter
# --- DÉFINITION DES FONCTIONS PERSONNALISEES ---
# --- Recherche du type numérique de la saisie ---
def FNC_Analyse ( Q ) :
# --- Recherche des diviseurs stricts ---
kracine = int ( Q ** .5 )
kdiviseurs = [ 1 ]
BOX_Paires.insert ( 0 , "1" )
for kvaleur in range ( 2 , ( kracine + 1 ) ) :
if Q % kvaleur == 0 :
kpaire = [ kvaleur , ( Q // kvaleur ) ] if kvaleur != ( Q // kvaleur ) else [ kvaleur ]
kdiviseurs.extend ( kpaire )
kelement = kpaire [ 0 ] if len ( kpaire ) == 1 else f"{ kpaire [ 0 ] } et { kpaire [ 1 ] }"
BOX_Paires.insert ( "end" , kelement )
TKI_Principal.update ( )
# --- Sommes des diviseurs stricts ---
ksomme = sum ( kdiviseurs )
LAB_Somme [ "text" ] = f"\nLa sommes des diviseurs stricts de { Q }\nest { ksomme }.\n"
# --- Recherche du type numérique de la saisie ---
if ksomme == 1 :
LAB_Message [ "text" ] = f"Le nombre { Q } n'est divisible\nque par 1 et lui-même : "
LAB_Type [ "text" ] = f"{ Q } est donc\nun nombre PREMIER."
elif ksomme == Q :
LAB_Message [ "text" ] = f"La somme des diviseurs stricts\nest aussi { ksomme } : "
LAB_Type [ "text" ] = f"{ Q } est donc\nun nombre PARFAIT."
elif ksomme == ( Q - 1 ):
LAB_Message [ "text" ] = f"La somme des diviseurs stricts\nest presque égal à { Q } (-1) : "
LAB_Type [ "text" ] = f"{ Q } est donc\nun nombre DEFICIENT, presque parfait."
elif ksomme == ( Q + 1 ):
LAB_Message [ "text" ] = f"La somme des diviseurs stricts\nest presque égal à { Q } (+1) : "
LAB_Type [ "text" ] = f"{ Q } est donc\nun nombre ABONDANT, presque parfait."
elif ksomme < Q :
LAB_Message [ "text" ] = f"La somme des diviseurs stricts\nest inférieure à { Q } : "
LAB_Type [ "text" ] = f"{ Q } est donc\nun nombre DEFICIENT."
elif ksomme > Q :
LAB_Message [ "text" ] = f"La somme des diviseurs stricts\nest supérieure à { Q } : "
LAB_Type [ "text" ] = f"{ Q } est donc un nombre ABONDANT."
# --- Controle de validité de la saisie ---
def FNC_Validite ( ) :
LAB_Message [ "text" ] = ""
LAB_Somme [ "text" ] = ""
LAB_Type [ "text" ] = ""
BOX_Paires.delete ( 0 , "end" )
try :
kchoix = int ( ENT_Saisie.get ( ) )
if kchoix < 2 : 1 / 0
LAB_Message [ "text" ] = "Analyse en cour ...\nVeuillez patienter."
FNC_Analyse ( kchoix )
except :
LAB_Message [ "text" ] = "ERREUR DE SAISIE !!!"
ENT_Saisie.delete ( 0 , "end" )
# --- CREATION DE L'INTERFACE GRAPHIQUE ---
# --- Création de la fenêtre principale ---
TKI_Principal = tkinter.Tk ( )
TKI_Principal.title ( "RETROGICIEL - Les types numériques" )
# --- Création des controles nommées ---
BAR_Vertical = tkinter.Scrollbar ( TKI_Principal )
BOX_Paires = tkinter.Listbox ( TKI_Principal )
ENT_Saisie = tkinter.Entry ( TKI_Principal , text = "" )
LAB_Message = tkinter.Label ( TKI_Principal , height = 2 )
LAB_Somme = tkinter.Label ( TKI_Principal , height = 2 )
LAB_Type = tkinter.Label ( TKI_Principal , height = 2 )
# --- Mise en place des controles (anonymes et nommés) dans la fenêtre principale ---
BOX_Paires.grid ( row = 0 , column = 0 , rowspan = 5 , sticky = "nesw" )
BAR_Vertical.grid ( row = 0 , column = 1 , rowspan = 5 , sticky = "nesw" )
tkinter.Label ( TKI_Principal , text = "Saisisez un nombre entier plus grand que 1 ..." ).grid ( row = 0 , column = 2 , columnspan = 3 , sticky = "w" )
ENT_Saisie.grid ( row = 1 , column = 2 , sticky = "nesw" )
tkinter.Button ( TKI_Principal , text = "Analyser" , command = FNC_Validite ).grid ( row = 1 , column = 3 , sticky = "nesw" )
tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy ).grid ( row = 1 , column = 4 , sticky = "nesw" )
LAB_Somme.grid ( row = 2 , column = 2 , columnspan = 3 , sticky = "nesw" )
LAB_Message.grid ( row = 3 , column = 2 , columnspan = 3 , sticky = "nesw" )
LAB_Type.grid ( row = 4 , column = 2 , columnspan = 3 , sticky = "nesw" )
# --- Mise à jour de controle ---
BOX_Paires [ "yscrollcommand" ] = BAR_Vertical.set
BAR_Vertical [ "command" ] = BOX_Paires.yview
# --- DEBUT DU PROGRAMME ---
TKI_Principal.mainloop ( )
# --- Programme : JFB ---
# --- Mars 2026 ---
# --- Fin ---
Pour mieux comprendre l'exemple en PYTHON avec tkinter.
' --- Origine Nerd propose pour ---
' --- RETROGICIEL - QB64 ---
' --- Les types numeriques ---
' --- DEBUT DU PROGRAMME ---
PRINT "LES TYPES NUMERIQUES."
' --- BOUCLE PRINCIPALE ---
DO
' --- Saisie du nombre a analyser ---
DO
INPUT "Entrez un nombre entier plus grand que 1 "; kchoix~&
LOOP UNTIL kchoix~& > 1
PRINT "Les diviseurs stricts de "; kchoix~&; "sont 1 et ..."
' --- Recherche des diviseurs stricts ---
ksomme~&& = 1
kfin~& = INT(SQR(kchoix~&)) + 1
FOR kvaleur~& = 2 TO kfin~&
IF kchoix~& MOD kvaleur~& = 0 THEN
kdiviseur~& = kchoix~& \ kvaleur~&
IF kdiviseur~& <> kvaleur~& THEN
PRINT "la paire : "; kvaleur~&; " et "; kdiviseur~&
ELSE
kdiviseur~& = 0
PRINT "et enfin : "; kvaleur~&
END IF
ksomme~&& = ksomme~&& + kvaleur~& + kdiviseur~&
END IF
NEXT kvaleur~&
' --- Affichage de la sommes des diviseurs stricts ---
PRINT "La somme des diviseurs stricts de "; kchoix~&; " est "; ksomme~&&
' --- Recherche du typpe numerique du nombre saisie ---
IF ksomme&& = 1 THEN
PRINT "Le nombre "; kchoix~&; " n'est divisible que par 1 et lui-meme : "
PRINT kchoix~&; "est donc un nombre PREMIER."
ELSEIF ksomme~&& = kchoix~& THEN
PRINT "La somme des diviseurs stricts est aussi "; kchoix~&; " : "
PRINT kchoix~&; "est donc un nombre PARFAIT."
ELSEIF ksomme~&& = (kchoix~& - 1) THEN
PRINT "La somme des diviseurs stricts est presque egal a "; kchoix~&; " : "
PRINT kchoix~&; "est donc un nombre DEFICIENT, presque parfait."
ELSEIF ksomme~&& = (kchoix~& + 1) THEN
PRINT "La somme des diviseurs stricts est presque egal a "; kchoix~&; " : "
PRINT kchoix~&; "est donc un nombre ABONDANT, presque parfait."
ELSEIF ksomme~&& < kchoix~& THEN
PRINT "La somme des diviseurs stricts est inferieure a "; kchoix~&; " : "
PRINT kchoix~&; "est donc un nombre DEFICIENT."
ELSEIF ksomme~&& > kchoix~& THEN
PRINT "La somme des diviseurs stricts est superieur a "; kchoix~&; " : "
PRINT kchoix~&; "est donc un nombre ABONDANT."
END IF
' --- Bouclage du programme ---
INPUT "Voulez-vous recommencer [ O ou N ] "; kchoix$
LOOP UNTIL UCASE$(kchoix$) = "N"
' --- FIN DU PROGRAMME ---
PRINT "Au revoir."
END
' --- Programme : JFB ---
' --- Mars 2026 ---
' --- Fin ---
Pour mieux comprendre l'exemple en QB64.
REM --- Origine Nerd propose pour ---
REM --- RETROGICIEL - BBC BASIC ---
REM --- Les types numeriques ---
REM --- DEBUT DU PROGRAMME ---
PRINT "LES TYPES NUMERIQUES."
REM --- BOUCLE PRINCIPALE ---
REPEAT
REM --- Saisie du nombre a analyser ---
REPEAT
INPUT "Entrez un nombre entier plus grand que 1 "; kchoix%%
UNTIL kchoix%% > 1
PRINT "Les diviseurs stricts de "; kchoix%%; " sont 1 et ..."
REM --- Recherche des diviseurs stricts ---
ksomme%% = 1
kfin%% = INT(SQR(kchoix%%)) + 1
FOR kvaleur%% = 2 TO kfin%%
IF kchoix%% MOD kvaleur%% = 0 THEN
kdiviseur%% = kchoix%% DIV kvaleur%%
IF kdiviseur%% <> kvaleur%% THEN
PRINT "la paire : "; kvaleur%%; " et "; kdiviseur%%
ELSE
kdiviseur%% = 0
PRINT "et enfin : "; kvaleur%%;
ENDIF
ksomme%% = ksomme%% + kvaleur%% + kdiviseur%%
ENDIF
NEXT kvaleur%%
REM --- Affichage de la sommes des diviseurs stricts ---
PRINT "La somme des diviseurs stricts de "; kchoix%%; " est "; ksomme%%
REM --- Recherche du typpe numLETrique du nombre saisie ---
IF ksomme%% = 1 THEN
PRINT "Le nombre "; kchoix%%; " n'est divisible que par 1 et lui-meme : "
PRINT kchoix%%; " est donc un nombre PREMIER."
ELSE IF ksomme%% = kchoix%% THEN
PRINT "La somme des diviseurs stricts est aussi "; kchoix%%; " : "
PRINT kchoix%%; " est donc un nombre PARFAIT."
ELSE IF ksomme%% = (kchoix%% - 1) THEN
PRINT "La somme des diviseurs stricts est presque egal a "; kchoix%%; " : "
PRINT kchoix%%; " est donc un nombre DEFICIENT, presque parfait."
ELSE IF ksomme%% = (kchoix%% + 1) THEN
PRINT "La somme des diviseurs stricts est presque egal a "; kchoix%%; " : "
PRINT kchoix%%; " est donc un nombre ABONDANT, presque parfait."
ELSE IF ksomme%% < kchoix%% THEN
PRINT "La somme des diviseurs stricts est inferieure a "; kchoix%%; " : "
PRINT kchoix%%; " est donc un nombre DEFICIENT."
ELSE IF ksomme%% > kchoix%% THEN
PRINT "La somme des diviseurs stricts est superieur a "; kchoix%%; " : "
PRINT kchoix%%; " est donc un nombre ABONDANT."
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
REM --- Bouclage du programme ---
INPUT "Voulez-vous recommencer [ O ou N ] "; kchoix$
UNTIL kchoix$ = "N" OR kchoix$ = "n"
REM --- FIN DU PROGRAMME ---
PRINT "Au revoir."
END
REM --- Programme : JFB ---
REM --- Mars 2026 ---
REM --- Fin ---
Pour mieux comprendre l'exemple en BBC BASIC.