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

 C++ Discussion :

calcul de puissances


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 10
    Points : 9
    Points
    9
    Par défaut calcul de puissances
    Bonjour,

    Comment peut on écrire en c++ ce petit exercice svp ?
    Merci

    Voici l'exercice:
    Si n impair
    S= 1 !/x²+3!/x puissance 3 + ….. + n !/x puissance n
    Si n pair
    S=2 !/x²+4 !/x puissance4+……n !/x puissance n

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Tu n'as sans doute qu'une information manquante: comment savoir si un nombre est pair ou impair. Et, cela, c'est simple: tu regarde s'il est divisible par 2. Et comment tu peux le savoir grâce à ce que l'on appelle le modulo, qui calcule le reste de la division entre deux nombres. En C et en C++, modulo est représenté par le symbole %. si bien que si tu fais un test proche de if(nombre%2 == 0), tu sauras si ton nombre est pair ou impair

    Le reste, c'est à toi de voir comment faire le calcul qui va bien
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    la puissance, c'est facile.
    x puissance n, c'est 1 * x * x * ... avec n multiplication par x.

    Par contre, la factorielle, ca va être plus comique.
    Notamment, parce que par exemple, 20!, c'est 2 432 902 008 176 640 000 soit un peu plus que 2,4 milliards de milliards (ou 2,4 * 10^18)
    C'est aussi a peu pres 2,4 * 2^60. Soit au moins 60 bits. Ca doit rentrer dans un long long (64 bits).
    J'imagine qu'avec 23! on dépasse la représentation possible des entiers sur des ordinateurs (sans passer par des astuces monstrueusement lentes et hors de portée d'un tel exercice)
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Faire le calcul exact, effectivement, ça va vite bloquer. Maintenant, faire le calcul avec des doubles (voire des long double) donnera une valeur approchée pas forcément trop mauvaise. Bonne jusqu'à quel point, c'est une autre question, je ne sais pas trop, et ça dépend probablement très fortement de x. Pour des x positifs, ça devrait plutôt pas trop mal se passer par exemple.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Cela dit, n! / x^n, c'est le produit successif des i/x, pour i entre 1 et n.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 34
    Points : 46
    Points
    46
    Par défaut
    Bonsoir,
    juste un conseil pour créer une fonction permettant de calculer une factorielle: je pense que tu devrais t'orienter vers une fonction récursive, pour faire simple, une fonction qui dans son code 'interne' s'appelle elle-même.
    Cela devrait peut être te donner un axe de recherche.

    Cordialement.

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Surtout pas, malheureux!!!!

    Il n'est absolument pas plus compliqué de créer une boucle qui puisse calculer la factorielle que de le faire de manière récursive. Et c'est ce que je reproche généralement à cet exemple.

    Or, si tu peux t'en sortir avec une logique "assez simple" pour se contenter d'utiliser une boucle, tu n'as absolument aucun intérêt à envisager la récursivité, qui vient avec son lot de problème (dont, entres autres, un risque accru de dépassement de la capacité de la pile d'appels en C++).

    Si tu te retrouves dans une situation dans laquelle il est plus difficile d'exprimer une logique au travers une boucle qu'au travers d'une fonction récursive (par exemple : la résolution des tours de Hanoï), alors, tu as tout intérêt à envisager la récursivité. Mais s'il est au moins aussi facile d'exprimer la logique au travers d'une boucle, tu as toujours intérêt à choisir la boucle "par défaut".

    Le calcul d'une factorielle est, justement, ce genre de cas où il n'y a strictement aucune difficulté à exprimer la logique au travers d'une boucle. Donc, il est largement préférable d'utiliser une boucle
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 34
    Points : 46
    Points
    46
    Par défaut
    Mea culpa dans ce cas !


    Il est vrai que la solution apparente la plus simple n'est pas toujours la moins compliquée

    Par contre pour le calcul de la factorielle avec une boucle: vous le feriez comme ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      int factorielle= 100; //on prend 100 comme 'exemple'
     
      int calcul_factorielle(int factorielle){
         int result=1;
         for(int i=factorielle; i>0; i--){
         result *=i;
         }
         return result;
      }

  9. #9
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    J'aoute mon grain de sel. Depuis C++11, std::tgamma a été ajouté à la bibliothèque standart.

    Une implémentation de factorielle peut donc être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <cmath>
    long double factorial(long double n)
    {
        return std::tgamma(n+1);
    }
    -- Yankel Scialom

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/09/2010, 09h13
  2. [PHP-JS] Débutant demande aide liste php
    Par bcbgtn dans le forum Langage
    Réponses: 1
    Dernier message: 14/06/2007, 11h24
  3. débutante demande aide
    Par youna dans le forum Langage
    Réponses: 1
    Dernier message: 04/10/2005, 11h30

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