Création d'une unité pour générer des tableaux statiques
Bonjour à tous,
Ayant commencé un bachelier en informatique cette année, on m'a demandé de créer une unité qui puisse générer un tableau statique de manière aléatoire ou par entrée clavier et qui puisse l'afficher.
Cependant, ayant raté une bonne partie des cours sur les tableaux et les unités, je me retrouve avec quelques lacunes que je n'arrive pas à combler :oops: :cry:
Je développe ce programme sous Lazarus.
Voici donc l'unité censée créer et afficher mon tableau :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| unit unit_tableau;
interface
uses seqint;
const indmin = 1;
indmax = 10;
type elem = integer;
Ttab = array [indmin .. indmax] of elem;
procedure ChargeTab (var t:Ttab; var long:integer);
{ effet: initialise le tableau t Ã* partir de la première composante gauche avec un contenu aléatoire
(provenant d'une séquence quelconque)
et calcule dans long le nombre de composantes initialisées }
procedure ClavTab(var t:Ttab; var long:integer);
{ effet: initialise le tableau t depuis le clavier.
(999 joue le rôle de sentinelle si on ne souhaite pas remplir complètement le tableau).
et calcule dans long le nombre de composantes initialisées.
}
procedure ChargeDefTab (var t: Ttab; var long:integer );
{ effet: initialise le tableau t Ã* partir de la première composante gauche avec le contenu d'une séquence
de caractéristique genre (croissante, doublesvt)
et calcule dans long le nombre de composantes initialisées.
Exception : si taille s > indmax --> le chargement se limite Ã* indmax composantes.}
procedure AfficheTab (const t: Ttab; const long:integer );
{ effet : affiche les composantes significatives du tableau (les longs premières composantes du tableau) }
implementation
procedure ChargeTab (var t:Ttab; var long:integer);
var s:tseqint;
it: tseqiter;
begin
s:=tseqInt.create(quelconque);
it:=tseqIter.init(s);
long:=indmin-1;
while (long< indmax ) and not it.aubout
do begin inc(long);
t[long] :=it.valeurCourante;
end;
end ;
procedure ClavTab(var t:Ttab; var long:integer);
var x:integer;
begin
long:=indmin -1;
readln(x);
while (long<indmax) and (x<> 999)
do begin
inc(long);
t[long]:= x;
readln(x);
end;
end;
procedure ChargeDefTab (var t: Ttab; var long:integer );
var s:tseqint;
it: tseqiter;
begin
s:=tseqInt.create(quelconque);
it:=tseqIter.init(s);
long:=indmin-1;
while (long< indmax ) and not it.aubout
do begin inc(long);
t[long] :=it.valeurCourante;
end;
end ;
procedure AfficheTab (const t: Ttab; const long:integer );
var i:integer;
begin
for i:=1 to long do write(t[i]:4);
writeln;
end ;
end. |
J'effectue mon appel d'unité de la manière suivante (l'erreur provient sûrement d'ici) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| program Project1;
uses unit_tableau;
var a:integer;
z:Ttab;
begin
a:=1;
writeln('salut');
ChargeTab(z,a) ;
writeln('voila');
AfficheTab(z,a);
writeln('fini');
readln();
end. |
Lorsque je compile, pas de souci hormis que le compilateur me dit que z ne semble pas avoir été initialisé.
Mais à l'exécution, Lazarus n'affiche la fenêtre du programme que durant 1 sec.
J'ai réussi à screen-shooter le message mais je ne vois pas à quoi correspond le problème :?
[IMG]http://img651.imageshack.us/img651/2...titrerl.th.png[/IMG]
Voilà, en espérant que quelqu'un puisse m'éclairer :)