Fondamenti di Informatica

Aeronautica, Meccanica, Elettrica, Materiali, Nucleare, Chimica,

Ambiente e Territorio (vecchio programma)

Appello del 13-7-1998

 

Esercizio 1 (18 punti)

 

Una agenzia di viaggi propone alla clientela un'offerta speciale, in cui vengono proposti a prezzi particolarmente vantaggiosi biglietti aerei da e per alcune città in determinati periodi dell'anno. L'offerta coinvolge un massimo di venti città ed é rappresentata tramite un grafo OFFERTA i cui nodi sono etichettati con il nome della città corrispondente (stringa di dodici caratteri) e gli archi (ogni arco corrisponde ad un biglietto) sono etichettati con il costo del biglietto (intero positivo) e con l'indicazione del periodo (o dei periodi) di validità dell'offerta (uno o più fra i seguenti valori: autunno, natale, pasqua, agosto, sempre. Si noti che un'offerta valida sempre é ovviamente valida anche in autunno, natale, pasqua ed agosto).

 

1. Definire i tipi di dato Pascal adeguati a risolvere i problemi di cui ai successivi punti (2) e (3).

2. Scrivere una procedura Pascal che, ricevendo come parametri di ingresso il grafo OFFERTA, un intero positivo cmax, che rappresenta il costo massimo del biglietto che il cliente e' disposto a pagare, una stringa nomcit, che rappresenta il nome della città di partenza del cliente, e un valore perscel, che rappresenta il periodo prescelto dal cliente, restituisca in uscita un file SCELTE.TXT in cui sono contenute tutte le possibili destinazioni (con specificato, per ogni destinazione, il relativo costo del biglietto) raggiungibili con un solo biglietto a partire da nomcit, con costo minore o uguale a cmax e nel periodo perscel.

3. Scrivere una procedura Pascal che, ricevendo come parametro di ingresso il grafo OFFERTA, elimini tutti i biglietti validi sempre.

 

In Figura 1 è mostrato un esempio di grafo OFFERTA.

Figura 1

Fondamenti di Informatica

Aeronautica, Meccanica, Elettrica, Materiali, Nucleare, Chimica,

Ambiente e Territorio (vecchio programma)

Appello del 13-7-1998

 

 

 

Esercizio 2 (4 punti)

Con riferimento al linguaggio Pascal, si considerino

un tipo (record) ElementoLista, con campi

- info, di tipo intero,

- prox, di tipo puntatore a ElementoLista;

una procedura ricorsiva elimina che, data una lista collegata ed un valore intero dovrebbe cancellare dalla lista stessa tutti gli elementi con campo info pari al valore specificato.

 

procedure elimina (var p: punt; valore: integer);

var aux: punt;

 

begin

if p^.info = valore then begin

aux:= p;

aux := aux^.prox;

dispose (p)

end

else elimina(p^.next, valore)

end;

 

La procedura proposta contiene degli errori. Indicarli, spiegarne l’effetto e correggerli.

 

 

Esercizio 3 (4 punti)

Descrivere la struttura ed i principali componenti di un elaboratore.

 

 

Esercizio 4 (4 punti)

Scrivere un programma Fortran che, ricevendo in input 20 coppie di NomeCittà(12 caratteri) e CostoBiglietto(intero), le memorizzi in opportune strutture dati e le ordini in ordine crescente di costo del biglietto.