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 :

Factorielle : runtime error 200 [TPW]


Sujet :

Turbo Pascal

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 31
    Points : 14
    Points
    14
    Par défaut Factorielle : runtime error 200
    Bonsoir,
    Pour mon premier post sur le forum je me présente:
    Moi c'est Amine étudiant en L1 mathématique-informatique, & j’espère ne pas me tromper de section en postant ici.
    J'ai un exercice à faire pour demain, je pense que ma façon de l'avoir écrit est bonne, tout de même j'ai une erreur affichée au premier Read(x) de type : Runtime error 200 at 0001:0123.
    & je ne comprend pas d'ou ça vient.
    Voila mon code :

    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
    program exo5;
    uses wincrt;
    var sinx,x: real;
    procedure saisie(var x:real);
    begin
    repeat
    clrscr;
    writeln('calcul de sinus(x) ');
    write('donner une valeure à x : ');
    readln(x);
    until (x<=100);
    end;
    function factorielle(n: integer): integer;
    var f: integer;
    begin
    f := 1;
    while (n > 1) do
    begin
    f := f * n;
    n := n - 1;
    end;
    factorielle := f;
    end;
    function puissance(x: real; n: integer): real;
    var i: integer; p: real;
    begin
    p := 1;
    for i := 1 to n do
    p := p * x;
    puissance := p;
    end;
    function somme(x: real):real;
    var i,n: integer; som,s: real;
    begin
    somme := 0;
    s := 0;
    repeat
    for i := 3 to 100 do
    begin
    som := som + s;
    if ((i mod 2)<> 0) then n := i;
    s := (puissance(x,n) / factorielle(n));
    end;
    until (s <= 0.0001);
    somme := som;
    end;
    begin
    writeln('Calcul de Sin(x) ');
    saisie(x);
    sinx := x - somme(x);
    write(sinx);
    end.
    Énoncé de l'exercice :
    J’espère que vous m'aiderez ! Merci.
    EDIT : : Merci pour la remarque Paul TOTH , je vais utilisé les balises CODE.

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    calcule factorielle(35)

    nb: il faut utiliser les balises CODE (ou CODEINLINE) et non QUOTE pour du code
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    calcule factorielle(35)
    Je n'ai pas compris votre remarque ? Un peu de precision svp
    EDIT: ma fonction factorielle renvoyé toujours 0
    & désormais il n'ya plus d'erreur runtim.. mais dés que je donne une valeur à ma variable x ça bug, & le TPW se ferme.
    EDIT 2Désole, je ne suis pas habitué au forum. Voia, j'ai essayé d’espacer mon code

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
     
    program exo5;
    uses wincrt;
     
    var sinx,x: real;
     
     
    procedure saisie(var x:real);
     
    begin
     repeat
      clrscr; 
      writeln('calcul de sinus(x) ');
      write('donner une valeure à x : ');
      readln(x);
     until (x<=100);
    end;
     
     
    function factorielle(n: integer): integer;
     
    var f,i: integer;
    begin
     for i:=1 to (n-1) do
      f := f * n;
     factorielle := f;
    end;
     
     
    function puissance(x: real; n: integer): real;
     
    var i: integer; p: real;
    begin
     p := 1;
     for i := 1 to n do
      p := p * x;
     puissance := p;
    end;
     
     
    function somme(x: real):real;
     
    var i,n: integer; som,s: real;
    begin
     somme := 0;
     s := 0;
     repeat
      for i := 3 to 100 do
       begin
        som := som + s;
        if ((i mod 2)<> 0) then n := i;
        s := (puissance(x,n) / factorielle(n));
       end;
     until (s <= 0.0001);
     somme := som;
    end;
     
     
    begin
     
     writeln('Calcul de Sin(x) ');
     saisie(x);
     
     sinx := x - somme(x);
     
     write(sinx);
     
    end.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 941
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 941
    Points : 5 652
    Points
    5 652
    Par défaut
    Soe,

    Il faut faire un effort sur la présentation du code : indentation, aérer pour séparer les blocs logiques ...

    Ça a été imaginé pour faciliter la lecture, et donc la maintenance du code, pas seulement pour "faire joli".
    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Vous n'avez pas essayé mon code ? Ou remarqué un truc d'anormal ?

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par AmineDrX Voir le message
    Vous n'avez pas essayé mon code ? Ou remarqué un truc d'anormal ?
    oui et l'erreur est simple, elle est dans la fonction factorielle, as-tu calculé factorielle(35) comme demandé ? le résultat est-il juste ? pourquoi ne l'est-il pas ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Je reprend ma fonction factorielle une deuxiemme fois, je l'ai mal ecrite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function factorielle(n: integer): integer;
     
    var f,i: integer;
     
    begin
     
     f:=1;
     for i:=2 to n do
      f :=f * i;
     factorielle := f;
    end;
    & oui j'ai essayé factorielle(35), & ça me renvois la valeur 0.
    A partir d'une certaine valeur qu'on donne a ma variable x, la fonction renvois 0, je suppose que le resultat qu'elle doit renvoyé doit etre trop grand, donc je pense que le probleme est c'est le type integer que jai mis a ma fonction ?

  8. #8
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par AmineDrX Voir le message
    Une reponse ?
    ton analyse est juste, que te manque-t-il pour corriger ce problème ?!
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    ton analyse est juste, que te manque-t-il pour corriger ce problème ?!
    Franchement, je ne sais pas trop !
    Changer le type de ma fonction ? En cours on a fait que le integer & le real concernant les nombre.
    Un indice peut etre ? Meme si vous me mettez sur la vois depuis le debut, avec vos questions, je fait l'effort de trouver la solution moi-meme, mais là j'avoue ne plus avoir d'idée.
    C'est facile de demander la solution, mais je veux juste que vous me mettez encore sur la voie, histoire que je comprenne bien le soucis.

  10. #10
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 941
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 941
    Points : 5 652
    Points
    5 652
    Par défaut
    Kai,

    Le soucis est que la fonction exponentielle augmente très vite, et que quel que soit le type entier que tu utiliseras, la limite sera très rapidement atteinte.

    Pour info, 35! dépasse 40 chiffres (valeur approximative : 1,0333147966386144929666651337523e+40)

    Et si tu utilises des real, tu perds très vite en précision (nombres de chiffres significatifs).

    C'est donc irréductible, sauf à utiliser une bibliothèque permettant de calculer des entiers de taille quelconque (je ne dirais pas "de taille infinie", l'infini n'existant pas dans le monde réel), mais ce n'est certainement pas ce qu'on te demande pour ce genre d'exercice.
    Si les cons volaient, il ferait nuit à midi.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par droggo Voir le message
    Kai,

    Le soucis est que la fonction exponentielle augmente très vite, et que quel que soit le type entier que tu utiliseras, la limite sera très rapidement atteinte.

    Pour info, 35! dépasse 40 chiffres (valeur approximative : 1,0333147966386144929666651337523e+40)

    Et si tu utilises des real, tu perds très vite en précision (nombres de chiffres significatifs).

    C'est donc irréductible, sauf à utiliser une bibliothèque permettant de calculer des entiers de taille quelconque (je ne dirais pas "de taille infinie", l'infini n'existant pas dans le monde réel), mais ce n'est certainement pas ce qu'on te demande pour ce genre d'exercice.
    Oui ce n'est pas ça qui est demandé.
    En gros mon code n'est pas mal écris donc ? J'aurais juste aimé que ça ne plante pas, sans que je ne sache comment y remedier.
    Merci

  12. #12
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Dans ton cas, Real sera bien suffisant

    par contre, d'où vient la boucle "for i := 3 to 100" ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    La boucle for i:=3 to 100, c'est pour avoir la variable n ( que j'ai initialisée a 3 ) que j'utilise pour calculer la puissance & factorielle.

    J'ai mis real comme type, & j'ai toujours la même erreur, au même moment quand la valeur entré est un peu grande. & TPW plante quand je donne une valeur moins grande (2) par exemple.

  14. #14
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par AmineDrX Voir le message
    La boucle for i:=3 to 100, c'est pour avoir la variable n ( que j'ai initialisée a 3 ) que j'utilise pour calculer la puissance & factorielle.

    J'ai mis real comme type, & j'ai toujours la même erreur, au même moment quand la valeur entré est un peu grande. & TPW plante quand je donne une valeur moins grande (2) par exemple.
    oui ça j'ai bien vu

    on va le dire autrement : à quoi sert le repeat/until, que se passe-t-il si "s > 0.0001" ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    & bien c'est là que devrait s'arreter le calcul, c'est ce qui vas arreter le calcul de la somme.
    Comme c'est dit dans l'exercice :

  16. #16
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par droggo Voir le message
    Kai,

    Le soucis est que la fonction exponentielle augmente très vite, et que quel que soit le type entier que tu utiliseras, la limite sera très rapidement atteinte.

    Pour info, 35! dépasse 40 chiffres (valeur approximative : 1,0333147966386144929666651337523e+40)

    Et si tu utilises des real, tu perds très vite en précision (nombres de chiffres significatifs)....
    Bonjour,

    Question adressée à Drogo: comment obtiens-tu les 32 chiffres affichés de (35!) ? Par un calcul programmé en Turbo Pascal, ou à l'aide d'un autre logiciel (Python, par exemple) ? Ce n'est pas la première fois qu'un expert de l'équipe cite un résultat avec une telle précision.

    Je suis passionné de calcul numérique, et cela m'intrigue beaucoup.

    Merci pour les infos.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  17. #17
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par wiwaxia Voir le message
    Question adressée à Drogo: comment obtiens-tu les 32 chiffres affichés de (35!) ? Par un calcul programmé en Turbo Pascal, ou à l'aide d'un autre logiciel (Python, par exemple) ? Ce n'est pas la première fois qu'un expert de l'équipe cite un résultat avec une telle précision.

    Je suis passionné de calcul numérique, et cela m'intrigue beaucoup.
    Menu Démarrer, Calculatrice, 35, n!

    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  18. #18
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut
    Merci pour le rappel de la calculatrice, que j'avais complètement oubliée.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  19. #19
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 941
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 941
    Points : 5 652
    Points
    5 652
    Par défaut
    Mei,

    Eh oui, les moyens les plus simples sont souvent efficaces.
    Si les cons volaient, il ferait nuit à midi.

  20. #20
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Salut,
    J'ai un peu revus mon code, supprimé une fonction qui faisait planté le programme (enfin d'aprés moi) mais j'ai de gros doutes concernant le resultat que renvois mon programme
    Si vous pouvez m'aidé afin que j'en termine avec cet exercice, ce serait sympas
    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
    57
    58
    59
    60
     
    program exo5;
    uses wincrt;
     
    var x,k,n,j: integer; sinx,s,som:real;
     
     
    procedure saisie(var x:integer);
    begin
     
     repeat
      clrscr;
      writeln('calcul de sinus(x) ');
      write('donner une valeur a x : ');
      readln(x);
     until (x<=400);
    end;
     
     
    function factorielle(n:integer):integer;
     
    var f,i: integer;
    begin
     f:=1;
     for i:=2 to n do
      f:=f * i;
     factorielle := f;
    end;
     
     
    function puissance(x,n: integer): integer;
     
    var i:integer; p: integer;
    begin
     p:=1;
     for i:=1 to n do
      p:= p*x;
     puissance := p;
    end;
     
     
    begin
     saisie(x);
     som := 0;
     s:=0;
     k:=-1;
     n:=3;
     s:=puissance(x,n)/factorielle(n);
     
       repeat
     
        j:=5;
        n:=j;
        som:=( som + s)*k;
        s:=puissance(x,n)/factorielle(n);
        j:=j+2;
       until (s <= 0.0001);
     sinx:=x-som;
     writeln('sin(x) = ',sinx);
    end.
    & je remet l'ennoncé de l'exercice, on ne sait jamais ^^

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [BPW] Runtime error 200 (division par 0)
    Par dzeus dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 23/05/2007, 12h05
  2. [TP] Runtime error 200 : programme TP5 non patchable
    Par HERON Daniel dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 02/11/2005, 22h53
  3. [TP]Runtime error 106 à l'exécution
    Par BlackTiger dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 25/01/2004, 22h50
  4. [LG]runtime error 202
    Par picsou123 dans le forum Langage
    Réponses: 2
    Dernier message: 14/11/2003, 23h53
  5. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 12h51

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