Problème de random qui donne des valeurs injustes

Résolu/Fermé
piAm96 Messages postés 22 Date d'inscription lundi 16 avril 2012 Statut Membre Dernière intervention 6 juillet 2016 - Modifié par KX le 22/03/2015 à 14:08
 PiAm96 - 22 mars 2015 à 14:40
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
22 mars 2015 à 14:24
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
Merci infiniment KX
C'est très gentil de votre part :)
0