[pascal]nombre hors limite : problème
grad
-
amigo -
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:
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
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:
- [pascal]nombre hors limite : problème
- Turbo pascal - Télécharger - Édition & Programmation
- My pascal - Télécharger - Édition & Programmation
- Apparaitre hors ligne instagram - Guide
- Dev pascal - Télécharger - Édition & Programmation
- Gps hors ligne - Guide
11 réponses
Votre problème n'est pas claire
Donnez moi l'énoncé de votre problème ou bien le code source de votre programme
Donnez moi l'énoncé de votre problème ou bien le code source de votre programme
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
y a t-il des instructions après ce write ('hors-limite')? si oui combien si tu t'en souviens évidemment?
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
En tous cas c'est c'est pas le problème qu'il y est ce qu'il y est ça ne change rien
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.
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.
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.
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.
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.