Problème de random qui donne des valeurs injustes

Résolu
piAm96 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   -  
 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:

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

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Ce qui est illogique c'est de déclarer un tableau
array[5..20]
et de l'utiliser
for 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 en
array[1..20]


Remarque : c'est également mauvais de déclarer
var 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 le
begin end.
du programme principal.
1
PiAm96
 
Merci infiniment KX
C'est très gentil de votre part :)
0