Mon programme donne une valeur fausse
Résolu
domxaline
-
domxaline -
domxaline -
Bonjour,
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
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
A voir également:
- Mon programme donne une valeur fausse
- Fausse alerte mcafee - Accueil - Piratage
- Fausse alerte connexion facebook - Guide
- Programme demarrage windows - Guide
- Message programmé iphone - Guide
- Mettre en veille un programme - Guide
12 réponses
De souvenir, n! = n * (n-1) * (n-2) *... * 1
On dirait que tu fais la somme
for (int i=1; i<=n_p; i++)
{
factorieln_p +=i;
}
De plus, dans ton test, tu oublies le factoriel:
n/p*(n-p)
9/3*(9-3)
3*6=18
On dirait que tu fais la somme
for (int i=1; i<=n_p; i++)
{
factorieln_p +=i;
}
De plus, dans ton test, tu oublies le factoriel:
n/p*(n-p)
9/3*(9-3)
3*6=18
je vois pas l'utilisation de la factorielle dans ton calcul humain, c'est normal ?
petit rappel factionel de n = 1*2*3*...*n
petit rappel factionel de n = 1*2*3*...*n
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
la correction semble correct, il faut en effet multiplier.
Il serait mieux de faire une fonction factorielle plutôt que de faire trois boucles.
Ton programme gagnerai en souplesse et en lisibilité.
à ta place, je ferai attention au cas où tu as 0 comme valeur, et 0!=1.
Et aussi, la formule c'est :
n!/(p!*(n-p)!) si tu oublie les parenthèse, c'est différent.
Il serait mieux de faire une fonction factorielle plutôt que de faire trois boucles.
Ton programme gagnerai en souplesse et en lisibilité.
à ta place, je ferai attention au cas où tu as 0 comme valeur, et 0!=1.
Et aussi, la formule c'est :
n!/(p!*(n-p)!) si tu oublie les parenthèse, c'est différent.
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
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
tu as laissé += à la place de *= au calcul du dernier factoriel.
Tu aurai fait comme je t'ai dit : une fonction, tu n'aurai pas eu ce problème, tu aurais modifier une seule fois la fonction et tu aurais eu tes trois termes calculer correctement.
La règle en informatique, c'est de faire un code de manière à ce que lorsque tu changes quelque chose dans ton code, tu es le moins de modification à faire.
Le plus propre serait de faire une fonction factorielle et une fonction combinatoire, ça te permet beaucoup plus de souplesse et d'évolution par la suite.
Tu aurai fait comme je t'ai dit : une fonction, tu n'aurai pas eu ce problème, tu aurais modifier une seule fois la fonction et tu aurais eu tes trois termes calculer correctement.
La règle en informatique, c'est de faire un code de manière à ce que lorsque tu changes quelque chose dans ton code, tu es le moins de modification à faire.
Le plus propre serait de faire une fonction factorielle et une fonction combinatoire, ça te permet beaucoup plus de souplesse et d'évolution par la suite.
excuse moi, peux tu m'ecrire mon programme complet avec la correction
s'il te plaît
je suis dans les nuages,merci beaucoup
s'il te plaît
je suis dans les nuages,merci beaucoup
peux tu corriger simplement cette partie
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;
}
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;
}