[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
A voir également:

11 réponses

grad
 
répondez moi
0
grad
 
répondez moi
0
grad
 
répôndez moi
0
ZOUARI Messages postés 60 Date d'inscription   Statut Contributeur Dernière intervention   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

Vous n’avez pas trouvé la réponse que vous recherchez ?

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