ricordarsi di prenotare gli scritti note sul progetto la frase chiave deve poter contenere sia spazi...
TRANSCRIPT
![Page 1: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/1.jpg)
IL CORSO TERMINA IL 19 GENNAIO
PRIMA PROVA SCRITTA IL 23 GENNAIO ore 9PRIMA PROVA ORALE IL 2 FEBBRAIO ore 9
SECONDA PROVA SCRITTA IL 19 FEBBRAIO ore 15SECONDA PROVA ORALE IL 2 MARZO ore 9
PER SOSTENERE L’ESAME BISOGNA AVERE CONSEGUITOUNA VOTAZIONE TRA A-D
SIA PER LAPROVA SCRITTA CHE PER IL PROGETTO
L’ELABORATO SU CALCOLATORE (Codifica) VACONSEGNATO, SU FLOPPY DISK, AL PIU’ TARDI 10
GIORNI PRIMA DELL’ESAME ORALE
![Page 2: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/2.jpg)
RICORDARSI DI PRENOTARE
GLI SCRITTI
![Page 3: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/3.jpg)
NOTE SUL PROGETTO
• LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE.
• QUANDO SI MOSTRA IL CONTENUTO DI UN FILE, PREVEDERE OLTRE AL RETURN PER AVANZARE ANCHE UN TASTO PER TERMINARE LA LETTURA.
• METTERE I CONTROLLI SUGLI INPUT DEI DATI
![Page 4: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/4.jpg)
![Page 5: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/5.jpg)
Problema:
Supponiamo si vogliano scrivere delle procedure per la gestione del Centro Storico di una città.Quali sono i dati da usare e come sono legati fra loro?
Quartiere
Edificio
Piani
Nuclei familiari
…………..
![Page 6: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/6.jpg)
RECORD
Record: una struttura in cui sono contenuti dati di tipo diverso,interi, stringhe, reali.
Si può accedere ai dati di un record facendo riferimento al nome del dato.
![Page 7: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/7.jpg)
Definizione di RECORD
TYPE NomeRecord = RECORD
Campo1: integer,………..CampoN: real
END;
= Lista dei campi
RECORDidentificatore END
AnagraficaRecord = RECORDCognome,Nome : Stringa20
END;
![Page 8: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/8.jpg)
ESEMPIO
Studente
Anagrafe Nascita Matricola
Cognome Nome Giorno Mese Anno
AnnoCorso Risultati Media
Studente
Anagrafe Nascita Matricola
Cognome Nome AnnoMeseGiorno
AnnoCorsoRisultati Media
Rossi Ugo 3 5 1972 480/8796
Bianchi Carlo 12 2 1971 480/8746
II 25 23 29 28
I 30 25 18 27
![Page 9: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/9.jpg)
StudenteRecord = RECORD Anagrafe:AnagraficaRecord;
Nascita:DataRecord; Matricola:StringaNome; AnnoCorso:StringaNome; Risultati:RisultatiArray; Media:real;
END;
Studente
Anagrafe Nascita Matricola
Cognome Nome AnnoMeseGiorno
AnnoCorsoRisultati Media
TYPEStringa20 = STRING[20]RisultatiArray=ARRAY[1..TotaleProve] OF integer;
AnagraficaRecord = RECORDCognome,Nome : Stringa20END;
DataRecord = RECORDGiorno,Mese,Anno : integerEND;
![Page 10: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/10.jpg)
TYPEStringa20 = STRING[20]RisultatiArray=ARRAY[1..TotaleProve] OF integer;
AnagraficaRecord = RECORDCognome,Nome : Stringa20END;
DataRecord = RECORDGiorno,Mese,Anno : integerEND;
StudenteRecord = RECORD Anagrafe:AnagraficaRecord;
Nascita:DataRecord; Matricola:StringaNome; AnnoCorso:StringaNome; Risultati:RisultatiArray; Media:real;
END;
VARCompleanno:DataRecord;DatiStudente:StudenteRecord;
UnoStudente:AnagraficaRecord;
![Page 11: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/11.jpg)
E’ possibile trattare i dati usando i nome dei campi.
writeln(‘Lo studente ‘, Studente.Anagrafe.Cognome,’ e’’ nato il ‘,Studente.Nascita.Giorno:1, Studente.Nascita.Mese:1,Studente.Nascita.Anno:1)
Studente
Anagrafe Nascita Matricola
Cognome Nome AnnoMeseGiorno
AnnoCorsoRisultati Media
Rossi Ugo 3 5 1972 480/8796
Bianchi Carlo 12 2 1971 480/8746
II° 25 23 29 28
I° 30 25 18 27
![Page 12: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/12.jpg)
5Rossi Carlo 30 11 1968480/564 II 30 28 18 25Rossi Lucio 12 10 1969050/884 I 18 25 22 21Bianchi Ugo 5 4 1965050/741 I 18 18 18 18Verdi Carlo 14 12 1970480/88 II 30 29 28 30Esposito Franco 2 8 1969050/524 I 25 27 29 30
INPUT
![Page 13: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/13.jpg)
REPEAT writeln(‘ Introduci la data ‘); readln(DataOdierna.Giorno, DataOdierna.Mese, DataOdierna.Anno)UNTIL DataValida(DataOdierna);
FUNCTION DataValida(Data:DataRecord):boolean;BEGIN
DataValida:=(Data.Mese IN [1..12]) AND (Data.Giorno IN [1..31])END;
DataRecord = RECORDGiorno,Mese,Anno : integerEND;
VAR DataOdierna : DataRecord;
USO DELLE VARIABILI RECORD
![Page 14: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/14.jpg)
ProblemaAssegnato un file del tipo prima descritto, scrivere una procedura che mostri i dati di tutti gli studenti.
STRUTTURA DATI
AnagraficaRecord = RECORDCognome,Nome : Stringa20END;
DatataRecord = RECORDGiorno,Mese,Anno : integerEND;
StudenteRecord = RECORD Anagrafe:AnagraficaRecord;
Nascita:DataRecord; Matricola:StringaNome; AnnoCorso:StringaNome; Risultati:RisultatiArray; Media:real;
END;
Pseudo Codice MainApri il file dati in letturaCarica i dati e mostrali
Pseudo Codice Carica datiPer ogni studente Carica record studente
Pseudo Codice CaricaRecordStudenteLeggi Cognome Leggi NomeLeggi Data NascitaLeggi Matricola, AnnoCorsoLeggi Risultati
![Page 15: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/15.jpg)
RAPPRESENTAZIONE GRAFICA
Apri il file dati in lettura
Stud
enti
File
StudentiFile
Carica Dati
Iscr
itti
Costruisci Record Studenti
Leggi Cognome
Leggi Nome
Leggi Giorno
Leggi Mese
Leggi Anno
Leggi Matr
Leggi Corso
Leggi Risultati
StudentiFile
Scrivi
Cognome Nome
GiornoMese
Anno
Matr Corso Risultati
CognomeNomeGiornoMeseAnnoMatrCorsoRisultati
![Page 16: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/16.jpg)
PROGRAM Txtrecord(output,Studenti);
CONSTSentinella=' ';LunMax=40;TotaleProve=4;MassimoStud=150;
VARIscritti,IndiceArray:IndiceTipo;StudentiFile:text;UnoStudente:StudenteRecord;
TYPEStringaNome=STRING[LunMax];RisultatiArray=ARRAY[1..TotaleProve] OF integer;AnagraficaRecord=RECORD Cognome, Nome:StringaNome; END;NascitaRecord=RECORD Giorno, Mese, Anno:integer; END;StudenteRecord=RECORD Anagrafe:AnagraficaRecord; Nascita:NascitaRecord; Matricola:StringaNome; AnnoCorso:StringaNome; Risultati:RisultatiArray; Media:real; END;IndiceTipo=0..MassimoStud;
![Page 17: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/17.jpg)
MAIN
BEGIN
assign(StudentiFile,'C:\TP\ESEMPI\moda\cap12\STUDREC.TXT');
reset(StudentiFile);
CaricaDati(Iscritti,UnoStudente,StudentiFile);
readln
END.
![Page 18: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/18.jpg)
PROCEDURE CaricaDati(VAR Iscritti:IndiceTipo;
VAR UnoStudente:StudenteRecord; VAR StudentiFile:text);
VAR
Indice:IndiceTipo;
BEGIN
readln(StudentiFile,Iscritti);
FOR Indice:=1 TO Iscritti DO
CostruisciRecordStudente(UnoStudente,StudentiFile)
END;
![Page 19: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/19.jpg)
PROCEDURE CostruisciRecordStudente(VAR UnoStudente:StudenteRecord; VAR StudentiFile:text);
VARNumeroProva:integer; BEGIN
LeggiParola(' ',Unostudente.Anagrafe.Cognome, StudentiFile);LeggiParola(' ', Unostudente.Anagrafe.Nome, StudentiFile);read(StudentiFile,Unostudente.Nascita.Giorno);read(StudentiFile,Unostudente.Nascita.Mese);read(StudentiFile,Unostudente.Nascita.Anno);readln(StudentiFile);LeggiParola(' ',Unostudente.Matricola, StudentiFile);LeggiParola(' ',Unostudente.AnnoCorso, StudentiFile);FOR NumeroProva:=1 TO TotaleProve DO
read(StudentiFile,Unostudente.Risultati[NumeroProva]);
readln(StudentiFile); writeln('Lo studente ',Unostudente.Anagrafe.Cognome,' ', Unostudente.Anagrafe.Nome,' Matr. ',
Unostudente.Matricola); writeln(' Nato il ',Unostudente.Nascita.Giorno,'/', Unostudente.Nascita.Mese,'/',
Unostudente.Nascita.Anno,' e'' iscritto al ', Unostudente.AnnoCorso,'ø anno di corso'); END; writelnEND;
![Page 20: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/20.jpg)
PROCEDURE LeggiParola(Sentinella:char;VAR Parola:StringaNome;
VAR Studenti:text);
VAR
Carattere:char;
BEGIN
Parola:='';
read(Studenti,Carattere);
WHILE (Carattere<>Sentinella) DO
BEGIN
Parola:=Parola+Carattere;
read(Studenti,Carattere);
END
END;
![Page 21: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/21.jpg)
L’ISTRUZIONE WITH
Seleziona diversi campi di un record usando solo un riferimento.
variabileWITH DO istruzioni
.
BEGIN WITH Nome1,Nome2,… DO
BEGIN………………...
END;
![Page 22: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/22.jpg)
PROCEDURE CostruisciRecordStudente(UnoStudente:StudenteRecord;
VAR StudentiFile:text);
VAR
NumeroProva:integer;
BEGIN
WITH UnoStudente DO
BEGIN
LeggiParola(' ',Matricola, StudentiFile);
LeggiParola(' ',AnnoCorso, StudentiFile);
END
END;
USO DI WITH
Studente
Anagrafe Nascita Matricola
Cognome Nome AnnoMeseGiorno
AnnoCorsoRisultati Media
![Page 23: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/23.jpg)
Studente
Anagrafe Nascita Matricola
Cognome Nome AnnoMeseGiorno
AnnoCorsoRisultati Media
WITH ANNIDATI
PROCEDURE CostruisciRecordStudente(UnoStudente:StudenteRecord; VAR StudentiFile:text);
VARNumeroProva:integer;BEGIN WITH UnoStudente DO WITH Anagrafe DO BEGIN LeggiParola(' ',Cognome, StudentiFile); LeggiParola(' ',Nome, StudentiFile); ENDEND;
![Page 24: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/24.jpg)
PROCEDURE CostruisciRecordStudente(UnoStudente:StudenteRecord; VAR StudentiFile:text);
VARNumeroProva:integer;BEGIN WITH UnoStudente, Anagrafe, Nascita DO BEGIN LeggiParola(' ',Cognome, StudentiFile); LeggiParola(' ',Nome, StudentiFile); read(StudentiFile,Giorno); read(StudentiFile,Mese); read(StudentiFile,Anno); readln(StudentiFile); LeggiParola(' ',Matricola, StudentiFile); LeggiParola(' ',AnnoCorso, StudentiFile); ENDEND;
Studente
Anagrafe Nascita Matricola
Cognome Nome AnnoMeseGiorno
AnnoCorsoRisultati Media
![Page 25: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/25.jpg)
ATTENZIONE l’uso del WITH produce codici meno leggibili (es. non è sempre chiaro se una variabile è il nome di un campoo una variabile globale) e quindi aumenta la probabilità di errore.
PROCEDURE CostruisciRecordStudente(UnoStudente:StudenteRecord; VAR StudentiFile:text);
VARNumeroProva:integer;BEGIN WITH UnoStudente, Anagrafe, Nascita DO BEGIN LeggiParola(' ',Cognome, StudentiFile); LeggiParola(' ',Nome, StudentiFile); read(StudentiFile,Giorno); read(StudentiFile,Mese); read(StudentiFile,Anno); readln(StudentiFile); LeggiParola(' ',Matricola, StudentiFile); LeggiParola(' ',AnnoCorso, StudentiFile);ENDEND;
![Page 26: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/26.jpg)
ARRAY Corso
Anagrafica Nascita Matricola
Cognome Nome AnnoMeseGiorno
AnnoCorsoRisultati Media
Anagrafica Nascita Matricola
Cognome Nome AnnoMeseGiorno
AnnoCorsoRisultati Media
Anagrafica Nascita Matricola
Cognome Nome AnnoMeseGiorno
AnnoCorsoRisultati Media
Anagrafica Nascita Matricola
Cognome Nome AnnoMeseGiorno
AnnoCorsoRisultati Media
1
2
3
4
ARRAY Risultati
1 2 3 4
Rossi Carlo 30 11 1968
480/564 II 30 28 18 25
![Page 27: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/27.jpg)
5Rossi Carlo 30 11 1968480/564 II 30 28 18 25Rossi Lucio 12 10 1969050/884 I 18 25 22 21Bianchi Ugo 5 4 1965050/741 I 18 18 18 18Verdi Carlo 14 12 1970480/88 II 30 29 28 30Esposito Franco 2 8 1969050/524 I 25 27 29 30
INPUT
![Page 28: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/28.jpg)
PROBLEMA
Dato il file testo STUDREC.TXT
Scrivere un programma che:a- elenca gli studenti con i loro datib- se richiesto mostra la media di un preassegnato studentec- se richiesto mostra lo studente con la media migliore
ALGORITMO
•Costruisci un array (Corso) con i dati contenuti nel file•Stampa i dati a partire dall’array (Corso)•Chiedi cosa si desidera e esegui:
•CercaMediaStudente•CercaMigliorStudente•Cerca gli studenti con media superiore a un prefissato valore
5Rossi Carlo 30 11 1968480/564 II 30 28 18 25Rossi Lucio 12 10 1969050/884 I 18 25 22 21Bianchi Ugo 5 4 1965050/741 I 18 18 18 18Verdi Carlo 14 12 1970480/88 II 30 29 28 30Esposito Franco 2 8 1969050/524 I 25 27 29 30
![Page 29: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/29.jpg)
5Rossi Carlo 30 11 1968480/564 II 30 28 18 25Rossi Lucio 12 10 1969050/884 I 18 25 22 21Bianchi Ugo 5 4 1965050/741 I 18 18 18 18Verdi Carlo 14 12 1970480/88 II 30 29 28 30Esposito Franco 2 8 1969050/524 I 25 27 29 30
Lo studente Rossi Carlo Matr. 480/564 Nato il 30/11/1968 iscritto al II° anno di corso ha una media di 25.25
Lo studente Rossi Lucio Matr. 050/884 Nato il 12/10/1969 iscritto al I° anno di corso ha una media di 21.50
Lo studente Bianchi Ugo Matr. 050/741 Nato il 5/4/1965 iscritto al I° anno di corso ha una media di 18.00
Lo studente Verdi Carlo Matr. 480/88 Nato il 14/12/1970 iscritto al II° anno di corso ha una media di 29.25
Lo studente Esposito Franco Matr. 050/524 Nato il 2/8/1969 iscritto al I° anno di corso ha una media di 27.75
INPUT
OUTPUT
![Page 30: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/30.jpg)
RAPPRESENTAZIONE GRAFICA
Apri il file dati in lettura
Stu
dent
iFil
e
Leggi ArrayRisultati
Stu
dent
iFil
e
Ris
ulta
ti
Media
Ris
ulta
ti
Med
ia
Scrivi
Cognome NomeGiorno Mese AnnoMatrAnnoCorsoMediaRisultati
StudentiFile
CostruisciCorso
CorsoIscritti
CercaMediaStudente
CorsoIscritti
CercaMigliore
CorsoIscritti
Leggi Dati
StudentiFile
CognomeNomeGiornoMeseAnnoMatrAnnoCorso
Stu
dent
iFil
e
UnoStudente
Costruisci Record Studenti
StudentiFile Corso[I]
IndiceMigliore
CorsoIscritti
IndiceMigliore
IndiceStudente
CorsoNomeCercato Indice
Array
CercaNome
Anagrafe1 Anagrafe2
booleanCercaInsieme
CorsoIscritti
![Page 31: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/31.jpg)
PROGRAM Txtrecord(output,Studenti);CONSTSentinella=' ';LunMax=40;TotaleProve=3;MassimoStud=250;TYPEStringaNome=STRING[LunMax];RisultatiArray=ARRAY[1..TotaleProve] OF integer;AnagraficaRecord=RECORD Cognome, Nome:StringaNome; END;NascitaRecord=RECORD Giorno, Mese, Anno:integer; END;StudenteRecord=RECORD Anagrafe:AnagraficaRecord; Nascita:NascitaRecord; Matricola:StringaNome; AnnoCorso:StringaNome; Risultati:RisultatiArray; Media:real; END;IndiceTipo=0..MassimoStud;CorsoArray=ARRAY[IndiceTipo] OF StudenteRecord;
![Page 32: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/32.jpg)
MAIN
BEGIN
assign(StudentiFile,'C:\TP\ESEMPI\moda\cap12\STUD2001.TXT');
reset(StudentiFile);
CostruisciCorso(Iscritti,Corso,StudentiFile);
writeln('1 - Mostra la media di un dato studente ');
writeln('2 - Mostra il miglior studente del corso ');
writeln('3 - Mostra tutti gli studenti che hanno una media superiore a un dato valore');
readln(Scelta);
CASE Scelta OF
1:CercaMediaStudente(Iscritti,Corso);
2:CercaMigliore(Corso,Iscritti);
3:CercaInsieme(Corso,Iscritti)
END;
readln
END.
![Page 33: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/33.jpg)
CostruisciCorso
• Inserisci nell’array monodimensionale Corso i record studenti mediante la procedura CostruisciRecordStudente
CostruisciRecordStudente
•Leggi l’anagrafica con la procedura LeggiParola
•Leggi Giorno, Mese, Anno
•Leggi Matricola
•Leggi AnnoCorso
•Leggi ArrayRisultati
•Fai la media delle prove
•Mostra i dati dello studente
![Page 34: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/34.jpg)
PROCEDURE CostruisciCorso(VAR Iscritti:IndiceTipo;VAR Corso:CorsoArray;
VAR StudentiFile:text);
VAR
Indice:IndiceTipo;
BEGIN
readln(StudentiFile,Iscritti);
FOR Indice:=1 TO Iscritti DO
CostruisciRecordStudente(Corso[Indice],StudentiFile)
END;
![Page 35: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/35.jpg)
PROCEDURE CostruisciRecordStudente(UnoStudente:StudenteRecord; VAR StudentiFile:text);
VARNumeroProva:integer;BEGIN WITH UnoStudente, Anagrafe, Nascita DO BEGIN LeggiParola(' ',Cognome, StudentiFile); LeggiParola(' ',Nome, StudentiFile); read(StudentiFile,Giorno); read(StudentiFile,Mese); read(StudentiFile,Anno); readln(StudentiFile); LeggiParola(' ',Matricola, StudentiFile); LeggiParola(' ',AnnoCorso, StudentiFile); FOR NumeroProva:=1 TO TotaleProve DO read(StudentiFile,Risultati[NumeroProva]); readln(StudentiFile); Media:=MediaProve(Risultati); writeln('Lo studente ',Cognome,' ',Nome,' Matr. ',Matricola); writeln(' Nato il ',Giorno,'/',Mese,'/',Anno,' iscritto al ', AnnoCorso,'ø anno di corso',' ha una media di ',Media:3:2); writeln ENDEND;
![Page 36: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/36.jpg)
FUNCTION MediaProve(Risultati:RisultatiArray):real;
VAR
NumProva,
Somma:integer;
Media:real;
BEGIN
Somma:=0;
FOR NumProva:=1 TO TotaleProve DO
Somma:=Somma+Risultati[NumProva];
MediaProve:=Somma/TotaleProve
END;
![Page 37: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/37.jpg)
PROCEDURE LeggiParola(Sentinella:char;VAR Parola:StringaNome; VAR Studenti:text);
VAR
Carattere:char;
BEGIN
Parola:='';
read(Studenti,Carattere);
WHILE (Carattere<>Sentinella) DO
BEGIN
Parola:=Parola+Carattere;
read(Studenti,Carattere);
END
END;
![Page 38: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/38.jpg)
CercaMediaStudente
•Leggi Nome e Cognome dello studente
•Usando l’array Corso cerca il record con i suoi dati
•Stampa la media richiesta ricavata dall’array Corso
![Page 39: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/39.jpg)
PROCEDURE CercaMediaStudente(VAR Iscritti:IndiceTipo;VAR Corso:CorsoArray); VAR NomeCercato:AnagraficaRecord; BEGIN writeln; writeln('Cerca lo studente: Cognome '); readln(NomeCercato.Cognome); writeln('Nome '); readln(NomeCercato.Nome); IndiceArray:=IndiceStudente(Iscritti,Corso,NomeCercato);IF IndiceArray<>0 THEN writeln('Lo studente ',Corso[IndiceArray].Anagrafe.Nome,' ', Corso[IndiceArray].Anagrafe.Cognome,' ha una media di ', Corso[IndiceArray].Media:3:2)END;
![Page 40: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/40.jpg)
FUNCTION CercaNome(Anagrafe1,Anagrafe2:AnagraficaRecord):boolean;
BEGIN
CercaNome:=(Anagrafe1.Cognome=Anagrafe2.Cognome) AND
(Anagrafe1.Nome=Anagrafe2.Nome)
END;
FUNCTION IndiceStudente(VAR Iscritti:IndiceTipo; VAR Corso:CorsoArray;NomeCercato:AnagraficaRecord):IndiceTipo;VARSonda:IndiceTipo;BEGINCorso[0].Anagrafe:=NomeCercato;Sonda:=Iscritti; WHILE NOT CercaNome(Corso[Sonda].Anagrafe,NomeCercato) DO Sonda:=Sonda-1;
CercaStudente:=SondaEND;
![Page 41: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/41.jpg)
CercaMigliorStudente
•Usando l’array Corso cerca il record dello studente con laMediaMigliore
•Stampa i dati dello studente trovato
MediaMigliore
•Fai una ricerca lineare sull’array Corso nel campo Media e memorizza l’indice per il quale la media è massima.
![Page 42: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/42.jpg)
FUNCTION MediaMigliore(VAR Corso:CorsoArray;VAR Iscritti:IndiceTipo):IndiceTipo;VAR TempMigliore,Indice:IndiceTipo; BEGIN TempMigliore:=1; FOR Indice:=2 TO Iscritti DO IF Corso[Indice].Media > Corso[TempMigliore].Media THEN TempMigliore:=Indice; MediaMigliore:=TempMigliore END;
PROCEDURE CercaMigliore(VAR Corso:CorsoArray;VAR Iscritti:IndiceTipo);VAR IndiceMax:IndiceTipo; BEGIN IndiceMax:=MediaMigliore(Corso,Iscritti); WITH Corso[IndiceMax],Anagrafe DO BEGIN write(Nome,' ',Cognome); writeln(' e'' il migliore del corso con una media di ',
Media:3:2) END END;
![Page 43: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/43.jpg)
PROCEDURE CercaInsieme(VAR Corso:CorsoArray; Iscritti:IndiceTipo);
VAR
Indice:integer;
Range:real;
BEGIN
write('La media minima richiesta e'': ');
readln(Range);
FOR Indice:=1 TO Iscritti DO
BEGIN
WITH Corso[Indice],Anagrafe DO
IF Media > Range THEN
BEGIN
write(Nome,' ',Cognome);
writeln(' rientra nell''intervallo con una media
di ',Media:3:2)
END;
END
END;
![Page 44: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/44.jpg)
PROGRAM Txtrecord(output,Studenti);…………………………………………………………….VARCorso:CorsoArray;Iscritti,IndiceArray:IndiceTipo;StudentiFile:text;UnoStudente:StudenteRecord;NomeCercato:AnagraficaRecord;Scelta:integer;Range:real;FUNCTION MediaProve(Risultati:RisultatiArray):real;PROCEDURE LeggiParola(Sentinella:char;VAR Parola:StringaNome; VAR Studenti:text);PROCEDURE CostruisciRecordStudente(VAR UnoStudente:StudenteRecord; VAR
StudentiFile:text);PROCEDURE CostruisciCorso(VAR Iscritti:IndiceTipo;VAR Corso:CorsoArray;
VAR StudentiFile:text);FUNCTION CercaNome(Anagrafe1,Anagrafe2:AnagraficaRecord):boolean;FUNCTION IndiceStudente(VAR Iscritti:IndiceTipo;
VAR Corso:CorsoArray;NomeCercato:AnagraficaRecord):IndiceTipo;PROCEDURE CercaMediaStudente(VAR Iscritti:IndiceTipo;
VAR Corso:CorsoArray);FUNCTION MediaMigliore(VAR Corso:CorsoArray;
Iscritti:IndiceTipo):IndiceTipo;PROCEDURE CercaMigliore(VAR Corso:CorsoArray; Iscritti:IndiceTipo);PROCEDURE CercaInsieme(VAR Corso:CorsoArray; Iscritti:IndiceTipo);
![Page 45: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/45.jpg)
OSSERVAZIONI
Usare l’algoritmo giusto per la variabile giusta.
Es. Se si vuole fare una ricerca dello studente con la media più alta, l’algoritmo deve prevedere di trattare dati reali.
Per accedere ai dati di un record messo in un array basta conoscere l’indice dell’array in cui il recor è contenuto.
![Page 46: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/46.jpg)
SUGGERIMENTI
Scegliere la struttura dei dati in funzione del tipo di dati da gestire.
• per una lista di oggetti omogenei (che hanno cioè lo stesso significato es. i voti di uno studente) si può scegliere un array monodimensionale.
• per una lista di oggetti omogenei ma caratterizzati da proprietà diverse si possono usare array multidimensionali (es. pezzi degli scacchi e coordinate X,Y sulla scacchiera).
![Page 47: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/47.jpg)
• per oggetti diversi tra loro ma legati da una struttura unica (es. dati anagrafici: nome, cognome, età,..) si possono usare array di record.
Si ricordi l’esempio in lezione 11: Si vuole costruire un array in cui ogni colonna rappresenta un piccolopaese, massimo mille abitanti, e per ogni paese vogliamo registrare ilnome degli abitanti.L’array quindi è di tipo stringa per cui nelle caselle vuote ci sarà lastringa nulla ‘’.CONSTMassimoAbitanti=1000;TYPETipoStringa=STRING[50];SubrangeAbitanti=1.. MassimoAbitanti;NomePaesi=(Nessuno, Acerra, Afragola, Capri, Casoria,
Ischia, Procida);NomeArray: ARRAY[SubrangeAbitanti,NomePaesi] OF TipoStringa;VAR Abitanti: NomeArray;
![Page 48: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/48.jpg)
Acerra Afragola Capri Ischia Procida
1
2
515
841
1000
.
...
.
...
.
.
.
...
.
...
.
.
.
.
.
.
Esposito A.Bianchi G.
Rossi A. Russo T.
Annibale T.Cesare G.
Tirchio F.
Ricco S. Orofino T.
Esca T.
Argento T.Diamante A.Orazio P.
Romeo A.
Rendina A.
![Page 49: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/49.jpg)
CittadiniPaesi1000Abitanti
Città Anagrafe
Cognome Nome
Struttura array di record del tipo
![Page 50: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/50.jpg)
Indice:=3;WITH Corso DOBEGIN ………………… END
SYNTAX ERRORCorso[Indice]
IF Corso[Indice].Anagrafe=UnUomo.AnagrafeTHENBEGIN ……………………. END
SYNTAX ERROR
Non è possibile fare un FOR sui campi di un record:FOR I:=Anagrafe TO Età DO …………………
![Page 51: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/51.jpg)
WITH Corso[Indice].Anagrafe DOBEGIN ………………… END
Si selezionano solo i campi Nome e Cognome
WITH Corso[Indice],Anagrafe DOBEGIN ………………… END
Si selezionano i campi Nome e Cognome e tuttiI campi di Corso[I]
![Page 52: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/52.jpg)
WITH Corso[Indice],Anagrafe DOFOR J:=1 TO Iscritti DOWriteln(Cognome, Nome)
ERRORE !!!!!!!!!!!
FOR J:=1 TO Iscritti DOWITH Corso[J],Anagrafe DOWriteln(Cognome, Nome)
![Page 53: RICORDARSI DI PRENOTARE GLI SCRITTI NOTE SUL PROGETTO LA FRASE CHIAVE DEVE POTER CONTENERE SIA SPAZI CHE LETTERE MAIUSCOLE. QUANDO SI MOSTRA IL CONTENUTO](https://reader035.vdocuments.net/reader035/viewer/2022070312/5542eb59497959361e8c4c18/html5/thumbnails/53.jpg)