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 :

Coefficients binomiaux


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Coefficients binomiaux
    Bonjour,

    Je dois calculer (en C) les coefficients binomiaux obligatoirement avec cette formule :

    Nom : Screen Shot 2016-03-12 at 17.26.42.png
Affichages : 8714
Taille : 27,7 Ko

    Ce que j'ai fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #include <stdio.h> 
     
    int main(){
     
    	int n, k;
    	int fact_k;
    	int fact_n;
     
    	printf("Tapez n et k pour calculer (n k)\n");
    	n = scanf("%d", &n);
    	k = scanf("%d", &k);
     
    	for(i = k; i < 1; i--)
    	{
    		fact_k = k * i ; 
    	}
    	for(j = n; j<1; j--)  
    	{
    		fact_n = n * j ; 
    	}
     
    	int combinaisons = fact_n / fact_k ; 
    	printf("(n k) = %d \n", combinaisons);
     
     	return 0;
    }
    Je vois pas trop comment faire en fait. Je pense que l'erreur vient de la seconde boucle for mais je vois pas comment la corriger (enfin comment coder le numérateur).

    Merci d'avance!

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Si vraiment tu ne trouves pas, voici une solution :
    https://ideone.com/rpnm58

    exemple : C(10, 5) = 252

    http://www.ohrt.com/odds/binomial.php

    ça semble marcher ... Il faut reporter les "ranges" de la formule, dans la boucle for : de k à 1, et de n à n - k + 1 pour le numérateur

  3. #3
    Membre émérite
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Bonjour,
    utilise les balise code pour poster un code, indente-le correctement si ce n'est pas fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include <stdio.h>
     
    int main()
    {
     
        int n, k;
        int fact_k;
        int fact_n;
     
        printf("Tapez n et k pour calculer (n k)\n");
        n = scanf("%d", &n);
        k = scanf("%d", &k);
     
        for(i = k; i < 1; i--) {
            fact_k = k * i ;
        }
        for(j = n; j<1; j--) {
            fact_n = n * j ;
        }
     
        int combinaisons = fact_n / fact_k ;
        printf("(n k) = %d \n", combinaisons);
     
        return 0;
    }
    i et j sont utilisés sans déclaration
    fact_k et fact_n ne sont pas initialisés
    ton algorithme calcule n!/k! et non binom(n,k) …

    En c, le prototype de main est int main(void) quand il est défini sans arguments.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par INHK_1 Voir le message
    Si vraiment tu ne trouves pas, voici une solution :
    https://ideone.com/rpnm58

    exemple : C(10, 5) = 252

    http://www.ohrt.com/odds/binomial.php

    ça semble marcher ... Il faut reporter les "ranges" de la formule, dans la boucle for : de k à 1, et de n à n - k + 1 pour le numérateur
    Merci ! Faut il absolument préciser dans les boucles du type for qu'il s'agit d'un entier (int) ?

    @picodev :

    " i et j sont utilisés sans déclaration
    fact_k et fact_n ne sont pas initialisés "

    Par là, tu veux dire que je met pas ce que i et j sont (ie des int) ? Pour les fact_k et fact_n je vois pas ce que tu veux dire. Je précise au début que ce sont des int et dans la boucle je leur associe - par exemple - k (récupéré de l'utilisateur) * i.

    Ah! Je connaissais pas cette notation: int main(void). C'est mieux ? Je vois pas non plus ce que ça change. Dans le livre que j'ai acheté ils ne mettent pas le void (et en cours la prof ne le fait pas non plus).

    Encore merci!

  5. #5
    Membre émérite
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Points : 2 601
    Points
    2 601
    Par défaut
    Citation Envoyé par georg_mf Voir le message
    " i et j sont utilisés sans déclaration
    fact_k et fact_n ne sont pas initialisés "

    Par là, tu veux dire que je met pas ce que i et j sont (ie des int) ? Pour les fact_k et fact_n je vois pas ce que tu veux dire. Je précise au début que ce sont des int et dans la boucle je leur associe - par exemple - k (récupéré de l'utilisateur) * i.
    Oui, il faut préciser le type des variables.
    Quand tu déclares une variable sans l'initialiser, elle va contenir une valeur aléatoire. Avant de l'utiliser il faut l'initialiser.

    Citation Envoyé par georg_mf Voir le message
    Ah! Je connaissais pas cette notation: int main(void). C'est mieux ? Je vois pas non plus ce que ça change. Dans le livre que j'ai acheté ils ne mettent pas le void (et en cours la prof ne le fait pas non plus).
    Mieux c'est un grand mot … disons que cela suit la norme. Le fait de mettre void en paramètre indique que la fonction ne prend aucun paramètre. De simples parenthèse ouvrante/fermante indique un nombre inconnu de paramètre. Une nuance qui n'a pas grande importance ici.

Discussions similaires

  1. Triple somme et coefficients binomiaux
    Par Binoga dans le forum Fortran
    Réponses: 6
    Dernier message: 19/07/2015, 14h52
  2. Fonction coefficient binomiaux
    Par mous44 dans le forum Général Python
    Réponses: 1
    Dernier message: 26/11/2010, 10h01
  3. [Doc] arbres/tas binomiaux
    Par loul91 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 20/01/2005, 23h09
  4. Déterminer les coefficients moyens d'une équation linéaire
    Par Oliveuh dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 11/01/2005, 23h23
  5. Recherche des coefficients d'une matrice 3x3
    Par colorid dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 25/11/2004, 16h52

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