Problème de random qui donne des valeurs injustes

Résolu
piAm96 Messages postés 28 Statut Membre -  
 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.

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 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
    1. PiAm96
       
      Merci infiniment KX
      C'est très gentil de votre part :)
      0