PRIMA PROVA SCRITTA 1-7-99
(tempo a disposizione 120 minuti)
Problema 1 (18 punti)
Una industria alimentare ha memorizzato in un file di record
l'elenco delle materie prime necessarie alla propria produzione secondo
il seguente schema:
1) Codice prodotto (5 cifre);
2) Quantità prodotto consumata nella settimana corrente (intero);
3) Scorte del prodotto in magazzino (intero).
Settimanalmente l'azienda rinnova le scorte e per le materie prime ordinate
sono memorizzate, su una lista rappresentata tramite record
e puntatori, le seguenti informazioni:
1) Codice prodotto (5 cifre);
2) Quantità ordinata per la settimana successiva (intero).
1. Scrivere le dichiarazioni dei tipi di dato Pascal da utilizzarsi per risolvere i due punti successivi;
2. Scrivere una (o più) unità Pascal che, ricevendo come parametro il nome di un file di record riepilogativo di tutte le materie prime utilizzate in fabbrica, costruisca un nuovo file (il cui nome è anche passato come parametro) inserendovi tutte e sole le materie prime le cui scorte sono inferiori a 20.
3. Scrivere una (o più) unità Pascal che ricevendo come
parametri il file riepilogativo delle materie prime e la lista delle
ordinazioni, costruisca, restituendola in uscita, una lista rappresentata
tramite record e puntatori i cui elementi contengono i codici dei prodotti
che rispettano il vincolo:
Esempio. Dato il file contenente le informazioni illustrate in Figura 1, il punto 2 richiede la costruzione di un file contenente quanto mostrato in Figura 2. Data la lista illustrata in Figura 3 e il file illustrato in Figura 1, il punto 3 richiede la costruzione della lista illustrata in Figura 4.
Codice Prodotto | Quantità Consumata | Scorte in Magazzino |
01010 | 30 | 80 |
01100 | 50 | 8 |
01011 | 48 | 10 |
Codice Prodotto | Scorte in Magazzino |
01100 | 8 |
01011 | 10 |
Figura 3 (Lista ordinazioni)
Figura 4 (Lista prodotti che rispettano il vincolo)
SECONDA PROVA SCRITTA 1-7-99
(tempo a disposizione 60 minuti)
Problema 2 (4 punti)
Dato il seguente frammento di codice Pascal:
var n,m: integer;
function calc (x:integer; y:integer): integer;
begin
if (y=1) or (y =0) then
calc := 1
else
calc := calc(x+1, y-1) + calc(x, y-2)
end;
begin
write('n : ');
read(n);
write(' m : ');
read(m);
write(calc(n,m))
end.
1. Descrivere cosa viene stampato quando da input vengono introdotti
i seguenti valori:
n: 3
m: 4
2. Mostrare la pila di attivazione e quante volte viene attivato
calc(1,1)
se la funzione viene invocata con i valori
n: 3 e m: 4;
Problema 3 (4 punti)
Si descrivano gli algoritmi di ordinamento Selection Sort e Merge Sort, si illustrino le differenze fra i due algoritmi.
Problema 4 (4 punti)
Si scriva un sottoprogramma Fortran che, dato come parametro una matrice
di n righe ed m colonne, a valori reali, costruisca il vettore di dimensione
n contenente la somma delle righe ed il vettore di dimensione m contenente
la somma delle colonne.