Problème de random qui donne des valeurs injustes
Résolu
piAm96
Messages postés
28
Statut
Membre
-
PiAm96 -
PiAm96 -
Bonjour,
Je vous présente un script pascal qui m'a rendu bouche bée.
Il consiste à remplir un tableau par n entiers <100 aléatoirement.
Le problème c'est que les valeurs rendus par cette fonction sont illogiques.
de plus même en supprimant l'instruction d'affectation, le tableau garde les mêmes valeurs dedans...
Merci beaucoup d'avance pour votre aide.
SCRIPT:
Je vous présente un script pascal qui m'a rendu bouche bée.
Il consiste à remplir un tableau par n entiers <100 aléatoirement.
Le problème c'est que les valeurs rendus par cette fonction sont illogiques.
de plus même en supprimant l'instruction d'affectation, le tableau garde les mêmes valeurs dedans...
Merci beaucoup d'avance pour votre aide.
SCRIPT:
program tri;
uses wincrt;
type tab=array[5..20] of integer;
var
t:tab;
n:integer;
procedure saisie(var t:tab ; var n: integer);
var i: integer ;
begin
repeat write('n=') ; readln(n);
until n in [5..20] ;
for i:=1 to n do
t[i]:=(random(100));
end;
procedure afficher(t:tab ; n :integer) ;
var
i: integer;
begin
for i:=1 to n do
writeLN('t[',i,']',t[i])
end;
begin
randomize;
saisie(t,n);
afficher(t,n);
end.
1 réponse
-
Bonjour,
Ce qui est illogique c'est de déclarer un tableauarray[5..20]
et de l'utiliserfor i:=1 to n
. Les valeurs de 1 à 4 n'appartenant pas au tableau, elles ne peuvent donc pas être modifiées par un accès à t[i].
Il faudrait que tu changes ton type enarray[1..20]
Remarque : c'est également mauvais de déclarervar t:tab; n:integer;
au début du programme, car cela en fait des variables globales et il y a une ambiguïté dans les procédures à savoir si t et n sont les variables globales ou les arguments. Il vaut mieux faire la déclaration juste avant lebegin end.
du programme principal.