Maple
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Maple



  1. #1
    leodark

    Maple


    ------

    Bonjour,
    Je ne sais pas si ce forum est vraiment fait pour répondre a ces questions mais je tente quand même ^^:
    J'essaye de faire une procédure me donnant le nombre d'étape nécessaire a l'Algorithme de Syracuse pour atteindre 1.
    Pour le moment j'ai abandonné qu'il me donne le nombre d'etape, j'essaye juste d'obtenir "1" comme réponse (la valeur qu'il a trouvé a la fin de l'algorithme). (Je débute totalement dans ce logiciel alors mon probleme vient surement d'une non compréhension du fonctionnement des procédures).

    Syracuse := proc (n)
    option remember;
    if n = 1 then 1
    else if type((1/2)*n, integer) then Syracuse(n/2)
    else Syracuse(3*n+1)
    end if
    end if
    end proc

    Sauf que quand je lance le proc avec une valeur il me renvois un nombre suivit de "Cyracuse".
    Voila comment je comprend ce que j'ai écrit:
    Si n=1 alors la procédure doit renvoyer 1, si n est paire alors elle renvoi la valeur de proc(n/2), si impaire celle de proc(n*3+1).
    Donc au final elle ne devrait renvoyer que la valeur 1.

    -----

  2. #2
    leodark

    Re : Maple

    Hum j'ai trouvé c'est bon ^^

  3. #3
    RoBeRTo-BeNDeR

    Re : Maple

    Bonjour,

    je te propose ceci :

    Syracuse := proc (n)
    >local j,m;
    > j:=0:m:=n:
    >print(m);
    > while m>1 or m<1 do
    > if type((1/2)*m, integer) then m:=m/2;j:=j+1;print(m);
    > else m:=3*m+1 ;j:=j+1rint(m);
    > end if;
    > end do;
    > print(j);
    > end;

    Alors premièrement fais gaffe, si tu as besoin de faire des opération sur ta valeur d'entrée il est parfois recommander d'utiliser une autre qui prend sa valeur initiale pour pas que il y ai de problèmes comme pour mon "m"

    "j" compte le nombre d'étapes. A chaque étape il prend une unité de plus.

    Et un print(j) à la fin pour savoir le nombre d'étapes. donc par exemple si tu fais

    Syracuse(4); çà te donnera :

    4 (Uo)
    2 (U1)
    1 (U2)
    2 (nombre d'étapes)

    Essaye de reprendre ce que je t'ai mis et tente de refaire une procédure qui utilise ta technique de la procédure qui s'appelle elle même
    Le problème dans la tienne c'est que en réalité elle s'appelait elle même mais ne faisait rien, un seul calcul et pas un nombre quelconque "While" + condition


    RoBeRTo (Bonne chance)

    EDIT = Un peu trop tard

  4. #4
    leodark

    Re : Maple

    No c'est pas trop tard parce que ce que j'avais trouvé était un peu du bricolage, je devais rentrer en utilisant la procédure "n" mais aussi un "i" qui était toujours 1. Car avec mon algorithme du haut si je fais un local i que j'incrémente de 1 à chaque fois, cela ne fonctionne pas puisqu'il relance l'algorithme plusieurs fois.

    Syracuse := proc (n, i)
    option remember;
    if n = 1 then i
    else if type((1/2)*n, integer) then Syracuse((1/2)*n, i+1)
    else Syracuse(3*n+1, i+1)
    end if
    end if
    end proc

    Donc il y aurait t il une solution pour utiliser la méthode récursive sans avoir un rentrer deux valeurs au debut?
    Dernière modification par leodark ; 27/11/2010 à 18h38.

  5. A voir en vidéo sur Futura
  6. #5
    RoBeRTo-BeNDeR

    Re : Maple

    Ah oui d'accord ^^ un peu de la bricole oui mais je ne suis pas forcement un grand admirateur des procédures qui s'appellent elle même ^^

Discussions similaires

  1. Maple !
    Par chentouf dans le forum Mathématiques du supérieur
    Réponses: 8
    Dernier message: 09/07/2008, 20h05
  2. [Maple]Entiers sur maple
    Par FonKy- dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 09/08/2007, 18h55
  3. Maple
    Par invite1a819f7f dans le forum Mathématiques du supérieur
    Réponses: 13
    Dernier message: 14/07/2006, 11h03
  4. maple
    Par invite28f1287e dans le forum Logiciel - Software - Open Source
    Réponses: 11
    Dernier message: 07/07/2005, 23h06
  5. maple
    Par invitecb387634 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 05/06/2005, 17h14