PROBLEMA 1
varcodice:type puntatore=^elemento; elemento= record info: integer; next: puntatore; end;
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
Ho implementato in questo modo una procedura che cancelli tutte le vocali da una lista di lettere. Esempio:codice:type puntatore=^elemento; elemento= record info: char; next: puntatore; end;
INPUT: ls->F->O->R->U->M->NIL
OUTPUT:ls->F->R->M->NIL
Ho tentato di sostituire quel poco elegante controllo dato da tutti quegli OR con qualcosa di similecodice: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;
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?


Rispondi quotando