{ File: bosco.pas } { Scopo: driver per esercizio sull'uso di liste collegate } program Bosco; { Esercizio di esame di Fondamenti di Informatica del 19/2/1997. Dichiarazioni di tipo, procedure ausiliarie e programma driver. } const MaxCoordX = 19; MaxCoordY = 29; type TipoCoordinataX = 0..MaxCoordX; TipoCoordinataY = 0..MaxCoordY; TipoCoordinate = record x : TipoCoordinataX; y : TipoCoordinataY end; TipoRegione = record coordinate : TipoCoordinate; { della regione } volpi, scoiattoli : 0..MAXINT { numero di tane di volpi e di scoiattoli } end; TipoListaRegioni = ^TipoRecordLista; TipoRecordLista = record regione : TipoRegione; next : TipoListaRegioni end; { Inserire in questo punto la dichiarazione della procedura o funzione che risolve il punto 1. } { Inserire in questo punto la dichiarazione della procedura o funzione che risolve il punto 2. } { procedure ausialiarie usate dal programma driver } procedure LeggiListaRegioni (nomefile : string; var lista: TipoListaRegioni); { Legge dal file di testo nomefile le informazioni riguardo al numero di tane nelle regioni del bosco. Assume che il file termini con l'ultima cifra del numero di tane di scoiattolo nell'ultima regione del bosco che e` stata censita. } var f : text; paux : TipoListaRegioni; begin { LeggiListaTane } assign(f, nomefile); reset(f); lista := NIL; while not eof(f) do begin { esegue l'inserimento in testa di un nuovo elemento } new(paux); with paux^.regione do { lettura delle informazioni per una regione } readln(f, coordinate.x, coordinate.y, volpi, scoiattoli); paux^.next := lista; lista := paux end; close(f) end; { LeggiListaRegioni } procedure StampaListaregioni (lista: TipoListaRegioni); { Stampa su video le informazioni riguardo al numero di tane in lista. } begin { StampaListaTane } writeln('X':4, 'Y':4, 'volpi':7, 'scoiattoli':12); while lista <> NIL do begin with lista^.regione do writeln(coordinate.x:4, coordinate.y:4, volpi:7, scoiattoli:12); lista := lista^.next end end; { StampaListaregioni } { variabili usate nel programma principale } var regioni, volpi_o_scoiattoli : TipoListaRegioni; nomefile : string; { nome del file contenente le informazioni sulle regioni censite del bosco } punto1, punto2 : TipoCoordinate; { coordinate dei due punti che identificano un'area di bosco } num_volpi, num_scoiattoli : integer; { numero totale di tane di volpi e di scoiattoli nell'area di bosco } scelta : char; { carattere usato per scegliere tra volpi e scoiattoli } begin { Bosco } { Lettura delle informazioni sul numero di tane da file. } writeln('Immetti il nome del file dal quale leggere le informazioni sulle regioni!'); writeln('(N.B. Il file deve gia'' esitere)'); readln(nomefile); LeggiListaRegioni(nomefile, regioni); { lettura da file } StampaListaregioni(regioni); { stampa di conferma } { Lettura delle coordinate dei punti che identificano una regione. } writeln('Immettere le coordinate del punto in alto a sinistra della regione!'); writeln('(prima coordinata tra 0 e ', MaxCoordX, ' e seconda coordinata tra 0 e ', MaxCoordY, ')'); readln(punto1.x, punto1.y); writeln('Immettere le coordinate del punto in basso a destra della regione!'); writeln('(prima coordinata tra 0 e ', MaxCoordX, ' e seconda coordinata tra 0 e ', MaxCoordY, ')'); readln(punto2.x, punto2.y); { Inserire in questo punto una opportuna attivazione della procedura o funzione che risolve il punto 1, - prendendo in ingresso la lista regioni e le due coppie di coordinate in punto1 e punto2 che identificano un'area di bosco e - restituendo il risultato nelle variabili num_volpi e num_scoiattoli } { le seguenti istruzioni sono state usate per testare il driver: } { num_volpi := 20; num_scoiattoli := 30; } { stampa del risultato dell'attivazione della procedura o funzione 1 } writeln; writeln('Nella regione (', punto1.x, ',', punto1.y, ') - (', punto2.x, ',', punto2.y, ') ci sono ', num_volpi, ' volpi e ', num_scoiattoli, ' scoiattoli'); writeln; writeln('Costruzione della lista di regioni con tane di volpi o di scoiattoli?'); write('Digitare ''V'' per volpi e ''S'' per scoiattoli! '); readln(scelta); { Inserire in questo punto una opportuna attivazione della procedura o funzione che risolve il punto 2, - prendendo in ingresso la lista regioni e il carattere scelta e - restituendo il risultato nella variabile volpi_o_scoiattoli } { la seguente istruzione e` stata usata per testare il driver: } { volpi_o_scoiattoli := regioni; } { stampa del risultato dell'attivazione della procedura o funzione 2 } writeln; if scelta = 'V' then writeln('Regioni con volpi:') else writeln('Regioni con scoiattoli:'); StampaListaTane(volpi_o_scoiattoli) end. { Bosco }