{Terreno Antonio}
uses
listeric,crt;
procedure menu;
begin
clrscr;
writeln('MENU'' OPERAZIONI:');
writeln ('[ a ] --> crea lista');
writeln ('[ b ] --> leggi lista da tastiera');
writeln ('[ c ] --> inserisci x in testa');
writeln ('[ d ] --> inserisci in ordine ');
writeln ('[ e ] --> inserisci elemento prima di x ');
writeln ('[ f ] --> inserisci elemento dopo di x ');
writeln ('[ g ] --> inserisci in coda ');
writeln ('[ h ] --> cancella tutte le occorenze di x ');
writeln ('[ i ] --> cancella l''elemento prima di x ');
writeln ('[ l ] --> cancella l''elemento dopo di x ');
writeln ('[ m ] --> estrai l''elemento in posizione i');
writeln ('[ n ] --> esiste l''elemento x? ');
writeln ('[ o ] --> primo elemento ');
writeln ('[ p ] --> ultimo elemento');
writeln ('[ q ] --> ricerca la posizione dell''elemento x');
writeln ('[ r ] --> lunghezza lista');
writeln ('[ s ] --> vuota?');
writeln ('[ t ] --> visualizza stato');
writeln ('[ u ] --> concatena due liste ');
writeln ('[ v ] --> fondi due liste ');
writeln ('[ x ] --> Uscita');
end;
var
opzione: char;
lista_1,lista_2,lista_3:tipo_lista;
elemento,x: tipo_elemento;
posizione: integer;
begin
writeln;
menu;
writeln;
write ('Scegliere l''operazione da compiere: ');
readln (opzione);
while not (opzione = 'x') do
begin
case opzione of
'a': crea_lista(lista_1);
'b': begin
writeln('inserisci elementi termina con eoln');
leggi_da_tastiera(lista_1);
end;
'c': begin
write('elemento? ');
read(elemento);
inserisci_in_testa(elemento,lista_1);
end;
'd': begin
write('elemento? ');
read(elemento);
inserisci_ord(elemento,lista_1);
end;
'e': begin
write('x? ');
readln(x);
write('elemento? ');
readln(elemento);
inserisci_prima(x,elemento,lista_1);
end;
'f': begin
write('x? ');
readln(x);
write('elemento? ');
readln(elemento);
inserisci_dopo(x,elemento,lista_1);
end;
'g': begin
write('elemento? ');
read(elemento);
inserisci_in_coda(elemento,lista_1);
end;
'h': begin
write('elemento? ');
read(elemento);
cancella_tutti(elemento,lista_1);
end;
'i': begin
write('x? ');
readln(x);
cancella_prima(x,lista_1);
end;
'l': begin
write('x? ');
readln(x);
cancella_dopo(x,lista_1);
end;
'm': begin
write('posizione? ');
read(posizione);
estrai_el(elemento,posizione,lista_1);
writeln('elemento eliminato -> ', elemento);
readln;
end;
'n': begin
write('elemento? ');
read(elemento);
write('trovato -> ');
writeln(cerca_elemento(elemento,lista_1));
readln;
end;
'o': begin
write('primo elemento -> ');
writeln(primo_elemento(lista_1));
readln;
end;
'p': begin
write('ultimo elemento -> ');
writeln(ultimo_elemento(lista_1));
readln;
end;
'q': begin
write('elemento? ');
read(elemento);
write('posizione -> ');
writeln(posizione_elemento(elemento,lista_1));
readln;
end;
'r': begin
write('lunghezza lista -> ');
writeln(lunghezza_lista(lista_1));
end;
's': begin
write('lista vuota -> ');
writeln(lista_vuota(lista_1));
end;
't': begin
write('lista -> ');
stampa_lista(lista_1);
end;
'u': begin { non funziona }
write('inserisci elementi della prima lista');
writeln(' termina con ^Z');
leggi_da_tastiera(lista_1);
readln;
write('inserisci elementi della seconda lista');
writeln(' termina con ^Z');
leggi_da_tastiera(lista_2);
readln;
stampa_lista(concatena(lista_1,lista_2));
end;
'v': begin
write('inserisci elementi della prima lista');
writeln(' termina con ^Z');
leggi_da_tastiera(lista_1);
readln;
write('inserisci elementi della seconda lista');
writeln(' termina con ^Z');
leggi_da_tastiera(lista_2);
readln;
stampa_lista(fondi(lista_1,lista_2));
end;
end;
readln;
menu;
writeln;
write ('Scegliere l''operazione da compiere: ');
readln (opzione);
end;
end.