IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tcl/Tk Discussion :

Défi Tcl n°1 : persistance additive et multiplicative


Sujet :

Tcl/Tk

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 528
    Points
    528
    Par défaut Défi Tcl n°1 : persistance additive et multiplicative
    Bonjour,

    Voici un défi qui consiste à écrire un programme en Tcl-Tk. Plusieurs solutions plus ou moins astucieuses ou élégantes sont possibles. L'idée étant que cela suscite des commentaires ou des questions sur les codes proposés afin d'en apprendre un peu plus sur Tcl-Tk.


    Défi Tcl n°1 : persistance additive et multiplicative

    A) La persistance additive PA(n) d'un nombre entier n consiste à :
    1. prendre un nombre n
    2. additionner les chiffres qui composent ce nombre
    3. recommencer l'étape 1. à partir résultat

    La persistance additive de n correspond au nombre de fois que l'on peut réaliser l'étape 2.

    Ex :
    N = 1789
    1 + 7 + 8 + 9 = 25
    2 + 5 = 7

    Donc PA(1789) = 2

    B) La persistance multiplicative PM(n) d'un nombre n consiste à faire la même chose mais en multipliant les chiffres de n :

    Ex :
    N = 1492
    1 x 4 x 9 x 2 = 72
    7 x 2 = 14
    1 x 4 = 4

    Donc PM(1492) = 3

    Le défi est donc d'écrire les deux procédures PA et PM qui retournent la persistance additive et multiplicative d'un entier n.

    A vos claviers (ou commandes vocales )

    ----
    Canvas

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Moi j'ai fait comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    proc PA {n} {
        set r [expr [join [split $n {}] +]]
        if {$r == $n} {return [info level]} else {return [PA $r]}
    }
     
    proc PM {n} {
        set r [expr [join [split $n {}] *]]
        if {$r == $n} {return [info level]} else {return [PM $r]}
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 528
    Points
    528
    Par défaut
    Bonsoir,

    Whouah, ça commence fort : récursivité et introspection du niveau de la pile !

    Bon, je propose ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    proc PA n {
     for {set i 0} {[string length $n] > 1} {incr i} {
        set n [::tcl::mathop::+ {*}[split $n ""]]
     }
     return $i
    }
     
    proc PM n {
     for {set i 0} {[string length $n] > 1} {incr i} {
        set n [::tcl::mathop::* {*}[split $n ""]]
     }
     return $i
    }
    ----
    Canvas

Discussions similaires

  1. Matrices : addition et multiplication
    Par frafria dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 28/01/2014, 23h07
  2. addition de multiplication
    Par dubis dans le forum Programmation et administration système
    Réponses: 3
    Dernier message: 18/01/2012, 11h09
  3. créer un formulaire et faire une addition ou multiplication
    Par ellocodelcoco dans le forum Langage
    Réponses: 7
    Dernier message: 17/11/2009, 15h37
  4. problème addition et multiplication (BCD)
    Par jocelyn54 dans le forum C
    Réponses: 8
    Dernier message: 08/12/2007, 18h41
  5. Addition et multiplications
    Par Yayel dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 04/04/2003, 23h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo