{ File: eso2-2.pas }

{ Scopo: secondo esercizio della seconda simulazione di una prova di esonero }

program Problema2;

type
  tabella          = ^elemento_tabella;
  elemento_tabella = record
                       info          : integer; 
                       riga, colonna : integer;
                       next          : tabella;
                     end;            

var
  nomefile     : string;
  table, lista : tabella;
  elim         : integer;


{*****************************************************************}
{***** NB le procedure Esercizio2 e Esercizio3   *****************}
{***** devono essere messe  nel file SOLUZ2.PAS ******************}
{*****************************************************************}
{*****************************************************************}

{$I SOLUZ2.PAS}  {Inclusione del file con le procedure}

  procedure StampaLista (l: tabella);
  { Stampa gli elementi della lista l su standard output}
  
  begin
    while l <> NIL do
    begin
      write(l^.info:4, l^.riga:3,l^.colonna:2, ' * ');
      l := l^.next;
    end;
    writeln;
  end; { StampaLista }
  
  procedure CancellaLista (var l: tabella);
  { Rende disponibile la memoria occupata da l }
  var
     paux : tabella;
  
  begin
    while l <> NIL do
    begin
      paux := l;
      l := l^.next;
      dispose(paux);
    end;
  end; { CancellaLista }

begin { Problema2  }
  writeln;
  writeln('--- Inizio programma ---');
  writeln;
  writeln('Memora disponibile all''inizio del programma :', memavail);
  writeln;
  write('Nome del file contenente la tabella?  ');
  readln(nomefile);
  writeln;
  writeln('CHIAMATA procedura Esercizio2');

{***************************************}
  Esercizio2(table,nomefile);
{***************************************}

  write('Tabella letta:  ');
  StampaLista(table);
  writeln;
  write ('Inserire un valore per ELIM : ');
  readln(elim);
  writeln;
  writeln('CHIAMATA procedura Esercizio3');

{***************************************}
  Esercizio3 (lista, table, elim);
{***************************************}
  writeln('Lista degli elementi con somma indice riga e colonna pari a ELIM ');
  StampaLista (lista);
  writeln('Tabella dopo l''esecuzione della procedura Esercizio3');
  StampaLista(table);
  writeln;
  CancellaLista(table);
  CancellaLista(lista);
  writeln('Memora disponibile alla fine del programma :', memavail);
  writeln;
  writeln('--- Fine programma, premere return ---');
  readln;
end. { Problema2 }