Esercizio 1 (18 punti)
Una fabbrica di componenti produce 12 componenti diversi che vengono prodotti utilizzando macchine dedicate, cioé ogni macchina produce un solo componente ed è quindi univocamente individuata dal codice di questo.
Ogni lunedì mattina la fabbrica riceve il file Ordini.dat contenente tutti gli ordinativi arrivati nella settimana precedente e prepara un piano di lavoro per le singole macchine. Al termine di ogni giornata lavorativa il piano di lavoro viene aggiornato eliminando tutti i pezzi già prodotti.
Il file Ordini.dat è un file di record e ogni record contiene le seguenti informazioni:
codice componente (4 caratteri), codice cliente (6 caratteri), numero di pezzi ordinati (intero positivo).
Il piano di lavorazione viene memorizzato in un array Lavoro di 12 componenti, ciascuna delle quali è un record contenente il codice componente, che individua anche la macchina che lo produce, e un puntatore alla lista degli ordini per quel componente.
NB: il numero di pezzi eseguiti può anche soddisfare più di un ordine o esaurire la lista degli ordini per quel componente.
Nell'esempio riportato sotto, a sinistra (a) c'è la situazione iniziale dell'array Lavoro (si mostra solo la lista della macchina M04) e a destra (b) lo stato dell'array dopo l'esecuzione della procedura con K=M04 e Q=14. In (b), il primo ordinativo in lista è stato eliminato perché totalmente soddisfatto (14>9); il secondo è stato solo modificato perché dopo aver soddisfatto il primo ordine ci sono ancora solo 5 (14-9) componenti disponibili, che bastano per soddisfare solo parzialmente l'ordine. Quindi il secondo ordine rimane in lista con numero di pezzi richiesti diminuito di 5. Il terzo ordine non è stato soddisfatto, né parzialmente né totalmente e rimane invariato in lista.
|
|
![]() |
![]() |
Esercizio 2 (4 punti)
Descrivere la rappresentazione binaria in complemento a 2 dei numeri
interi. In particolare, supponendo che gli interi siano rappresentati con
8 bit, rappresentare in tale forma il proprio giorno e mese di nascita
e calcolarne la differenza.
Esercizio 3 (4 punti)
Scrivere un sottoprogramma Fortran che, ricevendo come parametro di
ingresso una matrice quadrata di ordine N, con N pari, sostituisca gli
elementi delle colonne pari con le righe corrispondenti. Fornire inoltre
le dichiarazioni da inserire nel programma principale.
Esercizio 4 (4 punti)
Che cosa stampa questo programma quando gli vengono forniti in ingresso il vostro giorno e mese di nascita?
Mostrare anche l’evoluzione della pila dei record di attivazione della procedura P.
program data;
var
m,
n: integer;
function P (m, n: integer): integer;
begin
if
(n <= m) and (m mod n = 0) then
P := n
else
if n > m then
P := P(n, m)
else
P := P(n, m mod n);
end;
begin
readln(m, n);
if (n > 0) and (m > 0) then
writeln(P(m,
n))
else
writeln(‘Input
errato’)
end.