[resolu] programme PGCD
Publié : jeu. 11/févr./2010 21:58
bonjours à tous!
voici un petit programme de calcul de PGCD (a l'aide de l'algorithme des soustractions successives) que j'ai fait pour m'entraîner à utiliser certaines fonctions que je n'avais jamais utilisées auparavant.
dites moi ce que vous en pensez!!
Merci d'avance!
voici un petit programme de calcul de PGCD (a l'aide de l'algorithme des soustractions successives) que j'ai fait pour m'entraîner à utiliser certaines fonctions que je n'avais jamais utilisées auparavant.
dites moi ce que vous en pensez!!

Code : Tout sélectionner
;============================= programme de calcul de PGCD =================================
;================================ par florent ECOCHARD =====================================
;====================================== version 1.0 ========================================
Repeat
OpenConsole()
If io = 0
;=========================================+entrée+============================================================
ConsoleColor(6, 0)
PrintN("Entrez nombre 1")
ConsoleColor(7, 0)
nbr1$ = Input() ;---->recuperation du premier membre dans une chaine de caractere
ConsoleColor(6, 0)
PrintN ("")
PrintN("Entrez nombre 2")
ConsoleColor(7, 0)
nbr2$ = Input() ;----> recuperation du deuxieme membre dans une chaine de caractere
nbr1 = Val(nbr1$) ;----> transformation de ces chaines de caractere en variables
nbr2 = Val(nbr2$)
ConsoleColor(6, 0)
PrintN ("")
PrintN ("Voulez-vous afficher les etapes de calcul?")
PrintN ("")
ConsoleColor(0, 14)
Print("1-")
ConsoleColor(7, 0)
PrintN (" Oui")
ConsoleColor(0, 14)
Print("2-")
ConsoleColor(7, 0)
PrintN (" Non")
ConsoleColor(7, 0)
etapes$ = Input()
If nbr1>nbr2 ;----> condition1: si le 1eme membre est strictement superieur au 2eme
nbr3 = nbr1 - nbr2 ;----> soustraire le 2eme membre au 1er et stocker le nombre obtenu dans un 3eme variable nbr3
Else ;----> sinon
nbr1=Val(nbr2$);on remplace le 1er membre par 2eme
nbr2=Val(nbr1$);et inversement
EndIf
If etapes$ = "1"
PrintN("")
PrintN("")
ConsoleColor(3,0)
PrintN(" Etapes:")
ConsoleColor(7,0)
PrintN("")
EndIf
;=======================================+traitement+========================================================
While nbr1 ! nbr2 ;----> boucle: tant que le 1er membre est different du 2eme membre
nbr3 = nbr1 - nbr2 ;----> soustraire le 2eme membre au 1er et stocker le nombre obtenu dans un 3eme variable nbr3
If etapes$ = "1"
ConsoleColor(14,0)
Print("* ")
ConsoleColor(7,0)
steps$=Str(nbr1)+ "-" +Str(nbr2)+"="+Str(nbr3)
Longueur = Len(Chaine$)
dc$ = dc$ + " ; "+ steps$
PrintN(Str(nbr1)+ "-" +Str(nbr2)+"="+Str(nbr3) );----> afficher le calcul a chaque iteration
EndIf
If nbr2>nbr3 ;----> condition1: si le 2eme membre est strictement superieur a nbr3
nbr1 = nbr2 ;----> remplacer le 1er membre par le deuxieme
nbr2 = nbr3 ;----> et le deuxieme par nbr3
Else ;----> si le nombre 2 est inferieur a nbr3 (si il est egal a nbr3 on sort de la boucle)
nbr1 = nbr3
nbr2 = nbr2
EndIf ;----> fin de la condition1
Wend ;----> fin de condition
;============================================+sortie+===========================================================
ConsoleColor(12, 0)
If nbr3 = 1 ;----> condition2: si nbr3 (qui devient ici le PGCD) est egal a 1,
PrintN("")
PrintN("---> CES NOMBRES SONT PREMIERS ENTRE EUX") ;----> afficher "ces nombres sont premiers entre eux
PrintN("")
Else ;----> sinon,
PrintN("")
PrintN("---> PGCD("+nbr1$+" ;"+nbr2$+") = "+Str(nbr3)) ;----> afficher "PGCD(membre1; membre2) = nbr3
PrintN("")
EndIf ;----> fin de condition2
If etapes$ = "1"
ConsoleColor(8, 0)
PrintN("voulez-vous copier ces etapes dans le presse-papier?")
PrintN("1- Oui")
PrintN("2- Non")
copy$ = Input()
If copy$ = "1"
SetClipboardText(dc$)
MessageRequester ("confirmation", "copié!!")
EndIf
EndIf
ConsoleColor(3,0)
PrintN(" Voulez vous:")
PrintN("")
ConsoleColor(0, 14)
Print("1-")
ConsoleColor(7, 0)
PrintN(" Recommencer? ")
ConsoleColor(0, 14)
Print("2-")
ConsoleColor(7, 0)
PrintN(" Quitter?")
cond$=Input()
If cond$ = "1"
; ...
ElseIf cond$ = "2"
io = 1
EndIf
Else
Break
End
EndIf
ForEver