Somme en pascal

Somme en pascal - Delphi/Pascal - Programmation

Marsh Posté le 24-04-2005 à 14:05:59    

Bonjour à tous,
 
Voila j'ai un autre problème,j'aimerais réaliser une somme en turbo pascal correspondant un peu à une série numérique.(du type 2+4+6+8... en choissant le nombre de termes)
 
J'ai alors écrit une petite procédure simple :
 
Procedure somme (a:integer);
 
for i:=1 to 7 do
begin
S:=2+2*i;
end;
 
Je pensais ainsi réaliser la somme successive suivante :
2+2+4+6+8+10+12+14
 
mais le résultat que me donne pascal est 16,c'est à dire qu'il ne réalise pas la boucle,il fait directement 2+2*7.
 
Comment réalise-t-on alors une somme en pascal avec une récurence telle que je l'ai présenté?
 
Merci beaucoup de votre aide.  :)

Reply

Marsh Posté le 24-04-2005 à 14:05:59   

Reply

Marsh Posté le 24-04-2005 à 14:37:36    

en utilisant la notion de récursivité ?


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 24-04-2005 à 14:41:33    

je te remercie de ta réponse JagStang mais je pense avoir trouver,il faut faire non pas : S:=2+2*i;  
mais S:=S+2*i;
pour que la somme S mise en mémoire soit recalculé avec celle du calcul précédent.
;)  

Reply

Marsh Posté le 24-04-2005 à 14:45:39    

c'est bien sur possible, mais l'idée de récurence n'est pas illustrée dans ce cas.


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 24-04-2005 à 22:03:34    

oui C'est vrai,
quelle est alors ton idée JagStang?

Reply

Marsh Posté le 24-04-2005 à 22:17:59    

bah je pense que l'idée de Jag stang c'est de faire qqch du style

Code :
  1. function sumprod2(rank:integer):integer;
  2. begin
  3.    if(rank=0) then result:=0
  4.    else result:=2*rank + sumprod2(rank-1);
  5. end;
  6. begin
  7.   b:=sumprod2(7);
  8. end.


 
Voilà avec la récursion
 
++
 
Dreameddeath

Reply

Marsh Posté le 26-04-2005 à 10:19:53    

Faut savoir quand même que lors de chaque appel de fonction, ya tout un tas d'opérations faites par le processeur pour construire le cadre de cette fonction : allocation de RAM pour les variables locales, sauvegarde des registres, empilage d'une adresse de retour pour que le programme sache où reprendre en sortant de la fonction, retour à la fonction appelante... Beaucoup d'opérations qui ne sont pas directement utiles au calcul, surtout pour un calcul aussi simple que celui présenté dans cet exemple. De plus, plus on récurse et plus on consomme de mémoire. Tant qu'on récurse pas beaucoup ça va, on a quand même des machines rapides avec plein de RAM.
 
Personnellement, pour des raisons d'optimisation en vitesse et en mémoire (de sécurité même : je risque pas de me retrouver à court de RAM), j'évite autant que possible la récursivité. Mais quand yen a besoin, j'hésite pas non plus.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed