cs_domxaline
Messages postés327Date d'inscriptionjeudi 21 août 2008StatutMembreDernière intervention10 mai 2012
-
13 août 2009 à 11:54
cs_domxaline
Messages postés327Date d'inscriptionjeudi 21 août 2008StatutMembreDernière intervention10 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
cs_domxaline
Messages postés327Date d'inscriptionjeudi 21 août 2008StatutMembreDernière intervention10 mai 20122 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
Kotomine
Messages postés112Date d'inscriptionlundi 29 juin 2009StatutMembreDerniè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
cs_chalha
Messages postés7Date d'inscriptionjeudi 30 juillet 2009StatutMembreDernière intervention13 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);
}