[pascal]nombre hors limite : problème

Bonjour,

Je travaille avecpascal sous le compilateur Dev-Pascal
Il m'arrive parfois qu'une variable résute d'autres données soit hort-limites,c'est à dire:on sait que la limite des réels est -A<réel<A , et pour faire x:=y*z; (tel que z et y sont dans les limites) , la variable x est hors-limite , donc:le programme se FERME

Ne voulant pas que mon programme quitte rien que pour une action simple , est ce que vous pouvez m'expliquer comment faire,tel que si x est hors-limite , le programme m'affiche : Hors-limite à la place de se refermer

Je ne crois pas que ceci peut m'être utile:

If x<Min OR x>Max then
write('hors-limite')
else ... ;


Pourquoi ?
Parce que avnt de faire la comparaison , le programme se termineras quand il verra que x est hors limite , donc pas temps de vérifier la condition

Merci
Configuration: Windows XP
Firefox 2.0.0.11

11 réponses

  1. Contributeur
    Votre problème n'est pas claire
    Donnez moi l'énoncé de votre problème ou bien le code source de votre programme
    0
    1. je ne comprends pas ton problème. Le programme se ferme t-il avant qu'il est affiché le résultat?
      0
      1. oui puisque le nombre est HORS-LIMITE , tel qu'une calculatrice scientifique qui affiche : "MATH ERROR" et moi je ne veux pas qu'il ferme mais qu'il me dise "HORS-LIMITE"
        0
    2. Bonjour,

      Pour un cas comme x = y*z, il y a la possibilité de passer aux logarithmes. Le logarithme d'un nombre représentable et positif est toujours représentable. On peut donc tester si ln(abs(y)) + ln(abs(z)) est dans les limites ln(min), ln(max) max étant le plus grand nombre positif représentable et min le plus petit nombre positif non nul représentable (ces nombres dépendent du processeur et de la précision retenue).

      Mais ce n'est pas facile à généraliser, ...

      Manu
      0
      1. y a t-il des instructions après ce write ('hors-limite')? si oui combien si tu t'en souviens évidemment?
        0
        1. il y a un goto après write('hors limite')
          En tous cas c'est c'est pas le problème qu'il y est ce qu'il y est ça ne change rien
          0
          1. essaie ceci avant de fermer ton programme, avant end. juste avant tape cette instruction writeln (' '); elle permet de laisser le programme ouvert jusqu'à ce que tu tapes sur entrée.
            0
            1. svp g besoin daide aidez moi
              mn programme naffiche ke des 0 00 0 0 0 0 aidez moi
              le voila
              program 22;
              uses wincrt;
              type
              tab=array[1..100] of integer ;
              var
              t: tab;
              n:integer;
              {***************saisie de n************}
              procedure saisie_n(var x:integer);
              begin
              repeat
              writeln ('entrez le nbr de case ');
              readln (x)
              until (x in [1..6]);
              end;

              {*********saisie de t ***************}

              procedure saisie_t(t:tab;n:integer);

              var i :integer ;
              begin
              for i:=1 to n do
              begin
              write('t[',i,']=');
              readln ( t[i]);
              end;
              end;

              {***************affichage de t ***********}

              procedure affichage_t(t:tab ; n:integer);
              var j:integer;

              begin
              for j:=1 to n do
              write (t[j]);
              end;

              {************programme principal**************}

              begin
              saisie_n(n);
              saisie_t(t,n);
              affichage_t(t,n);
              end.
              0
              1. bonjour,

                C'est le passage de paramètres aux procédures qui n'est pas bon.

                procedure saisie_t(t:tab;n:integer);

                ça c'est un passage par valeur, le tableau t est local à la procédure, il est abandonné à la sortie.
                il faut donc que tu passe le tableau t par référence en ajoutant le mot clé var

                procedure saisie_t(var t:tab;n:integer);

                procedure affichage_t(var t:tab ; n:integer);

                Salut.
                0