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

Algorithmes et structures de données Discussion :

resolution de facotriel(n)=1:quel langage


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 50
    Points : 25
    Points
    25
    Par défaut resolution de facotriel(n)=1:quel langage
    Bonjour,
    j'ai une procedure recursive que j'aimerai implementer.
    Cette procedure est presuqe similaire a celle de factoriel.
    Disons ça algorithmiquement:
    fuction f=fact(n)
    if n==1 f=1
    else f=n*fact(n-1)
    end

    Je veux faire fact(n)=1 est ce que vous connaissez quel langage peut faire ça?
    merci

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Je dirais : un langage fonctionnel. Mais je suis sur que Jedaï va venir confirmer mon propos.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Salut,

    Pourquoi forcement utiliser un style récursif pour une fonction aussi simple ? (et de toute façon, même en récursif dans un langage non prévu pour, ça ne posera pas de problème car il est peu probable que tu cherches à calculer des valeurs > 10!)
    Je ne répondrai à aucune question technique en privé

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par millie Voir le message
    Pourquoi forcement utiliser un style récursif pour une fonction aussi simple ?
    Je pense que c'est la définition de sa fonction qui est récursive. Le PO veut juste trouver le "n" tel que f(n)=constante.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Tu veux un langage qui te résolve l'équation?
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  6. #6
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    facotriel(n)=1
    La factorielle n'étant définie que sur les nombres entiers non négatifs, il n'y a que 2 solutions: n=0 et n=1. Pas besoin d'un programme pour calculer ça!
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 50
    Points : 25
    Points
    25
    Par défaut
    Salut, la probleme que j'ai est beaucoup plus complexe que ça, j'ai donné l'exemple de fact juste à titre d'exemple parce que j'ai besoin de faire un solve pour une procedure recursive (obligatoirement) et à valeur entiere en plus.
    Donc, ce n'est pas en option que je fais ça

  8. #8
    Membre éclairé
    Avatar de panda31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2003
    Messages : 670
    Points : 848
    Points
    848
    Par défaut
    Bonjour, pourrais-tu clarifier ?

    Une factorielle, ca peut se calculer en fortran 90, en ada, en java, en C++... L'algo ne change pas tant que le langage considéré supporte les appels récursifs... Que veux-tu faire, quelle est la charge attendue ? Dans l'exemple de fact(n), n vaut combien en maximum ?

    Après, si je comprends bien, tu cherches un n avec un résultat de factorielle donnée (fact(n) = 1) ?
    Michaël Mary
    Consultant PLM dans une société de conseil toulousaine
    Auditeur CNAM-IPST depuis septembre 2008
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods
    mon cv et mon domaine et mon blog
    Aucune question technique par MP, svp

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 50
    Points : 25
    Points
    25
    Par défaut
    Pour plus de precision, c'est un grand algo que je gere et que toutes les procedures que j'ai sont presque toutes à aspect recursif. J'ai essaye avec maple, ça fonctionne à merveille à part que je n'ai pas pu faire le ssolve .
    Merci de m'indiquer si vous connaissez un langage qui me resoud le probleme.
    .
    Sinon, le probleme est que j'ai ecrit l'alg avec des procedures. et que chacune comme j'ai indiqué est aspect recursif (en plus contient des boucles for, des if des else etc ) est ce que c'est facile pour moi pour traduire ces proc avec un aspet fonctionnel avec des procédures donc.

  10. #10
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Je pense que c'est la définition de sa fonction qui est récursive. Le PO veut juste trouver le "n" tel que f(n)=constante.
    Je crois que je viens seulement de comprendre.

    Pour récapituler, tu as une fonction quelconque qui prend en entrée un entier et qui retourne un entier, et tu cherches juste à résoudre : f(n) = uneconstante

    Y-a-t'il des propriétés sur ta fonction ?
    Par exemple si elle est croissante ou décroissante et si elle ne prend que des entiers, c'est pas trop violent.
    Je ne répondrai à aucune question technique en privé

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 50
    Points : 25
    Points
    25
    Par défaut
    Voila, je precise, ces des proba que je calcule, et que ne prennent (dans mon cas que des valeurs en entrees entieres).
    En voulant calculer p(n) j'aurais besoin de p(n-1), p(n-2),p(n-3) le tout dans p(n).
    voila , j'espere que je suis claire maintenant

  12. #12
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour.
    Je veux faire fact(n)=1 est ce que vous connaissez quel langage peut faire ça?
    Essaie sous Maple :
    pour 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    evalf(solve(product(n,n=1..n)-1));
    1.000000000
    pour 24 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    restart:with(linalg):
    evalf(solve(product(n,n=1..n)-24));
    4.000000000

  13. #13
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Une difficulté avec les problèmes portant sur l'ensemble des nombres naturels ou entiers est qu'on risque d'en sortir. Dans ton problème, qui consiste à résoudre l'équation n!=k , n et k étant des entiers, ça n'est possible que pour certaines valeurs de k, à savoir k=0, 1, 2, 6, 24, 120, etc. Tu dois donc décider de ce que ton programme fera pour d'autres valeurs de k .
    Une approche consisterait peut-être à passer dans l'ensemble des réels, en vertu de la formule Gamma(n+1) = n! . Avec un sous-programme permettant de calculer Gamma(x) en fonction de x , tu pourrais appliquer une méthode classique de résolution des équations non linéaires (dichotomie, Newton ou autre), puis tester si la solution est entière.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  14. #14
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour.
    Pour k = 7 :

    evalf(solve(product(n,n=1..n)-7));

    3.121082143

  15. #15
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Une approche consisterait peut-être à passer dans l'ensemble des réels, en vertu de la formule Gamma(n+1) = n! .
    Le problème est que Gamma n'est qu'une extrapolation de la factorielle parmi une infinité d'autres. Pourquoi choisir celle-ci ?
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  16. #16
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Le problème est que Gamma n'est qu'une extrapolation de la factorielle parmi une infinité d'autres. Pourquoi choisir celle-ci ?
    Tu as raison sur le fond, mais ce qui distingue la fonction Gamma des autres extrapolations, c'est que le sous-programme pour la calculer existe déjà.

    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  17. #17
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 50
    Points : 25
    Points
    25
    Par défaut
    bonjour,
    phryte, product est elle une fonction predefinie de maple?
    si c'est le cas est ce que tu crois que c'est encore faisable avec une procedure que je définie moi meme?
    Merci

    J'ai essayé ça pourtant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    facto := proc (n) return factorial(n) end proc

    C'est ce que j'ai eu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    evalf(solve(facto(n,n=1..n)-6));
     
    Warning, the protected names norm and trace have been redefined and unprotected
     
    RootOf(facto(_Z, _Z = 1 .. _Z) - 6)
     
    >evalf(%)
     
    RootOf(facto(_Z, _Z = 1 .. _Z) - 6)
    NB: fatoriel est l'interpretation de maple, j'ai utilisé l'diteur de maple pour ecrire n!

  18. #18
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour.
    product est elle une fonction predefinie de maple?
    Oui c'est une primitive.

  19. #19
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 129
    Points : 46
    Points
    46
    Par défaut
    Merci pour touttes vos reponses, mais mon probleme est beaucoup plus general
    que le pb de factoriel

  20. #20
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par fafoula Voir le message
    Merci pour touttes vos reponses, mais mon probleme est beaucoup plus general
    que le pb de factoriel
    Mais ta fonction a des propriétés ?

    Elle est contractante ? Elle ne l'est pas ? Elle est croissante, non croissante ? Elle a un point fixe ?
    Je ne répondrai à aucune question technique en privé

Discussions similaires

  1. Créer un site web - en quel langage ?
    Par Thierry92 dans le forum Débuter
    Réponses: 96
    Dernier message: 25/04/2024, 22h24
  2. Quel langage pour le développement embarqué ?
    Par freakydoz dans le forum Débats sur le développement - Le Best Of
    Réponses: 37
    Dernier message: 23/04/2007, 19h31
  3. Traitement d'images : quel langage?
    Par belasri dans le forum Langages de programmation
    Réponses: 19
    Dernier message: 07/10/2005, 09h59
  4. quel langage choisir pour faire de script sous windows
    Par pas05 dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 18/11/2002, 22h42
  5. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37

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