Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[Prog]AutoPGCD Calc
Auteur Message
Répondre en citant
Message [Prog]AutoPGCD Calc 
Bonjour,

Voici un programme assez simple mais qui 'a donné du fil à retordre ...

UN CALCULATEUR DE PGCD !!!

Bon sinon le pgcd (Plus Grand Diviseur Commun), oui je sais c'est inversé mais ce n'est pas nue faute Mort de Rire

Alors il y aura sûrement des bugs, dites-le moi j’essayerais de corriger.
Sinon vous pouvez mettre le plus grand des deux nombres dans la case de votre choix.
Et logiquement le deuxième (le plus petit) dans celle qui est libre. Mr. Green

OS de développement : Vista Ed. Familiale 32 bits
Includes : #include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
UDF : aucun
Utilisation de la méthode de redimensionnement de la fenêtre proportionnellement à la taille de l'écran.

Code commenté :
Code:
Local $y,$first,$second,$x,$z
$y=1 ;on déclare les variables

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1",351/1680*@DesktopWidth, 351/1050*@DesktopHeight, 192/1680*@DesktopWidth, 124/1050*@DesktopHeight)
Global $Title = GUICtrlCreateLabel("AutoPGCD Calc", 63/1680*@DesktopWidth, 8/1050*@DesktopHeight, 224/1680*@DesktopWidth, 39/1050*@DesktopHeight)
GUICtrlSetFont(-1, 22, 800, 4, "Maiandra GD")
Global $LTitle = GUICtrlCreateLabel("Calcul du PGCD via l'algorithme d'Euclide", 30/1680*@DesktopWidth, 56/1050*@DesktopHeight, 291/1680*@DesktopWidth, 24/1050*@DesktopHeight)
GUICtrlSetFont(-1, 12, 400, 2, "Maiandra GD")
Global $L1 = GUICtrlCreateLabel("Premier nombre : ", 8/1680*@DesktopWidth, 104/1050*@DesktopHeight, 120/1680*@DesktopWidth, 22/1050*@DesktopHeight)
GUICtrlSetFont(-1, 11, 400, 0, "Maiandra GD")
Global $I1 = GUICtrlCreateInput("ENTREZ UN NOMBRE ...", 9/1680*@DesktopWidth, 128/1050*@DesktopHeight, 337/1680*@DesktopWidth, 21/1050*@DesktopHeight, BitOR($ES_UPPERCASE,$ES_AUTOHSCROLL))
Global $L2 = GUICtrlCreateLabel("Second nombre : ", 8/1680*@DesktopWidth, 181/1050*@DesktopHeight, 116/1680*@DesktopWidth, 22/1050*@DesktopHeight)
GUICtrlSetFont(-1, 11, 400, 0, "Maiandra GD")
Global $I2 = GUICtrlCreateInput("ENTREZ UN NOMBRE ...", 9/1680*@DesktopWidth, 205/1050*@DesktopHeight, 337/1680*@DesktopWidth, 21/1050*@DesktopHeight, BitOR($ES_UPPERCASE,$ES_AUTOHSCROLL))
Global $BOne = GUICtrlCreateButton("Calcul du PGCD", 75/1680*@DesktopWidth, 240/1050*@DesktopHeight, 201/1680*@DesktopWidth, 41/1050*@DesktopHeight, $WS_GROUP)
Global $Answer = GUICtrlCreateLabel("PGCD()=", 6/1680*@DesktopWidth, 305/1050*@DesktopHeight, 334/1680*@DesktopWidth, 38/1050*@DesktopHeight, $SS_CENTER)
GUICtrlSetFont(-1, 11, 800, 0, "Maiandra GD")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
;on fait la GUI

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit
      Case $BOne ;si on presse le bouton
         $first=GUICtrlRead($I1) ; on récupère la valeur le l'input1
         $second=GUICtrlRead($I2) ; on récupère la valeur le l'input2
         If $first > $second Then ; si le premier input est sup. au deuxième alors on met à jour les variables
            $up=$first
            $pu=$first
            $down=$second
            $dom=$second
         Else ; ici on fait l'inverse si le deuxième input est sup. au premier
            $up=$second
            $pu=$second
            $down=$first
            $dom=$first
         EndIf

         While $y<>0 ; tant que l'on ne toruve pas 0 on continue
            $x=Round($up/$down) ;on récupère l'arondie du calcul opur faire la divison euclidiene
            $y=$up-($x*$down) ; on récupère la valeur de y
            $up=$down ; on met à jour les valeurs
            $down=$y
         WEnd
         $end=$up-$down ; ici on calcul le PGCD même si il n'y a qu'une ligne de calcul
         $test=StringIsDigit($end) ; on regarde si le résultat posède un autre caractère que un nombre de 0 à 9, donc si positif ou négatif
         If $test=@error Then ; si erreur donc si négatif
            $end=StringMid($end,2) ; on récupère le PGCD à partir du deuxième caractère pour enlever le signe négatif
         EndIf
         GUICtrlSetData($Answer, "PGCD(" & $pu & ";" & $dom & ")= " & $end) ; no met à jour le label qui contient le résultat
         $y=1 ; on met à jour la variable pour qu'au prochain calcul onr entre quand même dans la boucle While
   EndSwitch

