Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Langage C

Posté par
foq
20-10-22 à 19:34

Bonsoir Monsieur Madame

J ' aimerai votre aide si vous plait . Je sais que sais d'une île de maths et de programmation  . Ces pour cela que je voudrai votre aide si vous plait .

Écrire la fonction binomial qui prend en entrée un entier n et un entier p et retourne le nombre de tirages différents, non ordonnés et sans remise, de p éléments parmi n, c'est à dire le coefficient binomial :  \begin{pmatrix}n \\ p \end{pmatrix}= C_{n} ^{p} = \frac{n!}{p!(n-p)!}

J'ai fait ça met il y a un problème et je ne sais pas c'est quoi le problème :

/* Programme*/
#include <stdio.h>
#include <stdlib.h>
int binominal( int n , int p );
int factorielle(int entier);


int factorielle(int entier){
	int fact=1;
	int i;
	if (entier<0)
		printf("Cet entier n'est pas positif.\n");
	
	else
	{
		for(i=1 ; i<=entier ; i++ )
			fact *=i;
		printf(" Le Factorielle de %d est %d \n" , entier , fact); 
	}
	return 0;

}
int binominal(int n , int p){
	printf("Entrer n et p pour calculer le coefficient binominale c'est à dire n|p");
	scanf("%d",&n);
	scanf("%d",&p);
	if(p>=n)
		printf( "Entrer un nombre tel que p soit inférieur ou égale à n \n" );
	else {
		return (factorielle(n)) / (factorielle(p) * factorielle(n-p));
	}
	return 0;
}
  

Merci de votre aide !

* modération> forum modifié *

Posté par
alma78
re : Langage C 20-10-22 à 20:03

Bonjour,
Dans la fonction factorielle, pourquoi y a t'il return 0 ?
même problème dans la fonction binomial.

Posté par
foq
re : Langage C 20-10-22 à 20:07

Le return 0 c'est pour dire que le programme fonctionne . Je suis débutant .

Posté par
foq
re : Langage C 20-10-22 à 20:11

Le code erreur de la compilation de gcc pour moi c'est :

/usr/bin/ld : /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o : dans la fonction « _start » :
(.text+0x1b) : référence indéfinie vers « main »
collect2: error: ld returned 1 exit status

Posté par
alma78
re : Langage C 20-10-22 à 20:24

Désolé je passe la main.

Posté par
alma78
re : Langage C 20-10-22 à 20:32

Peut-être voir ici :
https://codes-sources.commentcamarche.net/source/9507-denombrements

Posté par
foq
re : Langage C 20-10-22 à 20:35

D'accord , merci de votre aide !

Posté par
alma78
re : Langage C 20-10-22 à 20:40

Je t'en prie.

Posté par
flight
re : Langage C 21-10-22 à 20:53

salut ..une idée en passant

on peut ecrire une fonction en trois ligne ou 4 lignes  sans passer par le calcul de factorielles  

function binomiale ( n as long , p as long ) as long
  If p = 0 Then
binomiale  = 1
    ElseIf p > n Then
      binomiale = 0
        Else
        binomiale = binomiale(n - 1, p) +binomiale(n - 1, p - 1)
End If
End Function  

ecris en vba  pour te donner une idée    

Posté par
Rintaro
re : Langage C 22-10-22 à 15:08

Bonjour

le code erreur indique clairement que tu n'as pas défini le main, c'est-à-dire le corps du programme. Ici, tu as simplement défini les fonctions dans un fichier et c'est tout. Si tu débutes, tu as beaucoup de tutos en ligne et je ne saurais t'en conseiller un en particulier. Par ailleurs, c'est un peu le bazar ton code là...

Tu définis une fonction binomial qui prend deux entiers n et p pour ensuite faire du scanf pour récupérer des valeurs. On peut bidouiller pour que ça marche, mais autant faire les choses correctement dès le début. En oubliant ces histoires de scanf (en les effaçant du code gros), pour que ton code compile, tu dois rajouter à la fin de ton programme

int main ( int argc , char * argv[] ) {

int n;
int p;
int res;

n = 10 ; % à titre d'exemple
p = 3 ; % à titre d'exemple
res = binomial(n, p) ;

printf("Le coefficient binomial '%d' parmi '%d' est égal à '%d'. \n", p, n, res) ;

return 0 ;
}


quelque chose comme ça (je n'ai pas fait de C depuis 3 ans). A toi d'adapter le code ensuite.

Bonne journée

Posté par
foq
re : Langage C 22-10-22 à 18:44

Merci de d'avoir répondu .

Après plusieurs heure j'ai trouvé grâce a vous avec main et openclasseroums  dans leur forum .

Merci beaucoup !



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !