Liste de chaînes

Niveau procédure Pascal
 (CD-ROMPascal.Unit_listlin\Plistchn.pas)



: Les projets Delphi


Objectif : Implantation sous forme d'un programme pascal avec des procédures et des fonctions d'un structure de données de type liste de chaînes de caractères.

Le programme principal
 

Niveau de réutilisabilité de la liste
 
 
 

Le programme principal :

 program Listchn;

const
     max_elt = 100;
type
    T0 = string;
    liste = record
                  suite: array[1..max_elt] of T0;
                  long: 0..max_elt;
                  init_ok:char;
              end;

var
  L1,L2,L3:liste;

{------------------------------------}
procedure init_liste(var L:liste);
{initialisation obligatoire}
begin
 with L do
 begin
   long:=0;
   init_ok:='#'
 end
end;

function Est_vide(L:liste):boolean;
begin
 if L.init_ok<>'#' then
 begin
    writeln('>>> Gestionnaire de Liste: Liste non initialisée !! (erreur fatale)');
    halt
 end
 else
     if L.long=0 then Est_vide:=true
     else  Est_vide:=false
end;

function longueur (L: liste): integer;
begin
     longueur := L.long
end;

procedure ajouter(var L:liste;x:T0);
var
   n: 0..max_elt;
begin
 n := longueur(L);
 if n < max_elt then {il y a assez de place pour insérer}
 begin
  L.suite[n+1]:=x;
  L.long :=n+1
 end
end;

procedure effacer(var L:liste);
begin
 L.long:=0;
end;

procedure supprimer (var L: liste; rang: integer);
var
   n: 0..max_elt;
   i: 1..max_elt;
begin
 if not Est_vide(L) then
 begin
  n := longueur(L);
  if rang in [1..n] then {le rang est correct}
  begin
   if (n=1)or(rang=n) then  L.long :=n-1 {un seul élément ou le dernier}
   else
   begin {n>1 et rang < n}
     for i := rang to n - 1 do
  L.suite[i] := L.suite[i + 1];
     L.long := n - 1
   end
  end
 end
end;{supprimer}

procedure inserer (var L: liste; rang: integer; x: T0);
{on insère à la place de l'élément  "rang" qui est
repoussé lui-même d'un rang à droite (il est à rang+1)}
var
   n: 0..max_elt;
   i: 1..max_elt;
begin
 n := longueur(L);
 if not Est_vide(L) then
 begin
  if n < max_elt then {il y a assez de place pour insérer}
   if rang in [1..n] then {le rang est correct}
   begin
     for i := n downto rang do
 L.suite[i + 1] := L.suite[i];
     L.suite[rang] := x;
    L.long := L.long + 1
   end
 end
 else
 if rang=1 then  {le numéro du rang est cohérent}
    ajouter(L,x) {lorsque la liste est vide on voulait rajouter en tête}
end;

function kieme (L: liste; rang: integer): T0;
begin
 if not Est_vide(L) then
 begin
     kieme := L.suite[rang]
 end
end;

procedure Test_Recherche(L:liste;x:T0;var trouve:boolean;var rang:integer);
 var
    fini,present:boolean;
    i,n:integer;
begin
 trouve:=false;
 if not Est_vide(L) then
 begin
   fini := false;
   i := 1;
   n:=longueur(L);
   present := false;
   while not fini and not present do
    begin
      if i <= n then
        if L.suite[i] <> x then
          i := i + 1
        else
          present := true
      else
        fini := true
    end;
    if present then
    begin
       {valeur x trouvée a l'indice:i}
       trouve:=true;
       rang:=i
    end
    else
    begin
 {cette valeur x n'est pas dans le tableau}
 rang:=0
 {on affecte  à rang une valeur inexistante!! }
    end
 end
end;

function Test (L: liste; x: T0): boolean;
  {teste la presence ou non de x dans la liste L}
 var
    present:boolean;
    rang:integer;
begin
 Test:=false;
 if not Est_vide(L) then
 begin
   Test_Recherche(L,x,present,rang);
   Test:=present
 end
end;

procedure Rechercher (L: liste; x: T0; var place: integer);
 var
    present:boolean;
begin
 place:=0;
 if not Est_vide(L) then
   Test_Recherche(L,x,present,place);
end;

procedure VoirListe(L:liste);
begin
  {construire un affichage du contenu de L}
end;

procedure CreationListe(var L:liste);
begin
   {construire un remplissage de L}
end;

begin
 {lancer ici un exemple d'utilisation de la liste}
 init_liste(L1);
 init_liste(L2);
 init_liste(L3);
 {..................}
end.

                                                                         Remonter  en haut

Réutilisabilité de la liste :

         inexistante :

il faut recopier manuellement tout le code source dans un autre programme.