View Single Post
Old 23-01-2008, 10:23   #4
k0nt3
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 7263
non ho un compilatore pascal installato, quindi non so nemmeno se compila comunque ho provato a dare una sistemata al tuo codice
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ė
k0nt3 č offline   Rispondi citando il messaggio o parte di esso