PDA

View Full Version : [PASCAL] Gestione Liste


toonamix
22-01-2008, 15:48
Ragazzi io ho capito poco quanto niente sul funzionamento delle liste (anche un pò sulla logica non mi è chiara una parte dell'argomento)...

Comunque a fatica riesco a creare una procedura di inserimento e una di visualizzazione dei dati immessi...

Ma se dovessi fare in modo di cancellare un dato e collegare il dato precedente a quello eliminato al dato successivo a quello eliminato non so proprio farlo...come devo fare,o meglio come si fa?
So che chiedo tanto ma vorrei una mano per favore...

Qui allego un programma con procedura di inserimento dati e estrazione

k0nt3
22-01-2008, 16:41
guarda se questo codice ti può aiutare
http://snippets.dzone.com/posts/show/3253

toonamix
22-01-2008, 17:18
guarda se questo codice ti può aiutare
http://snippets.dzone.com/posts/show/3253

nono ci capisco poco

k0nt3
23-01-2008, 10:23
non ho un compilatore pascal installato, quindi non so nemmeno se compila :fagiano: comunque ho provato a dare una sistemata al tuo codice

Program SJF;
uses crt;

nodo = record
nomejob:string[19];
tesec:real;
succ:punt;
end;
type punt = ^nodo;

var testa:punt;

Procedure inserisciLavoro(nome: string[19], tempo: real);
var el, cur, prec: punt;
begin
new(el);
el^.nomejob := nome;
el^.tesec := tempo;

cur = testa;
while (cur<>nil) and (cur^.tesec<tempo) do
begin
prec:=cur;
cur:=cur^.succ;
end;

el^.succ:=cur;
if cur=testa then
begin
testa:=el;
end
else
begin
prec^.succ:=el;
end;
end;

Procedure rimuoviLavoro(nome: string[19]);
var cur, prec: punt;
begin
cur = testa;
if (cur^.nomejob = nome)
begin
testa = testa^.succ;
dispose(cur);
end;
else
begin
prec:=cur;
cur:=cur^.succ;
while (cur<>nil) do
begin
if (cur^.nomejob = nome)
begin
prec^.succ = cur^.succ;
dispose(cur);
end;
prec:=cur;
cur:=cur^.succ;
end;
end
end;

Procedure inserisci;
var tempo:real;
nome:string[19];
Begin
Writeln ('Inserisci il nome del lavoro ');
readln (nome);
Writeln (' Inserisci il tempo necessario all esecuzione del lavoro ',nome);
readln (tempo);
clrscr;
InserisciLavoro(nome, tempo);
end;

Procedure rimuovi;
var nome:string[19];
Begin
Writeln ('Inserisci il nome del lavoro ');
readln (nome);
clrscr;
RimuoviLavoro(nome);
end;

Procedure visualizza;
var risp:char;
Begin
clrscr;
if testa=nil then
Begin
writeln ('La lista e' vuota!!!!!!');
readln;
clrscr;
end
else
begin
while testa<>nil do
begin
writeln(testa^.nomejob);
testa:=testa^.succ;
end;
readln;
clrscr;
end;
end;

Procedure elenco;
var risp:char;
Begin
repeat
clrscr;
Writeln ('Cosa vuoi fare? ');
Writeln ('A: Inserisci un lavoro');
Writeln ('B: Visualizza il lavoro in ordine di esecuzione');
Writeln ('C: Elimina un lavoro');
readln(risp);
case risp of
'a' : inserisci;
'b' : visualizza;
'c' : rimuovi;
end;
Writeln ('Vuoi svolgere un altra operazione? s/n');
readln (risp);
clrscr;
until (risp='n') or (risp='N');
end;

Begin
elenco;
End.


se hai dubbi chiedi pure. come vedi ho separato la logica del programma dalla sua presentazione.. ti consiglio di fare sempre così ;)