[resolu] programme PGCD

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
swolf
Messages : 40
Inscription : jeu. 11/févr./2010 21:48

[resolu] programme PGCD

Message par swolf »

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!! :D

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
Merci d'avance!
Dernière modification par swolf le mer. 15/sept./2010 20:53, modifié 1 fois.
Feel The Power Of PureBasic
.................................................................................................................................................................
Soyez indulgents: je debute! :)
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: programme PGCD

Message par Cool Dji »

Bonjour,

Bienvenue sur le Forum :D
C'est sympa, c'est propre !
Tu prévois une version fenetrée ?
Only PureBasic makes it possible
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: programme PGCD

Message par Le Soldat Inconnu »

Pour information, en mode rapide, ca revient à

Code : Tout sélectionner

Debug 45%4
C'est le modulo
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: programme PGCD

Message par Cool Dji »

Argh LSI 8) :D
Only PureBasic makes it possible
swolf
Messages : 40
Inscription : jeu. 11/févr./2010 21:48

Re: programme PGCD

Message par swolf »

re
merci pour vos réponses rapides!
c'est vrai que le même programme en fenêtré serait plus pratique je m'y met d'ailleurs tout de suite.
pour le modulo, c'est vrai que j'aurais pu faire le même programme beaucoup plus rapidement mais je l'ai surtout fait pour m'entrainer...
et puis comme je n'ai pas souvent d'idées de programme, j'aime bien profiter de ces rares choses et bien les peaufiner :p
Feel The Power Of PureBasic
.................................................................................................................................................................
Soyez indulgents: je debute! :)
swolf
Messages : 40
Inscription : jeu. 11/févr./2010 21:48

Re: programme PGCD

Message par swolf »

au fait, est il possible d'insérer un saut de ligne dans une string (en c++ par exemple on peut mettre "f" au milieu de sa chaine de caractère je crois)
cela existe-t-il aussi en PB? ça m'aiderait beaucoup... (pour les étapes dans le presse papier entre autre)
Feel The Power Of PureBasic
.................................................................................................................................................................
Soyez indulgents: je debute! :)
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Re: programme PGCD

Message par cederavic »

Suffit de rajouter les deux characteres : TonStringLeopard$ + Chr(13) + Chr(10) 8)
swolf
Messages : 40
Inscription : jeu. 11/févr./2010 21:48

Re: programme PGCD

Message par swolf »

d'accord merci :P
Feel The Power Of PureBasic
.................................................................................................................................................................
Soyez indulgents: je debute! :)
Répondre