WEnd


Voilà, j'espère que ça vous plaira.

PS: je l'ai fait en vitesse donc j'espère que ça bugera pas trop



Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [Prog]AutoPGCD Calc 
Salut,

C'est cool ! A part changer le titre de la fenêtre, je vois pas quoi améliorer. Okay




______________________________________________________
Répondre en citant
Message [Prog]AutoPGCD Calc 
Merci, sinon je pourrais faire la même chose pour 3 nombres.



Répondre en citant
Message [Prog]AutoPGCD Calc 
Salut,

eh bien voilà j'avais dit que je le ferais pour 3 nombres et bien je suis allé encore plus loin et j'ai décidé de ne plus vous limiter.
A présent entrez autant de nombre que vous voulez.
Séparez-les par un ; et faites vous plaisir.

Nouveautés :

-Code un peu plus lourd mais extrêmement commenté
-Fenêtre plus petite
-Suppression d'un label devenu inutile.

Bugs :

-Si vous entrez trop de nombres vous risquez de faire buguer le listage de chaque nombre.
-Pour remédier à ce problème il vaut mieux rouvrir la fenêtre à chaque fois pour que tout se réinitialise.

Et voici le code :

Code:
Local $y=1, $count=1, $error, $first, $array, $s, $i, $count, $up, $down, $x, $y, $end ;déclaration des variables utilisées en Local
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("AutoPGCD Calc",351/1680*@DesktopWidth, 281/1050*@DesktopHeight, 192/1680*@DesktopWidth, 124/1050*@DesktopHeight)
Global $Title = GUICtrlCreateLabel("AutoPGCD Calc", 63/1680*@DesktopWidth, 8/1050*@DesktopHeight, 224/1680*@DesktopWidth, 39/1050*@DesktopHeight)
GUICtrlSetFont(-1, 22, 800, 4, "Maiandra GD")
Global $LTitle = GUICtrlCreateLabel("Calcul du PGCD via l'algorithme d'Euclide", 30/1680*@DesktopWidth, 56/1050*@DesktopHeight, 291/1680*@DesktopWidth, 24/1050*@DesktopHeight)
GUICtrlSetFont(-1, 12, 400, 2, "Maiandra GD")
Global $L1 = GUICtrlCreateLabel('Séparez chaque nombre par un ";"', 8/1680*@DesktopWidth, 104/1050*@DesktopHeight, 210/1680*@DesktopWidth, 22/1050*@DesktopHeight)
GUICtrlSetFont(-1, 11, 400, 0, "Maiandra GD")
Global $I = GUICtrlCreateInput("ENTREZ LES NOMBRES ...", 9/1680*@DesktopWidth, 128/1050*@DesktopHeight, 337/1680*@DesktopWidth, 21/1050*@DesktopHeight, BitOR($ES_UPPERCASE,$ES_AUTOHSCROLL))
GUICtrlSetFont(-1, 11, 400, 0, "Maiandra GD")
Global $BOne = GUICtrlCreateButton("Calcul du PGCD", 75/1680*@DesktopWidth, 170/1050*@DesktopHeight, 201/1680*@DesktopWidth, 41/1050*@DesktopHeight, $WS_GROUP)
Global $Answer = GUICtrlCreateLabel("PGCD()=", 6/1680*@DesktopWidth, 235/1050*@DesktopHeight, 334/1680*@DesktopWidth, 38/1050*@DesktopHeight, $SS_CENTER)
GUICtrlSetFont(-1, 11, 800, 0, "Maiandra GD")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
;on fait la GUI (elle prend moins de place que la première)

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE ;si on appuie sur la crois on ferme la fenêtre
         Exit
      Case $BOne ;si on presse le bouton
         $first=GUICtrlRead($I) ; on récupère la valeur le l'input I
         $array=StringSplit($first,";",1) ; on récupère tous les élements séparés par des ";"
         If $array[0] > 2 or $array[0]=2 Then ;si il y a au moins deux éléments d'écrits alors
            For $s=1 To $array[0] Step 1 ; Pour $s=1 jusqu'à le nombre d'élements total
               $test=StringIsDigit($array[$s]) ;on vérifie si se sont des nombres
               If $test=@error Then  ;si erreur alors on le dit
                  MsgBox(1,"ERROR","La donnée " & $array[$s] & " n'est pas un nombre. Merci de ne noter que des nombres") ;on le dit
                  $error=1 ;on déclare la avriable $erreur
                  ExitLoop ;on sort dela boucle puisqu'erreur
               EndIf
            Next
         Else ;sinon
            MsgBox(1,"Error","Il faut entrer au moins deux éléments pour calculer un PGCD") ;on annonce que les paramètres sont incorrects
            $error=1 ;$erreur à 1
         EndIf
         If $error <> 1 Then ;si $erreur différent de 1
            For $i=1 To $array[0]-1 Step 1 ;Pour $i=1 jusqu'au nombre total d'élément -1 (j'ai enlevé un nombre à $array[0] car sinon la boucle faisait toujours un tour de plus, Ex: 1;5, la boucle faisait tour 1 et 2 alors qu'on a besoin que d'un tour) alors
               If $count=1 Then ; si c'est al première fois
                  If $array[$i] > $array[$i+1] Then ; on regarde qui est supérieur à l'autre
                     $up=$array[$i]
                     $down=$array[$i+1]
                  Else
                     $up=$array[$i+1]
                     $down=$array[$i] ;on défini les ordres de grandeur
                  EndIf
                  While $y<>0 ;Tant que y est différent de 0 ($y=1 au départ)
                     $x=Round($up/$down) ;on cherche l'arrondi du plus grand par le plus petit
                     $y=$up-($x*$down) ; on défini le nombre nécessaire à additionner au plus petit multiplié par l'arrondi (divison Euclidienne, le reste)
                     $up=$down ;on change les positions pour recommencer un tour
                     $down=$y ;idem
                  WEnd
                  $end=$up-$down ;ici c'est si le reste égal 0 dès le début
                  $test=StringIsDigit($end) ;on vérifie si c'est un nombre
                  If $test=@error Then ;si non
                     $end=StringMid($end,2) ; on supprime le - devant en récupérant à partir du deuxième caractère
                  EndIf
                  $y=1
                  $count=0 ;on met count à 0 pour passer à la méthode n°2
               Else ;début de la seconde méthode
                  If $end > $array[$i+1] Then
                     $up=$end
                     $down=$array[$i+1]
                  Else
                     $up=$array[$i+1]
                     $down=$end ;idem qu'au premier sauf qu'on ne récupère plus le nomber qui correspond à la boucle For mais le précédent et le suivant
                  EndIf
                  While $y<>0
                     $x=Round($up/$down)
                     $y=$up-($x*$down)
                     $up=$down
                     $down=$y
                  WEnd ;idem
                  $end=$up-$down
                  $test=StringIsDigit($end)
                  If $test=@error Then
                     $end=StringMid($end,2)
                  EndIf
                  $y=1 ;idem sauf qu'on ne redéfinie par $count au cas ou il y aurait un autre tour
               EndIf
            Next
            GUICtrlSetData($Answer, "PGCD(" & $first & ")= " & $end) ;on met à jour le label correspondant
         $count=1
         $y=1 ;mise à jour des variables
      Else
          $error=0 ;sinon (si il y avait une erreur) alors on remet $error à 0
      EndIf
      $array=""
   Case $Gui_EVENT_RESIZED
      GuictrlSe
   EndSwitch
WEnd


Demandez pour l'exécutable Okay



Répondre en citant
Message [Prog]AutoPGCD Calc 
Salut,

Tu as mal copié-collé je pense, il manque la fin de la fonction à la fin du code :
Code:

Case $Gui_EVENT_RESIZED
      GuictrlSe
   EndSwitch
WEnd


Sinon c'est beaucoup mieux, bravo ! Okay

Tu pourrais augmenter la hauteur de l'imput parce que chez moi on voit pas bien les nombres.

A+




______________________________________________________
Répondre en citant
Message [Prog]AutoPGCD Calc 
En effet j'etais parti sur l'idee d'utiliser ma technoque pour redimensionner
mais je ne l'ai pas faites.
Bien sur, j'agrandirais la taille de.l'input



Message [Prog]AutoPGCD Calc 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch