Je débute en Pacal et je cherche à réaliser un programme déterminant la factorielle d'un nombre n entré par l'utilisateur. Voici ce que ça donne pour l'instant:
program fact;
var
x,n : integer;
begin
writeln('Entrez le nombre dont vous souhaitez que le programme calcule la factorielle');
readln(n);
if (n=0) or (n<0)
then writeln('Le nombre choisi doit être strictement positif')
else if n>0
then x:=n*(n-1)*(n-2)*..*1;
writeln(',n,! = ,x,');
readln;
end.
Comme vous le voyez le problème se situe au niveau de l'attribution à x de la valeur de la factorielle de n. Je ne sais pas comment exprimer cette valeur.
Il me semble que le reste est correct, ou pas totalement faux
Merci d'avance!
PS: la factorielle d'un entier autre que strictement positif n'existe pas? J'ai vu ça sur Wikipedia, enfin si ça existe mon if then n'a pas lieu d'être.
Comme vous le voyez le problème se situe au niveau de l'attribution à x de la valeur de la factorielle de n. Je ne sais pas comment exprimer cette valeur.
Si je peux me permettre un conseil, essaye de comprendre les deux méthodes et de faire ta fonction des deux manières. N'hésite pas à poser des questions.
Citation
Il me semble que le reste est correct, ou pas totalement faux
moui
Citation
Merci d'avance!
De rien !
Citation
PS: la factorielle d'un entier autre que strictement positif n'existe pas? J'ai vu ça sur Wikipedia, enfin si ça existe mon if then n'a pas lieu d'être.
Si wikipedia le dit, il y a quelques chances que ça ne soit pas complètement faux.
Edit : Je me permet un deuxième conseil, ne mélange pas ta fonction qui permet de faire le calcul de la factorielle et la récupération de la valeur à calculer. Fais plutôt une fonction qui prend en argument une variable entière et qui retourne sa factorielle. Ca permettra une réutilisabilité de ton code (ce qui est un peu le principe d'une fonction) et lui offrira une plus grande clarté.
Ca ne sert à rien de mélanger deux actions complètement différentes, chaque fonction doit avoir un et un seul rôle.
Edit : Je me permet un deuxième conseil, ne mélange pas ta fonction qui permet de faire le calcul de la factorielle et la récupération de la valeur à calculer. Fais plutôt une fonction qui prend en argument une variable entière et qui retourne sa factorielle. Ca permettra une réutilisabilité de ton code (ce qui est un peu le principe d'une fonction) et lui offrira une plus grande clarté.
Ca ne sert à rien de mélanger deux actions complètement différentes, chaque fonction doit avoir un et un seul rôle.
Je comprends pas ce que tu veux dire sur ce qui est marqué en gras.
0! = 1
La factorielle d'un nombre négatif n'a pas de sens, de même que la factorielle d'un nombre non entier.
Cependant Euler a exprimé une fonction qui s'applique à n'importe quel nombre (dite la fonction gamma) et qui a la particularité d'être égale à la fonction factorielle pour les entiers. C'est donc en fait un peu comme une extension de la factorielle à l'ensemble des nombres réels.
Mais bon c'était juste pour ta culture, autant 0! ça peut te servir dans ta récursivité, autant la fonction gamma tu n'en entendras probablement pas parler avant un peu de temps.
Finalement j'ai réussi à obtenir quelque chose qui fonctionne, voici:
program fact;
var
n, fact_n, x : integer;
begin
writeln('Entrez l''entier strictement positif dont vous souhaitez calculer la factorielle');
readln(n);
if (n=0) or (n<0)
then write('Le nombre entré doit être strictement positif!')
else if n>0
then for x:=1 to (n-1) do
fact_n:=(n*x);
writeln(n,'!=',fact_n);
readln;
end.
Si tu as compris le code, et donc son raisonnement, tu es en mesure de déterminer si le code est correct.
Tu peux aussi, mais cela ne donnera qu'une indication, pas une preuve, tester le code sur quelques nombres ; il n'est pas bien compliqué de calculer à la main la factorielle de 1, de 2, de 3, de 4, de 5, de 6... Mais même si cela fonctionne sur les 6 premiers nombres, cela ne signifie pas forcément que cela fonctionnera pour 42 par exemple. C'est pour cela qu'il faut comprendre le raisonnement du code, afin de voir s'il correspond à la définition mathématique de la factorielle.
Je n'aiderais plus personne ici. Débrouillez-vous.
Écrire un programme qui détermine si une entier N est parfait ou non. Un entier est dit parfait s'il est égal à la somme de ses diviseurs. Exemple 6 = 3 + 2 +1.
TAF : Veuillez remplir toutes les trous avec les valeurs qui conviennent.
NB :
Toutes les réponses ne doivent pas avoir des espaces et elles doivent être en minuscule.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Mon portfolio photo : https://www.instagram.com/charlievanaret_photo/