[pascal]nombre hors limite : problème

Fermé
grad - 30 janv. 2008 à 22:41
 amigo - 22 mai 2008 à 13:44
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

répondez moi
0
répondez moi
0
répôndez moi
0
ZOUARI Messages postés 60 Date d'inscription lundi 26 avril 2004 Statut Contributeur Dernière intervention 14 mai 2011 29
31 janv. 2008 à 14:48
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 jeudi 31 janvier 2008 Statut Membre Dernière intervention 20 août 2009 1
31 janv. 2008 à 15:45
je ne comprends pas ton problème. Le programme se ferme t-il avant qu'il est affiché le résultat?
0
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
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 jeudi 31 janvier 2008 Statut Membre Dernière intervention 20 août 2009 1
31 janv. 2008 à 16:07
y a t-il des instructions après ce write ('hors-limite')? si oui combien si tu t'en souviens évidemment?
0
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 jeudi 31 janvier 2008 Statut Membre Dernière intervention 20 août 2009 1
31 janv. 2008 à 16:34
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 jeudi 22 mai 2008 Statut Membre Dernière intervention 22 mai 2008
22 mai 2008 à 12:46
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
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