[pascal]nombre hors limite : problème

grad -  
 amigo -
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. ZOUARI Messages postés 62 Statut Contributeur 29
     
    Votre problème n'est pas claire
    Donnez moi l'énoncé de votre problème ou bien le code source de votre programme
    0
  2. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  3. jeany07 Messages postés 102 Statut Membre 1
     
    je ne comprends pas ton problème. Le programme se ferme t-il avant qu'il est affiché le résultat?
    0
    1. grad
       
      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
  4. Manu
     
    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
  5. jeany07 Messages postés 102 Statut Membre 1
     
    y a t-il des instructions après ce write ('hors-limite')? si oui combien si tu t'en souviens évidemment?
    0
  6. grad
     
    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
  7. jeany07 Messages postés 102 Statut Membre 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
  8. leptitcon Messages postés 4 Statut Membre
     
    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
  9. amigo
     
    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