FORUMLE DU BINÔME

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 28 mars 2010 à 13:58
munstef676 Messages postés 5 Date d'inscription dimanche 1 juin 2014 Statut Membre Dernière intervention 14 avril 2024 - 1 juin 2014 à 02:34
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51515-forumle-du-binome

munstef676 Messages postés 5 Date d'inscription dimanche 1 juin 2014 Statut Membre Dernière intervention 14 avril 2024
Modifié par jordane45 le 1/06/2014 à 02:45
un algorithme du calcul du binomial plus efficace et rapide :
C++ :
   template<typename T> T binomial(T& n, T& p) {
        if ((n < 0) || (p < 0) || (p > n)) return 0;
        T imax = (p > n / 2) ?  n - p : n;
        T n1 = n + 1;
        T result = 1;
        for(T i=1; i <= imax; ++i) result *= (n1 - i) / i;
        return result;
    }

C : pour les entiers :
unsigned binomial(unsigned n, unsigned p) {
     if (p > n) return 0;
     unsigned imax = (p > n / 2) ? n - p : n;
     unsigned n1 = n + 1;
     unsigned result = 1;
     for (unsigned i = 1; i <= imax; ++i) result *= (n1 - i) / i;
     return result;
}

ce code est facilement modifiable si l'on veut utiliser avec d'autre type entier, et renvoyer la valeur en un autre entier ou flottant

Message édité : Ajout des balises de code.
Tearsofdestiny Messages postés 2 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 11 novembre 2009
29 mars 2010 à 09:35
Bonjour,

Merci de faire cette remarque que je vais naturellement prendre en compte. Je dois avouer que j'y ai pensé, mais j'ai ensuite oublié.

Encore merci

P.S: n'hésitez pas a critiquer aussi :-)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
Modifié par jordane45 le 1/06/2014 à 02:46
Seulement protos et déclarations dans les *.h, jamais de code.
long int fact(long int a)
{
  long int res = 1, i;
  for(i = 0; i <= a; i++) {
    if(i != 0 && i != 1) res = res * i;
    else res = res;
  }
  return res;
}

res = res; // SUPER UTILE !!!

Puisque tu ne veux rien avant la valeur 2:
long int fact(long int a)
{
  long int res = 1;
  while(a >= 2) res *= a--;
  return res;
}


Message édité : Ajout des balises de code.
Rejoignez-nous