PROGRAM TP6exc3 ;

CONST nmax = 20 ;
TYPE point = array[1..3] of real ;
            triangle = array[1..3] of point ;
            liste = array[1..20] of triangle ;
VAR L : liste ;
            n : 1..nmax ; (* taille de la liste *)
            choix, i, j, k : integer ;

BEGIN
n:=0 ;
repeat
    (* affichage du menu *)
    writeln(' -1-  Afficher la liste des triangles') ;
    writeln(' -2-  Ajouter un triangle') ;
    writeln(' -3-  Supprimer un triangle') ;
    writeln(' -0-  Quitter') ;
    (* saisie du choix *)
    repeat
        write('Votre choix ? ') ; readln(choix) ;
      until (choix>=0) and (choix<=3) ;
    (* traitements *)
    case choix of
        1 :  Begin
              writeln(' n°   X1      Y1      Z1      X2      Y2      Z2      X3      Y3      Z3   ') ;
              for i:=1 to n do (* pour chaque triangle de la liste *)
                    begin
                    write(i:3) ;
                    for j:=1 to 3 do (* pour chaque point du triangle *)
                        for k:=1 to 3 do (* pour chaque coordonnée du point *)
                            write(L[i,j,k]:8) ;
                    writeln ;
                    end ;
               writeln ;
              End ;
        2 : Begin
              if n=nmax
                  then writeln('Ajout impossible : la liste est pleine !')
                  else begin
                          for j:=1 to 3 do (* pour chaque point a ajouter *)
                              begin
                              writeln(j,'-ième point :') ;
                              for k:=1 to 3 do (* pour chaque coordonnée du point *)
                                  begin
                                  write(k,'-ième coordonnée ? ') ; readln(L[n+1,j,k]) ;
                                  end ;
                              end ;
                          end ;
             End ;
        3 : Begin
              if n=0
                  then writeln('Suppression impossible : la liste est vide') ;
                  else begin
                          repeat
                              write('Supprimer le triangle numéro (1 à ',n,') ? ') ; readln(i) ;
                              until (i>=1) and (i<=n) ;
                          (* remontée des triangles dans la liste, ce qui supprime le triangle n°i *)
                          if i<n then
                              for h:=i+1 to n do
                                  for j:=1 to 3 do
                                      for k:=1 to 3 do
                                          L[h-1,j,k]:=L[h,j,k] ;
                          (* mise à jour de la taille de la liste *)
                          n:=n-1 ;
                         end ;
             End ;
        end ;
 until choix=0 ;
END.