IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Turbo Pascal Discussion :

Fonction Cosinus avec les sommes partielles [Turbo Pascal]


Sujet :

Turbo Pascal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Fonction Cosinus avec les sommes partielles
    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

  2. #2
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    je te propose d'organiser ton code comme ceci,
    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
     
    unit MathUnit;
    /**
     *@Author darrylsite
     */
    interface
     function cosinus(x : real; n : byte) : real;
     function factorial(n : byte ) : longint;
     
    implementation
     
     function factorial(n : byte) : longint;
     begin
      //calcul de la fonction factorielle
     end; 
     
     function power(x : real; n : byte) : real;
     begin
      //calcul de la fonction puissance
     end;
     
     function tailorTerm(x : real; k : byte) : real;
      var tmp : real;
     begin
      tmp := power(-1, k)*power(x, 2*k)/(factorial(2*k));
      tailorTerm := tmp;
     end;
     
     function cosinus(x : real; n : byte) : real;
      vat tmp : real;
     begin
      tmp :=0;
      for i:=0 to n do
       tmp := tmp + tailorTerm(x, i);
      cosinus := tmp; 
     end;
     
    end.
    Les formules mathématiques contiennent la plupart du temps l'algorithme à implémenter. Donc pas besoin de compliquer les choses si l'on ne cherche pas à optimiser le code, ni gérer les problème de mémoire que ça peut occasionner.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Je te remercie de ta réponse =) mais j'ai trouvé une solution entre temps (j'ai ajouter une variable) :
    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
     
    function Cos (x: real; n:integer): real;
     
    { AE: n>=0, n entier, x reel}
     
    var
      S, Terme: real; { Terme : Terme dans la somme }
      p: integer;
     
    begin
     
      S:= 1;
      p:= 0;
      Terme:= 1;
     
      { 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 }
          Terme:= Terme * (((-1)*x*x) / ( (2*p) * ((2*p)-1) ));
          S:= S + Terme;
          { 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
     
      write('x=');
      read(x);
      write('n=');
      read(n);
      write('Cos(', x:0:2, ')=', Cos(x,n):0:8);
     
    end.
    Merci quand même ;-).
    Euh... Par contre j'aurais une question à te poser, je ne suis que débutant en Pascal, que signifie "byte" ?
    function factorial(n : byte) : longint;

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Etes vous sur que votre code bonne des résultats corrects?

    Byte est un type entier entre 0 et 255. Il est représenté en 8 bit. Je l'ai utilisé pour utilisé moins de mémoire à l'instar de integer qui est représenté en 16/32 bits selon les systèmes tout en sachant que la fonction factoriel conduit vite à un débordement de mémoire pour des valeurs élever de n.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Byte est un type entier entre 0 et 255. Il est représenté en 8 bit. Je l'ai utilisé pour utilisé moins de mémoire à l'instar de integer qui est représenté en 16/32 bits selon les systèmes tout en sachant que la fonction factoriel conduit vite à un débordement de mémoire pour des valeurs élever de n.
    Oki

    Etes vous sur que votre code bonne des résultats corrects?
    Oui, j'ai testé pour un peu plus de 10 valeurs et tout était nickel =)

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/02/2013, 15h17
  2. [XL-2003] Fonction Si avec les valeurs des cellules
    Par magyaddello dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/08/2010, 13h48
  3. Problème avec les Sommes
    Par jkamelin dans le forum Formules
    Réponses: 2
    Dernier message: 09/07/2009, 10h46
  4. Fonction print avec les propriétés d'impression
    Par Alexandrebox dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/08/2006, 12h30
  5. Réponses: 2
    Dernier message: 21/12/2005, 09h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo