home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 17 / CD_ASCQ_17_101194.iso / dos / prg / alb_c10 / chap_05 / ch05_12.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-08  |  2.3 KB  |  60 lines

  1. /*********************************************************************
  2. *  CH05_12.C                                    Calcul de C(n,m)     *
  3. *                                                                    *
  4. *     nombre de combinaisons de n objets m α m                       *
  5. * ou: nombre de groupes de m objets diffΘrents qu'on peut            *
  6. *     former avec n objets sans tenir compte de l'ordre              *
  7. *     et sans rΘpΘtitions.                                           *
  8. *                                                                    *
  9. ** Written by Thad Smith III, Boulder County, CO. ********************
  10. *  Released to the Public Domain  10/14/91.   ( mois/jour/an)        *
  11. *                                                                    *
  12. * La prΘsentation est simplifiΘe pour tenir compte de notre niveau   *
  13. * actuel de connaεssance.                                            *
  14. *                                                                    *
  15. * On suppose que n >= 0, 0 <= m <= n.                                *
  16. * Calculer un nombre de combinaisons pour des valeurs ΘlevΘes de n   *
  17. * peut entrainer une sortie du domaine de dΘfinition.                *        
  18. * La premiΦre version n'entraεnera pas de sortie si:                 *
  19. * C(n, m) * (n- m+ 1) < ULONG_MAX = 4 294 967 295                    *
  20. * La seconde version n'entraεnera pas de sortie si C(n,m)< ULONG_MAX *
  21. * mais elle est plus complexe.                                       *
  22. *********************************************************************/
  23.  
  24. #include<stdio.h>
  25.  
  26. main( void)     
  27. {
  28.       unsigned long cnm = 1UL;
  29.       int i, f, n, m;
  30.  
  31.       printf(" Entrez la valeur de n: ");
  32.       scanf("%d", &n);
  33.       while( getchar() != '\n');
  34.  
  35.       printf(" Entrez la valeur de m: ");
  36.       scanf("%d", &m);
  37.       while( getchar() != '\n');
  38.  
  39.  
  40.       /*   premiΦre version de Thad Smith.                         */
  41. /*
  42.       if (m * 2 > n)  m = n- m;
  43.       for (i= 1 ; i <= m; n--, i++)
  44.         cnm = cnm * n / i;
  45. */
  46.  
  47.       /* seconde version de Thad Smith.                            */
  48.  
  49.       if ( m* 2 > n) m= n- m;
  50.       for (i= 1 ; i <= m; n--, i++)
  51.        {
  52.             if ((f= n) % i == 0)
  53.                   f   /= i;
  54.             else  cnm /= i;
  55.             cnm *= f;
  56.        }
  57.       printf(" C( %d, %d)= %lu", n, m, cnm);
  58. }
  59.  
  60.