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

Pascal Discussion :

Problème mathématique dans un programme


Sujet :

Pascal

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Problème mathématique dans un programme
    Salut, j'ai un problème mathématique et c'est urgent dans l'exercice suivant:

    Voici l'exercice:
    Soit la suite U définie par U0=3/4 et la relation:
    pour tout n appartient N, Un+1=Un-Un²
    On admet que la suite U est décroissante et converge vers 0.
    Ecrire un programme qui détermine le premier entier n pour lequel Un< 0.001

    voici ma solution
    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
    program exercice;
       uses crt;
       var n:integer;
     
       function u(n:integer):real;
          var i:integer;v:real;
          begin
             v:=3/4;
             for i:=1 to n do
                v:=v-v*v;
             u:=v;
     
          end;
     
    begin
       clrscr;
       n:=0;
     
       repeat
          n:=n+1;
       until u(n)<1/1000;
     
       write('le premier entier n pour lequel Un<1/1000 est=',n);
       readln;
    end.

    Alors mon problème est qu'on est pas sûr que les valeurs de la suite passeront par 0.001 (on a l'information que la suite est décroissante mais pas qu'elle est strictement décroissante) .lorsque on exécute le programme oui c'est juste mais coté algorithmique est ce qu'il y a un problème de ne pas faire un test..
    aidez moi s'il vous plait

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 454
    Points
    15 454
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Ton programme me paraît répondre correctement à la question.

    Ce qui t'inquiète, c'est de savoir ce qui se passerait si cette condition

    n'était jamais remplie, c'est ça ?
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Bonjour !

    Ton programme me paraît répondre correctement à la question.

    Ce qui t'inquiète, c'est de savoir ce qui se passerait si cette condition

    n'était jamais remplie, c'est ça ?
    merci pour votre réponse oui c'est ça le problème

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 454
    Points
    15 454
    Billets dans le blog
    9
    Par défaut
    Tu pourrais ajouter un test sur la valeur de n en fixant une limite :

    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
    program exercice_02;
     
    uses
      Crt;
     
    var
      u: real;
      n: integer;
     
    begin
      u := 3/4;
      n := 0;
      while (u >= 1/1000) and (n < 5) do
      //while (u >= 1/1000) and (n < 10000) do
      //while (u >= 1/1000) and (n < High(n)) do
      begin
        u := u - u * u;
        Inc(n);
      end;
      WriteLn('n = ', n);
      ReadLn;
    end.
    Soit dit en passant, une chose que tu pourrais améliorer dans ton programme, c'est que pour chaque valeur de n, tous les termes de la suite sont recalculés inutilement.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Tu pourrais ajouter un test sur la valeur de n en fixant une limite :

    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
    program exercice_02;
     
    uses
      Crt;
     
    var
      u: real;
      n: integer;
     
    begin
      u := 3/4;
      n := 0;
      while (u >= 1/1000) and (n < 5) do
      //while (u >= 1/1000) and (n < 10000) do
      //while (u >= 1/1000) and (n < High(n)) do
      begin
        u := u - u * u;
        Inc(n);
      end;
      WriteLn('n = ', n);
      ReadLn;
    end.
    Soit dit en passant, une chose que tu pourrais améliorer dans ton programme, c'est que pour chaque valeur de n, tous les termes de la suite sont recalculés inutilement.

    ah toi maintenant tu parle de la fonction que j'ai programmer oui tu as raison si je fait une fonction j'aurai des recalcules inutiles c'est vrai mais concernant votre proposition de fixer la valeur du 'n' je ne peux pas faire ça puisque elle peut être une valeur inférieur à la valeur attendu

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 070
    Points : 15 454
    Points
    15 454
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par roobi Voir le message
    concernant votre proposition de fixer la valeur du 'n' je ne peux pas faire ça puisque elle peut être une valeur inférieur à la valeur attendu
    Pas si tu utilises cette ligne-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (u >= 1/1000) and (n < High(n)) do
    Adapté à ton code, cela donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    until (u(n) < 1/1000) or (n = High(n));
    High(n) est la plus grande valeur que peut avoir la variable n.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  7. #7
    Membre habitué Avatar de Modulpro
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 76
    Points : 175
    Points
    175
    Par défaut
    Bonjour,

    Pour répndre à ton premier problème :

    Citation Envoyé par roobi Voir le message
    Alors mon problème est qu'on est pas sûr que les valeurs de la suite passeront par 0.001 (on a l'information que la suite est décroissante mais pas qu'elle est strictement décroissante
    On te dit que la suite converge vers 0. C'est cette information qui te garantie qu'elle passera en dessous de 0.001 à partir d'un certain rang. En effet, la définition même de la convergence vers une limite réelle notée b est :

    Pour tout réel a > 0, il existe un entier N tel que pour tout n >= N, on a |Un - b| < a.
    Si tu remplace a par 0.001 et b par 0, la définition te garantie bien l’existence d'un rang n tel que Un < 0.001

    Cordialement.

Discussions similaires

  1. [Débutant] probléme visibilité dans le programme
    Par remirobert dans le forum Windows Forms
    Réponses: 14
    Dernier message: 08/06/2012, 16h57
  2. Faire un rendu de formules mathématiques dans un programme C++
    Par E-Sh4rk dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 08/05/2009, 14h42
  3. Réponses: 8
    Dernier message: 23/03/2006, 19h30
  4. Réponses: 3
    Dernier message: 09/01/2006, 11h26
  5. [Debutant] Problème de fraction dans un programme
    Par SAKDOSS dans le forum Débuter
    Réponses: 4
    Dernier message: 22/10/2005, 18h38

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