Università di Roma ``La Sapienza''
Facoltà di Ingegneria
Corso di Fondamenti di Informatica - A.A.1999/2000
Corsi di Laurea: Aerospaziale, Chimica, Elettrica, Materiali, Meccanica, Nucleare

Appello del 13 settembre 2000 -- 1a prova scritta
tempo a disposizione: 2 ore

Problema 1 (18 punti)

In questo problema abbiamo a che fare con:

Ogni istituto fornisce alla DIS un file contenente esattamente 10 titoli (stringa di esattamente 13 caratteri), ciascuno affiancato dal relativo ascolto (intero). Le coppie <titolo,ascolto> sono distribuite una per riga e ordinate per ascolto decrescente.(Un esempio di classifica è in Fig.1).

Al termine della settimana la DIS raccoglie in un file di testo CLASSIF.TXT (stesso formato dei file contenenti previsioni) la classifica reale della settimana e calcola il compenso dovuto a ciascun istituto. (Un esempio di classifica è in Fig.2).

Un istituto viene pagato $1000 per ogni MP3 del quale ha indovinato la posizione nella classifica reale. Ad esempio, facendo riferimento alla classifica reale di Fig.2, l'istituto che ha emesso la previsione di Fig.1 verrà pagato $3000 perché tre MP3 hanno la classifica prevista (primo, ottavo, nono).

SensiUnivoci  2342   SensiUnivoci  3523  PREVIS9.txt Demo-MP3-SpA LoSapevo-Srl, 10000
ComuneSentire 1999   BotteDaOrbi   3445  PREVIS3.txt Soc.Prev. $\downarrow$
Accordo       1234   Diverbio      2987  PREVIS2.txt VELODIMONOI-SpA Music-Inc., 3000
SentoBene     1001   Imprevedibile 2787  PREVIS1.txt Music-Inc. $\downarrow$
Diverbio      987    SpaccoTutto   2654  PREVIS6.txt LoSapevo-Srl VELODIMONOI-SpA, 0
Litigio       777    ComuneSentire 1999  $\downarrow$
SpaccoTutto   654    NonCapisco    1001  Soc.Prev., 5000
MeNeVado      353    MeNeVado      953   $\downarrow$
Torno         299    Torno         749   Demo-MP3-SpA, 1000
Vedremo       298    SentoBene     298  
FIG. 1 FIG. 2 CLASSIF.TXT FIG. 3 RICEVUT.TXT FIG. 4: lista

In particolare, la DIS raccoglie in un file di testo RICEVUT.TXT i nomi dei file con previsioni che ha ricevuto, ciascuno affiancato al nome dell'istituto che lo ha fornito (VEDI Fig.3: nell'esempio il file PREVIS9.TXT contiene le previsioni emesse dall'istituto Demo-MP3-SpA; il file PREVIS3.TXT contiene le previsioni emesse dall'istituto Soc.Prev., etc ...).

Si richiede di risolvere i seguenti punti:

  1. Scrivere le dichiarazioni dei tipi di dato Pascal da utilizzarsi per risolvere i punti successivi.
  2. Scrivere una unità di programma Pascal che, ricevendo il nome di un file di previsioni (come in Fig.1) e il nome di un file classifica (come in Fig.2), restituisca l'importo da pagare per la previsione.
  3. Scrivere una unità di programma Pascal che, ricevendo un file del genere di RICEVUT.TXT (cioè contenente una sequenza di coppie <nome_file_di_previsione, istituto_fornitore>) e il nome di un file classifica, restituisca opportunamente una lista, rappresentata mediante record e puntatori, contenente gli istituti e i rispettivi compensi.

    (In Fig.4 c'e' un esempio di tale lista, ottenuta a partire dal file classifica di Fig.2 e dal file RICEVUT.TXT di Fig.3. Ad esempio, calcolando il compenso dovuto per la previsione contenuta in PREVIS3.TXT si ottiene $5000).

    (Facoltativamente, costruire anche un file di testo in cui sia stato scaricato il contenuto della lista).


Università di Roma ``La Sapienza''
Facoltà di Ingegneria
Corso di Fondamenti di Informatica - A.A.1999/2000
Corsi di Laurea: Aerospaziale, Chimica, Elettrica, Materiali, Meccanica, Nucleare

Appello del 13 settembre 2000 -- 2a prova scritta
tempo a disposizione: 1 ora

Problema 2 (4 punti)

Illustrare almeno uno dei principali algoritmi di visita di grafi, mostrandone gli effetti su un grafo di esempio.

Problema 3 (4 punti)

Si consideri il seguente programma Pascal, alla cui esecuzione si immagini di fornire come input le ultime tre cifre non nulle (A, B, C) del proprio numero di matricola.

program Uno ( input, output );
var x : integer;

  procedure Due ( var z : integer );
  var y : integer;
  begin
    readln ( y );   { legge C }
    z := y+10;                           
    writeln ( x:4, y:4, z:4 )            
  end; { Due }                           

  procedure Tre ( w : integer );         
  var x : integer;                       
  begin                                  
    readln ( x );    { legge B }
    Due ( w );                           
    writeln ( x:4, w:4 )                 
  end; { Tre }                           

begin { Uno }                            
  readln ( x );    { legge A }
  Tre ( x );                             
  writeln ( x:4 )
end.

Problema 4 (4 punti)

Data una matrice quadrata di interi M, l'elemento generico [i,j] si dice opposto a quello [j,i]. Se tutti gli elementi opposti di M sono uguali, la matrice si definisce speculare. Scrivere una unità di programma Fortran che, data una matrice quadrata M, restituisca opportunamente il valore di verità dell'affermazione ``M è speculare''.

Scrivere inoltre un esempio di main program contenente un'invocazione dell'unità progettata.

Ad esempio, $M = \left[
\begin{array}{ccc}
7 & \textbf{9} & \textbf{8}\\
\textbf{1} & 4 & \textbf{6}\\
\textbf{8} &\textbf{2} & 5
\end{array} \right]$ non è speculare (9<>1 e 6<>2).