{ File: progetto.pas } { Scopo: driver per esercizio sull'uso di grafi } program Progetto; { Esercizio di esame di Fondamenti di Informatica del 12/2/1998. Dichiarazioni di tipo, procedure ausiliarie e programma driver. } const NumAttivita = 5; type TipoAttivita = 1..NumAttivita; TipoProgetto = array [TipoAttivita, TipoAttivita] of real; { matrice di adiacenza che rappresenta il grafo associato ad un progetto } TipoArco = record sorgente, destinazione : TipoAttivita; costo : real end; { elemento della lista di archi } TipoListaArchi = ^TipoRecordLista; TipoRecordLista = record arco : TipoArco; next : TipoListaArchi end; { Inserire in questo punto la dichiarazione della procedura o funzione che risolve il punto 2. } { Inserire in questo punto la dichiarazione della procedura o funzione che risolve il punto 3. } { procedure ausiliarie usate dal programma driver } procedure LeggiProgetto (nomefile : string; var progetto: TipoProgetto); { Legge dal file di testo nomefile le informazioni riguardo alle attivita di un progetto, rappresentato tramite matrice di adiacenza. Assume che il file contenga una matrice di reali di 5x5 elementi nonnegativi. } var f : text; i, j : TipoAttivita; begin { LeggiProgetto } assign(f, nomefile); reset(f); for i := 1 to NumAttivita do for j := 1 to NumAttivita do read(f, progetto[i, j]); close(f) end; { LeggiProgetto } procedure StampaProgetto (progetto: TipoProgetto); { Stampa su video le informazioni riguardo al progetto. } var i, j : TipoAttivita; begin { StampaProgetto } for i := 1 to NumAttivita do begin for j := 1 to NumAttivita do write(progetto[i, j]:6:1); writeln end end; { StampaProgetto } procedure StampaListaArchi (lista: TipoListaArchi); { Stampa su video le informazioni riguardo agli archi in lista. } begin { StampaListaArchi } writeln('sorgente':10, 'destinazione':14, 'costo':10); while lista <> NIL do begin with lista^.arco do writeln(sorgente:10, destinazione:14, costo:10:1); lista := lista^.next end end; { StampaListaArchi } { variabili usate nel programma principale } var prog : TipoProgetto; { progetto sul quale vengono fatte le elaborazioni } archi : TipoListaArchi; { lista di archi } nomefile : string; { nome del file contenente le informazioni sul progetto } r : real; { valore reale di soglia usato nel punto 3 } isolate : boolean; { tiene conto dell'esistenza di attivita` isolate } begin { Progetto } { Lettura delle informazioni sul progetto da file. } writeln('Immetti il nome del file dal quale leggere le informazioni sul progetto!'); writeln('(N.B. Il file deve gia'' esitere)'); readln(nomefile); LeggiProgetto(nomefile, prog); { lettura da file } writeln; writeln('Matrice di adiacenza che rappresenta il progetto:'); StampaProgetto(prog); { stampa di conferma } { Verifica dell'esistenza di attivita` isolate } { Inserire in questo punto una opportuna attivazione della procedura o funzione che risolve il punto 2, - prendendo in ingresso la matrice prog che rappresenta le attivita` di un progetto - e restituendo in isolate il valore booleano calcolato. } { la seguente istruzione e` stata usata per testare il driver: } { isolate := TRUE; } { stampa del risultato dell'attivazione della procedura o funzione 2 } writeln; if isolate then writeln('Il progetto ha attivita` isolate.') else writeln('Il progetto non ha attivita` isolate.'); { Lettura del valore reale di soglia. } writeln; write('Valore di soglia (reale positivo)? '); readln(r); { Inserire in questo punto una opportuna attivazione della procedura o funzione che risolve il punto 3, - prendendo in ingresso - la matrice prog che rappresenta le attivita` di un progetto e - il valore di soglia r - e restituento in archi la lista degli archi che hanno costo maggiore del valore di soglia r. } { le seguenti istruzioni sono state usate per testare il driver: } { new(archi); with archi^ do begin arco.sorgente := 3; arco.destinazione := 2; arco.costo := 9.2; new(next) end; with archi^.next^ do begin arco.sorgente := 4; arco.destinazione := 5; arco.costo := 9.5; next := NIL end; } { stampa del risultato dell'attivazione della procedura o funzione 3 } writeln; writeln('Archi con costo maggiore di ', r:4:1, ':'); StampaListaArchi(archi) end. { Progetto }