RETROGICIEL
LE TRIANGULEUX
RETROGICIEL
LE TRIANGULEUX
⇩. Présentation
Tout le monde sait, ou devrait savoir, qu'un triangle est parfaitement déterminé dès lors que l'on connait les coordonnées de ses trois sommets, nommés par exemple A, B et C. On peut alors calculer :
- la longueur avec [AB] = [ ( abs_B - abs_A ) + ( ord_B- ord_A ) ] ·⁵ ;
- son demi-périmètre avec dp = ( AB + BC + CA ) / 2 ;
- son aire avec S = ( dp - AB ) x ( dp - BC ) x ( dp - CA ) x dp ;
- ses hauteurs ( S x 2 ) / coté ;
- le rayon de son cercle inscrit avec ri = S / dp :
- ses angles avec A = arc cosinus ( ( CA² + AB² - BC² ) / ( 2 x CA x AB ) ).
⇩. Consignes
Le programme doit :
demander les coordonnées des 3 sommets ;
calculer et afficher la longueur des 3 cotés ;
calculer et afficher la superficie du triangle ;
calculer et afficher les 3 hauteurs ;
calculer et afficher le rayon du cercle inscrit ;
calculer et afficher le 3 angles en degrés ;
recommencer si nécessaire ;
sortir du programme.
D'abord, faite-le fonctionner. Ensuite, faite-le beau. Enfin, faite-le performant.
Amusez-vous bien !
Télécharger RETROGICIEL - Le trianguleux.
Cette présentation nécessite que Python 3 soit installé sur votre machine.
Après avoir téléchargé le fichier Le trianguleux.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 ---
# --- Le trianguleux ---
# -*- coding: utf-8 -*-
# --- Modules de la bibliothèque standard ---
import math
# --- DÉFINITION DES FONCTIONS PERSONNALISEES ---
# --- Calculs des caractèristiques du triangle ---
def FNC_Calculs ( ) :
# --- Longueurs des cotés ---
kAB = abs ( ( ( ( kabsB - kabsA ) ** 2 ) + ( ( kordB - kordA ) ** 2 ) ) ** .5 )
kBC = abs ( ( ( ( kabsC - kabsB ) ** 2 ) + ( ( kordC - kordB ) ** 2 ) ) ** .5 )
kCA = abs ( ( ( ( kabsA - kabsC ) ** 2 ) + ( ( kordA - kordC ) ** 2 ) ) ** .5 )
print ( f"Longueur du segment [AB] : {kAB:>8.2f}" )
print ( f"Longueur du segment [BC] : {kBC:>8.2f}" )
print ( f"Longueur du segment [CA] : {kCA:>8.2f}\n" )
# --- Aire du triangle ---
kdp = ( kAB + kBC + kCA ) / 2 # - demi-périmetre du triangle ABC
kaire = ( ( kdp - kAB ) * ( kdp - kBC ) * ( kdp - kCA ) * kdp ) ** .5
print ( f"Superficie du triangle ABC : {kaire:.2f}\n" )
# --- Hauteurs du triangle ---
khautA = ( 2 * kaire ) / kBC
khautB = ( 2 * kaire ) / kCA
khautC = ( 2 * kaire ) / kAB
print ( f"Hauteur issue de A vers BC : {khautA:>8.2f}" )
print ( f"Hauteur issue de B vers CA : {khautB:>8.2f}" )
print ( f"Hauteur issue de C vers AB : {khautC:>8.2f}\n" )
# --- Rayon du cercle inscrit ---
krayon = kaire / kdp # --- rayon inscrit ---
print ( f"Rayon du cercle inscit en ABC : {krayon:.2f}\n" )
# --- Angles du triangle - loi des cosinus
kangleA = math.degrees ( math.acos ( ( ( kCA ** 2 ) + ( kAB ** 2 ) - ( kBC ** 2 ) ) / ( 2 * kCA * kAB ) ) )
kangleB = math.degrees ( math.acos ( ( ( kAB ** 2 ) + ( kBC ** 2 ) - ( kCA ** 2 ) ) / ( 2 * kAB * kBC ) ) )
kangleC = 180 - ( kangleA + kangleB )
print ( f"Angle en A : {kangleA:>6.2f} degrés" )
print ( f"Angle en B : {kangleB:>6.2f} degrés" )
print ( f"Angle en C : {kangleC:>6.2f} degrés\n" )
# --- PRESENTATION ---
print ( "LE TRIANGULEUX" )
print ( )
# --- BOUCLE PRINCIPALE ---
while True :
# --- Instruction de saisie ---
print ( "\nFormat pour la saisie des coordonnées : X.xx , Y.yy" )
print ( "par exemple : 7.89 , 4.3\n" )
# --- Saisies des coordonnées et controle de validité ---
try :
kpointA = input ( "Entrez les coordonnées du point A : " )
kabsA = float ( eval ( kpointA.split ( "," ) [ 0 ] ) )
kordA = float ( eval ( kpointA.split ( "," ) [ 1 ] ) )
kpointB = input ( "Entrez les coordonnées du point B : " )
kabsB = float ( eval ( kpointB.split ( "," ) [ 0 ] ) )
kordB = float ( eval ( kpointB.split ( "," ) [ 1 ] ) )
kpointC = input ( "Entrez les coordonnées du point C : " )
kabsC = float ( eval ( kpointC.split ( "," ) [ 0 ] ) )
kordC = float ( eval ( kpointC.split ( "," ) [ 1 ] ) )
print ( f"\nCoordonnées du point A : ( { kabsA } , { kordA } )" )
print ( f"Coordonnées du point B : ( { kabsB } , { kordB } )" )
print ( f"Coordonnées du point C : ( { kabsC } , { kordC } )\n" )
FNC_Calculs ( )
except :
print ( "erreur de saisie !" )
# --- Bouclage du programme ---
kchoix = input ( "Voulez-vous recommencer (O ou N) ? " )
if kchoix.upper ( ) == "N" : break
# --- FIN DU PROGRAMME ---
print ( "Au revoir" )
# --- Programme : JFB ---
# --- Décembre 2025 ---
# --- Fin ---
Pour mieux comprendre l'exemple en PYTHON sans tkinter.
# --- Origine Nerd ---
# --- RETROGICIEL - TKINTER ---
# --- Le trianguleux ---
# -*- coding: utf-8 -*-
# --- IMPORTATION DES MODULES ---
# --- Modules de la bibliothèque standard ---
import tkinter
import math
# --- DÉFINITION DES FONCTIONS PERSONNALISEES ---
# --- Calculs des caractèristiques du triangle ---
def FNC_Calculer ( ) :
# --- Controle de la validités des saisies---
try :
kabsA = float ( TKV_AbsA.get ( ) )
kordA = float ( TKV_OrdA.get ( ) )
kabsB = float ( TKV_AbsB.get ( ) )
kordB = float ( TKV_OrdB.get ( ) )
kabsC = float ( TKV_AbsC.get ( ) )
kordC = float ( TKV_OrdC.get ( ) )
except :
TKV_Resultats.set ( "Erreurs de saisies !" )
return
# --- Longueurs des cotés ---
kAB = abs ( ( ( ( kabsB - kabsA ) ** 2 ) + ( ( kordB - kordA ) ** 2 ) ) ** .5 )
kBC = abs ( ( ( ( kabsC - kabsB ) ** 2 ) + ( ( kordC - kordB ) ** 2 ) ) ** .5 )
kCA = abs ( ( ( ( kabsA - kabsC ) ** 2 ) + ( ( kordA - kordC ) ** 2 ) ) ** .5 )
kresultat = f"Longueur [AB] : {kAB:.2f}\n"
kresultat += f"Longueur [BC] : {kBC:.2f}\n"
kresultat +=f"Longueur [CA] : {kCA:.2f}\n\n"
# --- Aire du triangle ---
kdp = ( kAB + kBC + kCA ) / 2 # - demi-périmetre du triangle ABC
kaire = ( ( kdp - kAB ) * ( kdp - kBC ) * ( kdp - kCA ) * kdp ) ** .5
kresultat +=f"Superficie : {kaire:.2f}\n\n"
# --- Hauteurs du triangle ---
khautA = ( 2 * kaire ) / kBC
khautB = ( 2 * kaire ) / kCA
khautC = ( 2 * kaire ) / kAB
kresultat +=f"Hauteur issue de A : {khautA:.2f}\n"
kresultat +=f"Hauteur issue de B : {khautB:.2f}\n"
kresultat +=f"Hauteur issue de C : {khautC:.2f}\n\n"
# --- Rayon du cercle inscrit ---
krayon = kaire / kdp
kresultat +=f"Rayon du cercle inscit : {krayon:.2f}\n\n"
# --- Angles du triangle - loi des cosinus ---
kangleA = math.degrees ( math.acos ( ( ( kCA ** 2 ) + ( kAB ** 2 ) - ( kBC ** 2 ) ) / ( 2 * kCA * kAB ) ) )
kangleB = math.degrees ( math.acos ( ( ( kAB ** 2 ) + ( kBC ** 2 ) - ( kCA ** 2 ) ) / ( 2 * kAB * kBC ) ) )
kangleC = 180 - ( kangleA + kangleB )
kresultat +=f"Angle en A : {kangleA:.2f} degrés\n"
kresultat +=f"Angle en B : {kangleB:.2f} degrés\n"
kresultat +=f"Angle en C : {kangleC:.2f} degrés"
# --- Affichage des résultats ---
TKV_Resultats.set ( kresultat )
# --- CREATION DE L'INTERFACE GRAPHIQUE ---
# --- Création de la fenêtre principale ---
TKI_Principal = tkinter.Tk ( )
TKI_Principal.title ( "RETROGICIEL - Le trianguleux" )
# --- Création des variables de controles ---
TKV_AbsA = tkinter.DoubleVar ( )
TKV_OrdA = tkinter.DoubleVar ( )
TKV_AbsB = tkinter.DoubleVar ( )
TKV_OrdB = tkinter.DoubleVar ( )
TKV_AbsC = tkinter.DoubleVar ( )
TKV_OrdC = tkinter.DoubleVar ( )
TKV_Resultats = tkinter.StringVar ( )
# --- Mise en place des controles (anonymes et nommés) dans la fenêtre principale ---
tkinter.Label ( TKI_Principal , text = "Abscisse" ).grid ( row = 0 , column = 1 , sticky = "nesw" )
tkinter.Label ( TKI_Principal , text = "Ordonnée" ).grid ( row = 0 , column = 2 , sticky = "nesw" )
tkinter.Label ( TKI_Principal , text = "Point A" ).grid ( row = 1 , column = 0 , sticky = "nesw" )
tkinter.Entry ( TKI_Principal , textvariable = TKV_AbsA , width = 8 ).grid ( row = 1 , column = 1 , sticky = "nesw" )
tkinter.Entry ( TKI_Principal , textvariable = TKV_OrdA , width = 8 ).grid ( row = 1 , column = 2 , sticky = "nesw" )
tkinter.Label ( TKI_Principal , text = "Point B" ).grid ( row = 2 , column = 0 , sticky = "nesw" )
tkinter.Entry ( TKI_Principal , textvariable = TKV_AbsB , width = 8 ).grid ( row = 2 , column = 1 , sticky = "nesw" )
tkinter.Entry ( TKI_Principal , textvariable = TKV_OrdB , width = 8 ).grid ( row = 2 , column = 2 , sticky = "nesw" )
tkinter.Label ( TKI_Principal , text = "Point C" ).grid ( row = 3 , column = 0 , sticky = "nesw" )
tkinter.Entry ( TKI_Principal , textvariable = TKV_AbsC , width = 8 ).grid ( row = 3 , column = 1 , sticky = "nesw" )
tkinter.Entry ( TKI_Principal , textvariable = TKV_OrdC , width = 8 ).grid ( row = 3 , column = 2 , sticky = "nesw" )
tkinter.Button ( TKI_Principal , text = "Calculer" , command = FNC_Calculer ).grid ( row = 4 , column = 0 , columnspan = 2 , sticky = "nesw" )
tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy ).grid ( row = 4 , column = 2 , columnspan = 2 , sticky = "nesw" )
tkinter.Label ( TKI_Principal , textvariable = TKV_Resultats , height = 15 , justify = "left" ).grid ( row = 5 , column = 0 , columnspan = 4 , sticky = "nw" )
# --- DEBUT DU PROGRAMME ---
TKI_Principal.mainloop ( )
# --- Programme : JFB ---
# --- Décembre 2025 ---
# --- Fin ---
Pour mieux comprendre l'exemple en PYTHON avec tkinter.
' --- Origine Nerd propose pour ---
' --- RETROGICIEL - QB64 ---
' --- Le trianguleux ---
' --- INITIALISATION GENERALE ---
DIM SHARED G_AbsA, G_OrdA, G_AbsB, G_OrdB, G_AbsC, G_OrdC AS SINGLE
' --- DEBUT DU PROGRAMME ---
COLOR 15: LOCATE 1, 32: PRINT " LE TRIANGULEUX "
VIEW PRINT 3 TO 25
' --- BOUCLE PRINCIPALE ---
DO
' --- Instruction de saisie ---
COLOR 11: CLS
PRINT "Format pour la saisie des coordonnees : X.xx , Y.yy"
PRINT "par exemple : 7.89 , 4.3"
' --- Saisies des coordonneees ---
INPUT "Entrez les coordonnees du point A : ", G_AbsA, G_OrdA
INPUT "Entrez les coordonnees du point B : ", G_AbsB, G_OrdB
INPUT "Entrez les coordonnees du point C : ", G_AbsC, G_OrdC
COLOR 10: CLS
' --- Calculs et affichache des caracteristiques ---
FNC_Calculs
' --- Bouclage du programme ---
COLOR 13: PRINT
INPUT "Voulez-vous recommencer [ O ou N ] "; kchoix$
LOOP UNTIL UCASE$(kchoix$) = "N"
' --- FIN DU PROGRAMME ---
PRINT "Au revoir."
END
' --- DEFINITION DES FONCTIONS PERSONNALISEES ---
' --- Calculs des caracteristisues du triangle ---
SUB FNC_Calculs
' --- Rappel des coordonnees ---
PRINT "Coordonnees du point A : ("; G_AbsA; ","; G_OrdA; ")"
PRINT "Coordonnees du point B : ("; G_AbsB; ","; G_OrdB; ")"
PRINT "Coordonnees du point A : ("; G_AbsC; ","; G_OrdC; ")"
' --- Longueurs des cotes ---
kAB = ABS(SQR(((G_AbsB - G_AbsA) ^ 2) + ((G_OrdB - G_OrdA) ^ 2)))
kBC = ABS(SQR(((G_AbsC - G_AbsB) ^ 2) + ((G_OrdC - G_OrdB) ^ 2)))
kCA = ABS(SQR(((G_AbsA - G_AbsC) ^ 2) + ((G_OrdA - G_OrdC) ^ 2)))
PRINT USING "& #####.##"; "Longueur du segment [AB] :"; kAB
PRINT USING "& #####.##"; "Longueur du segment [BC] :"; kBC
PRINT USING "& #####.##"; "Longueur du segment [CA] :"; kCA
' --- Aire du triangle ---
kdp = (kAB + kBC + kCA) / 2 ' - demi-périmetre du triangle ABC
kaire = SQR(((kdp - kAB) * (kdp - kBC) * (kdp - kCA) * kdp))
PRINT USING "& #####.##"; "Superficie du triangle ABC :"; kaire
' --- Hauteurs du triangle ---
khautA = (2 * kaire) / kBC
khautB = (2 * kaire) / kCA
khautC = (2 * kaire) / kAB
PRINT USING "& #####.##"; "Hauteur issue de A vers BC :"; khautA
PRINT USING "& #####.##"; "Hauteur issue de B vers CA :"; khautB
PRINT USING "& #####.##"; "Hauteur issue de C vers AB :"; khautC
' --- Rayon du cercle inscrit ---
krayon = kaire / kdp ' --- rayon inscrit ---
PRINT USING "& #####.##"; "Rayon du cercle inscit en ABC :"; krayon
' --- Angles du triangle - loi des cosinus
kangleA = _R2D(_ACOS(((kCA ^ 2) + (kAB ^ 2) - (kBC ^ 2)) / (2 * kCA * kAB)))
kangleB = _R2D(_ACOS(((kAB ^ 2) + (kBC ^ 2) - (kCA ^ 2)) / (2 * kAB * kBC)))
kangleC = 180 - (kangleA + kangleB)
PRINT USING "& #####.## &"; "Angle en A :"; kangleA; "degres"
PRINT USING "& #####.## &"; "Angle en B :"; kangleB; "degres"
PRINT USING "& #####.## &"; "Angle en C :"; kangleC; "degres"
END SUB
' --- Programme : JFB ---
' --- Decembre 2025 ---
' --- Fin ---
Pour mieux comprendre l'exemple en QB64.
REM --- Origine Nerd propose pour ---
REM --- RETROGICIEL - BBC BASIC ---
REM --- Le trianguleux ---
REM --- DEBUT DU PROGRAMME ---
MODE 8 : COLOUR 128 : CLS
COLOUR 2 : PRINT TAB( 31 ) "LE TRIANGULEUX"
COLOUR 7 : PRINT TAB( 31 ) "=============="
VDU 28 , 0 , 25 , 80 , 3
@% = &0102020A : REM - Formate l'affichage des nombres a 2 chiffres après la virgule
REM --- BOUCLE PRINCIPALE ---
REPEAT
REM --- Instruction de saisie ---
COLOUR 14 : CLS
PRINT "Format pour la saisie des coordonnees : X.xx , Y.yy"
PRINT "par exemple : 7.89 , 4.3"
REM --- Saisies des coordonneees ---
INPUT "Entrez les coordonnees du point A : " G_AbsA, G_OrdA
INPUT "Entrez les coordonnees du point B : " G_AbsB, G_OrdB
INPUT "Entrez les coordonnees du point C : " G_AbsC, G_OrdC
COLOUR 11 : CLS
REM --- Calculs et affichache des caracteristiques ---
PROC_Calculs
REM --- Bouclage du programme ---
COLOUR 6 : PRINT
INPUT "Voulez-vous recommencer [ O ou N ] " ; kchoix$
UNTIL kchoix$ = "N" OR kchoix$ = "n"
REM --- FIN DU PROGRAMME ---
PRINT "Au revoir."
END
REM --- DEFINITION DES FONCTIONS PERSONNALISEES ---
REM --- Calculs et affichache des caracteristiques du triangle ---
DEF PROC_Calculs
REM --- Rappel des coordonnees ---
PRINT "Coordonnees du point A : ( "; G_AbsA; " , " ; G_OrdA; " )"
PRINT "Coordonnees du point B : ( "; G_AbsB; " , " ; G_OrdB; " )"
PRINT "Coordonnees du point A : ( "; G_AbsC; " , " ; G_OrdC; " )"
REM --- Longueurs des cotes ---
kAB = ABS(SQR( ( ( G_AbsB - G_AbsA ) ^ 2 ) + ( ( G_OrdB - G_OrdA ) ^ 2 ) ) )
kBC = ABS(SQR( ( ( G_AbsC - G_AbsB ) ^ 2 ) + ( ( G_OrdC - G_OrdB ) ^ 2 ) ) )
kCA = ABS(SQR( ( ( G_AbsA - G_AbsC ) ^ 2 ) + ( ( G_OrdA - G_OrdC ) ^ 2 ) ) )
PRINT "Longueur du segment [AB] : " ; kAB
PRINT "Longueur du segment [BC] : " ; kBC
PRINT "Longueur du segment [CA] : " ; kCA
REM --- Aire du triangle ---
kdp = ( kAB + kBC + kCA ) / 2 : REM - demi-pSTR$LENrimetre du triangle ABC
kaire = SQR( ( ( kdp - kAB ) * ( kdp - kBC ) * ( kdp - kCA ) * kdp ) )
PRINT "Superficie du triangle ABC : " ; kaire
REM --- Hauteurs du triangle ---
khautA = ( 2 * kaire ) / kBC
khautB = ( 2 * kaire ) / kCA
khautC = ( 2 * kaire ) / kAB
PRINT "Hauteur issue de A vers BC : " ; khautA
PRINT "Hauteur issue de B vers CA : " ; khautB
PRINT "Hauteur issue de C vers AB : " ; khautC
REM --- Rayon du cercle inscrit ---
krayon = kaire / kdp : REM --- rayon inscrit ---
PRINT "Rayon du cercle inscit en ABC : " ; krayon
REM --- Angles du triangle - loi des cosinus
kangleA = DEG( ACS( ( ( kCA ^ 2 ) + ( kAB ^ 2 ) - ( kBC ^ 2 ) ) / ( 2 * kCA * kAB ) ) )
kangleB = DEG( ACS( ( ( kAB ^ 2 ) + ( kBC ^ 2 ) - ( kCA ^ 2 ) ) / ( 2 * kAB * kBC ) ) )
kangleC = 180 - ( kangleA + kangleB )
PRINT "Angle en A : " ; kangleA ; " degres"
PRINT "Angle en B : " ; kangleB ; " degres"
PRINT "Angle en C : " ; kangleC ; " degres"
ENDPROC
REM --- Programme : JFB ---
REM --- Decembre 2025 ---
REM --- Fin ---
Pour mieux comprendre l'exemple en BBC BASIC.