Mon programme donne une valeur fausse

cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 - 13 août 2009 à 11:54
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 - 13 août 2009 à 15:25
bonjour
mon programme donne une valeur fausse
j'ai ecrit un programme qui demande à l' utilisateur de saisir deux entiers positifs non nuls p et n. p étant bien sûr inférieur à n. Puis le programme affiche la combinaison de p dans n.
voilà la formule
n!/p! * (n-p)!

package Mesessaies;
import java.util.Scanner;
public class exercice1
{
public static void main (String []args)
{
int p,n; int factorielp=1,factorieln=1,factorieln_p=1;
Scanner sc=new Scanner(System.in);
System.out.print("entrez un nb entier non nul p:");
p=sc.nextInt();
System.out.print("entrez un nb entier non nul supérieur à p:");
Scanner sc1=new Scanner(System.in);
n=sc.nextInt();
for(int i=1; i<=n; i++)
{
factorielp+=i;
}
for (int i=1; i<=n;i++)
{
factorieln+=i;
}
int n_p=n-p;
for (int i=1; i<=n_p; i++)
{
factorieln_p +=i;
}
int combinaison=(factorieln)/(factorielp)*(factorieln_p);
System.out.println( "valeur combinaison= "+combinaison) ;
}
}

resultat
entrez un nb entier non nul p:3
entrez un nb entier non nul n supérieur à p:9
valeur de combinaison =:22

après la forumule, valeur de combinaison doit être 18 mais le prg trouve 22
n/p*(n-p)
9/3*(9-3)
3*6=18

Où est ce que je fais erreur ? veuillez m?expliquez s'il vous plaît

6 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
13 août 2009 à 12:53
Salut,

Et bien déjà ton calcul de factorielle est incorrect : la factorielle se calcule par des multiplications et non des additions !
Et pourtant, tu avais déjà fait ce calcul comme il faut ici :
http://www.javafr.com/forum/sujet-QUELQU-PEUT-CORRIGER-MON-PG_1347014.aspx

C'est à ne rien y comprendre : tu demande de corriger ton programme (qui était correct) et là tu ne l'applique pas...


Ensuite, ton teste n'utilise absolument pas les factorielles :
n/p*(n-p)
9/3*(9-3)
3*6=18

Alors que d'après ta formule :
n!/p!*(n-p)!

Ce qui donne :
9!/3!*(9-3)! = 362880/6*6!=60480*720=43545600

On est très loin du 22 renvoyé par le programme, et encore plus loin de ton 18 !
______________________________________
DarK Sidious
0
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
13 août 2009 à 13:34
j'ecris ainsi:

package Mesessaies;
import java.util.Scanner;
public class exercice1
{
public static void main (String []args)
{
int p,n; int factorielp=1,factorieln=1,factorieln_p=1;
Scanner sc=new Scanner(System.in);
System.out.print("entrez un nb entier non nul p:");
p=sc.nextInt();
System.out.print("entrez un nb entier non nul n supérieur à p:");
Scanner sc1=new Scanner(System.in);
n=sc.nextInt();
for(int i=1; i<=n; i++)
{
factorielp=i*factorielp;
}
for (int i=1; i<=n;i++)
{
factorieln=i*factorieln;
}
int n_p=n-p;
for (int i=1; i<=n_p; i++)
{
factorieln_p += i;
}
resultat
entrez un nb entier non nul p:2
entrez un nb entier non nul n supérieur à p:6
valeur de combinaison =:11

valeur combinaison est 11 au lieu de 12
0
Kotomine Messages postés 112 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 5 novembre 2009
13 août 2009 à 13:46
Pourquoi utiliser des factorielles aussi ?
La factorielle, c'est une notion de matheu pour simplifier pas grand chose (Et ça complique en informatique).

Le nombre de combinaisons pour p elements parmis n, c'est
long result=1;

for(int i=0;i<p;i++){
result *= (n-p);
}
System.out.println("Il y a "+result+" possibilité(s)");

(je me rapelle plus du format string pour les entier long ...)

En effet, au premier élément, t'as tout (n) choix , au second, t'as (n-1), etc, et tu as p éléments.


; I'm just keeping the hopeless cross to increase the meaninglessness
0
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
13 août 2009 à 14:15
excuse moi, peux tu m'ecrire mon programme complet avec la correction
s'il te plaît
je suis dans les nuages,merci beaucoup
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_chalha Messages postés 7 Date d'inscription jeudi 30 juillet 2009 Statut Membre Dernière intervention 13 août 2009
13 août 2009 à 14:59
voici le prg ki calcule la combinason
import java.util.*;
public class Exo5 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n,p;
int facton=1,factop=1,factonp=1;
System.out.println("entrez la valeur n");
n=sc.nextInt();
System.out.println("entrez la veleur p qui doit etre < a n");
p=sc.nextInt();
while(p>n){
System.out.println("la valeur de p doit etre< a n");
p=sc.nextInt();
}
for (int i = 1; i <=n; i++) {
facton=facton*i; // c'est pour calculer le facto de n
}
for (int i = 1; i <=p; i++) {
factop=factop*i;// c'est pour calculer le facto de p
}
for (int i =1; i <=n-p; i++) {
factonp=factonp*i;// c'est pour calculer le facto de n-p
}
int c;
c=facton/(factop*factonp);// pour calculer la combinason
System.out.println("la resultat est :"+ c);
}

}

chalha
0
cs_domxaline Messages postés 327 Date d'inscription jeudi 21 août 2008 Statut Membre Dernière intervention 10 mai 2012 2
13 août 2009 à 15:25
merci beaucoup,t'es sympas
0
Rejoignez-nous