Bonjour à vous,

Je suis étudiant en L1, j'ai une matière nommée "Algorithmique" où je dois programmer une fonction qui calcule le Cosinus pour une certaine valeur de x donnée et un certain n donné (n est l'indice de développement en série au voisinage de 0).
La formule est la suivante :
Voici mon travail :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
function Cos (x: real; n:integer): real;
 
{ AE: n>=0, n entier, x reel}
 
var
  S: real;
  p: integer;
 
begin
 
  S:= 1;
  p:= 0;
 
  { IB: 0<=p<=n ET S=somme(((-1)^k)*((x^(2k))/((2k)!))) }
  { QC: p }
 
  { S=somme(((-1)^k)*((x^(2k))/((2k)!))) }
  if (x<>0) and (n<>0) then
  begin
    while p<n do
    { S=somme(((-1)^k)*((x^(2k))/((2k)!))) ET p<n ET x<>0 ET n<>0 }
    begin
      p:= p+1;
      { S=somme(((-1)^(k-1))*((x^(2(k-1)))/((2(k-1))!))) ET p<=n ET x<>0 ET n<>0 }
      S:= S + S * ((-1)*x*x) / ( (2*p) * ((2*p)-1) );
      { S=somme(((-1)^k)*((x^(2k))/((2k)!))) ET p<=n ET x<>0 ET n<>0 }
    end;
    { S=somme(((-1)^k)*((x^(2k))/((2k)!))) ET p=n }
 
    Cos:= S;
  end;
 
  { AS: S=somme(((-1)^k)*((x^(2k))/((2k)!))) }
  if (x=0) or (n=0) then Cos:= 1;
  { Si x=0, Cos(x)=Cos(0)=1 OU si n=0, S=1*1/1=1 }
 
end;
 
 
 
{-----------------------------------------------}
 
 
var
  x: real;
  n: integer;
 
begin
 
  writeln('Donnez un x : ');
  read(x);
  writeln('Donnez un n : ');
  read(n);
  writeln('Cos(', x:0:2, ')=', Cos(x,n):0:8);
 
end.
En le lançant, je dois obtenir les valeurs suivantes, en fonction du x et du n donné :



Mais quand je rentre par exemple, x=0.50 et n=2, je n'ai pas le bon résultat, le programme me sort le bon résultat seulement quand n=0 ou n=1.

Pourriez-vous m'aider s'il vous plait ?

Merci d'avoir pris le temps de lire mon sujet =)
Bonne soirée