A voir également:
- Puissance en pascal
- Test puissance pc - Guide
- Turbo pascal download - Télécharger - Édition & Programmation
- My pascal - Télécharger - Édition & Programmation
- Puissance wifi - Guide
- Puissance en c - Forum Programmation
5 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
25 févr. 2009 à 22:45
25 févr. 2009 à 22:45
D'un point de vue théorique, effectivement on a :
exp(x)=limite(quand n tend vers l'infini) somme(pour k allant de 0 à n) x^k/k!
Dans ce cas on pourra donc prendre x réel et pas seulement entier positif !
Pour le calcul de fact je suis d'accord sauf que :
_ il y a un do en trop dans l'écriture de ta boucle
_ tu le calcule qu'une seule fois alors qu'il te faut faire le calcul n fois avec n valeurs différentes !
Par contre ce n'est pas le but ici d'utiliser la formule avec exp et ln pour calculer x^k, parce que c'est trop lourd, d'autant que comme précédemment tu vas devoir faire n fois le calcul (d'abord avec 1, puis x, puis x²...)
En fait ce que tu calcules ici (ou ce que t'essayes de calculer) c'est x^n/n! et ce n'est pas ce que tu veux...
Prends trois accumulateurs factorielle, puissance et somme, initialisés pour k=0
Puis fait une boucle pour k allant de 1 à n, à chaque tour de boucle tu met à jour k!, x^k, et ta somme
Et à la fin le résultat obtenu sera la somme !
exp(x)=limite(quand n tend vers l'infini) somme(pour k allant de 0 à n) x^k/k!
Dans ce cas on pourra donc prendre x réel et pas seulement entier positif !
Pour le calcul de fact je suis d'accord sauf que :
_ il y a un do en trop dans l'écriture de ta boucle
_ tu le calcule qu'une seule fois alors qu'il te faut faire le calcul n fois avec n valeurs différentes !
Par contre ce n'est pas le but ici d'utiliser la formule avec exp et ln pour calculer x^k, parce que c'est trop lourd, d'autant que comme précédemment tu vas devoir faire n fois le calcul (d'abord avec 1, puis x, puis x²...)
En fait ce que tu calcules ici (ou ce que t'essayes de calculer) c'est x^n/n! et ce n'est pas ce que tu veux...
Prends trois accumulateurs factorielle, puissance et somme, initialisés pour k=0
Puis fait une boucle pour k allant de 1 à n, à chaque tour de boucle tu met à jour k!, x^k, et ta somme
Et à la fin le résultat obtenu sera la somme !
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
28 févr. 2009 à 12:33
28 févr. 2009 à 12:33
Quand on dérive une somme il faut faire la somme des dérivées c'est à dire que tous tes indices vont s'en retrouver modifier : sigma(x^k,k=a..b)'=sigma((k+1)*x^k,k=a..b-1)
Effectivement pour x=2 et n=2 tu vas avoir 1/1 + 2/1 + 4/2 = 5
Et ensuite, 1/1 + 2/1 + 4/2 + 8/6 + 16/24 + 32/120 ... = exp(2) ~ 7.389
En ce qui concerne ta somme des puissances et de tes factorielles tu auras une boucle
for k:=1 to n do
begin
factorielle:=factorielle*k;
puissance:=puissance*x;
somme:=somme+puissance/factorielle;
end;
Il faut juste que tu initialises correctement tes accumulateurs (quand n=0)
Effectivement pour x=2 et n=2 tu vas avoir 1/1 + 2/1 + 4/2 = 5
Et ensuite, 1/1 + 2/1 + 4/2 + 8/6 + 16/24 + 32/120 ... = exp(2) ~ 7.389
En ce qui concerne ta somme des puissances et de tes factorielles tu auras une boucle
for k:=1 to n do
begin
factorielle:=factorielle*k;
puissance:=puissance*x;
somme:=somme+puissance/factorielle;
end;
Il faut juste que tu initialises correctement tes accumulateurs (quand n=0)
Je vous remercie.
initialisation pour n=0 ( je place avant la boucle for ) : factorielle:=1; puissance:=1; somme:=1;
Pour n=0, j'ai fait différent calcul avec le programme, et je trouvais toujours 1.
Ce qui me semble correcte, puisque si nous prenons x=3 et n=0, on a 3^0/0! = 1
Grâce à vous j'ai compris mes erreurs et mes lignes inutiles sur turbo.
D'ailleurs factorielle:=1/factorielle*k;
puissance:=puissance*x;
somme:=somme=factorielle*puissance;
devrait marcher aussi, je vais l'essayer !
initialisation pour n=0 ( je place avant la boucle for ) : factorielle:=1; puissance:=1; somme:=1;
Pour n=0, j'ai fait différent calcul avec le programme, et je trouvais toujours 1.
Ce qui me semble correcte, puisque si nous prenons x=3 et n=0, on a 3^0/0! = 1
Grâce à vous j'ai compris mes erreurs et mes lignes inutiles sur turbo.
D'ailleurs factorielle:=1/factorielle*k;
puissance:=puissance*x;
somme:=somme=factorielle*puissance;
devrait marcher aussi, je vais l'essayer !
En fait, ça ne marche pas.
D'une part factorielle passe en real. Et le résultat n'est pas le même quand l'on fait cette somme pour n=2 et x=2.
Je pense qu'il ne faut pas faire le plus compliqué, somme:=somme+puissance/factorielle convient très bien.
Encore merci.
D'une part factorielle passe en real. Et le résultat n'est pas le même quand l'on fait cette somme pour n=2 et x=2.
Je pense qu'il ne faut pas faire le plus compliqué, somme:=somme+puissance/factorielle convient très bien.
Encore merci.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En fin de compte ça marche ! J'avais oublié les parenthèses à factorielle:=1/(factorielle*k);
Mais ce qui est intéressant de comprendre c'est que si on met puissance et factorielle en real ou integer, ca ne change rien. et dans le cas d'une fraction, on le met obligatoirement en real.
Désolé de l'innondation.
Mais ce qui est intéressant de comprendre c'est que si on met puissance et factorielle en real ou integer, ca ne change rien. et dans le cas d'une fraction, on le met obligatoirement en real.
Désolé de l'innondation.
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
2 mars 2009 à 10:31
2 mars 2009 à 10:31
Tu ne peut pas faire factorielle:=1/(factorielle*k) sinon tu auras :
0!=1, 1!=1/(1*1)=1, 2!=1/(1*2)=1/2 !!! Or 2!=2, c'est pour ça qu'il faut faire factorielle:=factorielle*k et seulement après (dans somme) diviser par la factorielle
Normalement tu dois mettre x, puissance, et somme dans le meme type, par contre la factorielle est toujours entière donc il faut la mettre en integer (sinon on a des approximations) sauf pour les très grandes valeurs de n
0!=1, 1!=1/(1*1)=1, 2!=1/(1*2)=1/2 !!! Or 2!=2, c'est pour ça qu'il faut faire factorielle:=factorielle*k et seulement après (dans somme) diviser par la factorielle
Normalement tu dois mettre x, puissance, et somme dans le meme type, par contre la factorielle est toujours entière donc il faut la mettre en integer (sinon on a des approximations) sauf pour les très grandes valeurs de n
28 févr. 2009 à 12:03
Un do en trop, en effet erreur de frappe.
Déja , pour x = 2 et n = 2, est ce que le résultat de cette somme sigma fait 5 ?
Ensuite mon grand problème est de faire la somme des puissances et des factiorielles
Je suis d'accord pour factorielle c'est
e:=1; f:=1; g:=1;
for k:=1 to n do f:=f*k;
e:=e+f;
g:=g*x;
mais pour la somme?? je crois avoir oublié aussi un élément pour x^k
ah oui question de plus, quand on doit dériver par les x somme sigma de x^k/k!, la somme nous dérange pas, on dérive normalement ? Merci à vou.
24 nov. 2011 à 18:57
program factoriel ;
Uses Crt ;
var
d,n : integer ;
function fact( n:integer):integer ;
var c,i : integer ;
begin
c := 1 ;
If n = 0 Then
c:=1;
If n > 0 Then
For i := 1 To n do
c := c * i;
Fact := c ;
end;
BEGIN
Clrscr;
write (' Entrez nombre de Factoriel : ') ;
Read (n);
d := fact(n);
Write ('Fact(',n,')=', d );
ReadKey;
END.
28 déc. 2014 à 17:07
PROGRAM calcul_fact;
USES WINCRT;
VAR n,k:integer; fact:longint;
BEGIN
Write('entre un nombre: ');
Readln(n);
fact:=1
For k:=2 to n do fact:=fact*k;
Writeln('le factoriele de ,'n',' est : ', fact)
END.
Essayez Ça... ;) ;) ;) ;)