PROBLEMA 1
codice:
type
puntatore=^elemento;
elemento= record
info: integer;
next: puntatore;
end;
var
lis: puntatore; //puntatore alla testa della lista
Salve a tutti, sto lavorando con le liste, ho qualche difficoltà ad implementare una procedura che cancelli il massimo da una lista. Ipotizziamo che la lista sia lis->7->2->15->8->NIL
Io avevo pensato di inizializzare fuori dalla procedura:
massimo:= -MAXINT-1;
La procedura pensavo potesse funzionare così: Confronto il primo elemento della lista con il massimo (lis^.info > massimo), nella figura significa che 7 è sicuramente maggiore di -MAXINT-1, dovrei memorizzare da qualche parte che adesso il nuovo max è 7 e passare avanti scandendo la lista, il nuovo elemento è 2, minore dell'attuale max (quindi non si fa nulla e si passa avanti), adesso il nuovo elemento ha il campo info etichettato con 15 che è maggiore di 7 (dunque il nuovo max è 15)...Andiamo avanti fino all'ultimo elemento (cioè 8<15).
Alla fine la nuova lista dovrebbe essere lis->7->2->8->NIL. Abbiamo eliminato il max. Il problema è implementare questa procedura in pascal ;) Dovrei utilizzare 2 puntatori, uno che mi scandisca la lista ed uno che mi punti al max attuale e che si aggiorni ogni volta che scoprimo un nuovo max?
Mi date una mano?
PROBLEMA 2
codice:
type
puntatore=^elemento;
elemento= record
info: char;
next: puntatore;
end;
Ho implementato in questo modo una procedura che cancelli tutte le vocali da una lista di lettere. Esempio:
INPUT: ls->F->O->R->U->M->NIL
OUTPUT:ls->F->R->M->NIL
codice:
Procedure CancellaTutteVocali(var p_testa:puntatore);
var
paux: puntatore;
warning:string;
begin
if p_testa=NIL then warning:='Lista vuota'
else
if p_testa<>NIL then
if (p_testa^.info='a')OR(p_testa^.info='e')OR(p_testa^.info='i')OR
(p_testa^.info='o')OR(p_testa^.info='u') then
begin
paux:=p_testa;
p_testa:=p_testa^.next;
dispose(paux);
CancellaTutteVocali(p_testa);
end
else CancellaTutteVocali(p_testa^.next);
end;
Ho tentato di sostituire quel poco elegante controllo dato da tutti quegli OR con qualcosa di simile
if p_testa^.info in [a,e,i,o,u] then ...
dove volevo fare
type
vocali= set of(a,e,i,o,u)
Mi viene dato l'errore di tipi incompatibili (char e set). Come potrei eliminare quella serie di OR, è mettere qualcosa di più compatto ed elegante?