ESERCITAZIONE LP 97/98 (RECUPERO)
L'esercitazione di recupero richede di sviluppare un programma applicando
lo sviluppo top-dovn guidato dalla sintassi dei dati di input. Il tipo
di problema proposto si presta poi allo sviluppo di alcuni moduli.
Vediamo in dettaglio il lavoro proposto.
I numeri reali enormi
I "numeri reali enormi" sono tutti i numeri reali
con parte intera rappresentabile con al più 50 cifre in base dieci e
con parte decimale rappresentabile con al più 50 cifre.
Per esempio
12,23
e
11111111111111111111111111111111111111111,3333333333333333333333333333333333333333333333333
sono numeri reali enormi.
Sintassi del file di input
Il programma deve prendere in input un file il cui nome sarà
'ingresso.txt' ed il cui contenuto è
definito dalla seguente sintassi:
-
-
Decidere a piacere se è possibile o no aggiungere degli
spazi vuoti (caratteri blank) nel file di input.
-
- fine linea
- Nel file saranno dunque contenute le definizioni di alcune costanti e di
alcune funzioni operanti su numeri reali enormi, ed infine vi
saranno alcune espressioni costruite usando queste costanti e funzioni.
Lo scopo del
programma è stampare nel file 'uscita.txt' i numeri reali
enormi che
sono il risultato della valutazione delle espressioni date.
-
-
Non è possibile dichiarare due volte la stessa costante.
-
- una lettera maiuscola (a, ..., z)
-
-
-
-
Non è possibile che un elemento di contenga più di 50 cifre.
-
- una cifra decimale
(0, 1, 2, 3, 4, 5,
6 ,7, 8, 9)
-
-
Non è possibile dichiarare due volte la stessa funzione.
I nomi dei parametri delle funzioni sono tutti distinti, e sono
altresì differenti da tutte le costanti dichiarate precedentemente.
-
- una lettera minuscola (A, ..., Z)
-
-
Ogni lettera minuscola che appare in un'espressione deve corrispondere ad
una costante dichiarata nella parti constanti.
Ogni lettera maiuscola che appare in un'espressione deve essere il nome di
una funzione dichiarata nella parte funzioni, ma non occorre che tale
dichiarazione preceda l'uso; pertanto ogni nome di funzione dichiarato
può
apparire nel corpo di ogni funzione.
Tuttavia non è possibile dichiarare funzioni ricorsive e gruppi di funzioni
mutuamente ricorsive.
La seguente parte funzioni è corretta
@funz
F(x)=(+2,0-G(x))
G(y)=((y*+3,34)-y)
mentre
quella che segue è errata@funz
F(x)=(+2,0-F(x))
G(y)=((y*+3,34)-H((y-+1,1)))
H(z)=G((z-+1,1))
poichè F
è
ricorsiva e G
, H
sono mutuamente ricorsive.
-
-
-
-
L'operatore unario precisione cambia la precisione (cioè il numero
di cifre decimali) di un reale enorme; la nuova precisione
è al numero racchiuso tra le parentesi
quadrate, chiaramente tale numero deve essere minore od uguale a 50 e
maggiore di zero.
-
-
Sintassi del file di output
L'uscita andrà prodotta nel file 'uscita.txt' secondo
la sintassi indicata qui sotto:
-
-
-
-
Si ricorda che i reali enormi vengono scritti sul file di output
seguendo le seguenti convenzioni
-
il segno positivo deve essere omesso;
quindi
+10,2 viene scritto
10,2;
-
gli zeri non significativi devono essere omessi;
quindi
-023,5600 viene scritto
-23,56;
-
le parti decimali nulle non devono essere scritte, in questo caso non si
deve scrivere neanche la virgola;
quindi
333,0 e -345,0 vengono scritti
333 e -345.
Sintassi del file degli errori
Gli errori possono essere trattati in tutto o in parte, quanti decidessero
di trattare degli errori lo facciano producendo un file di messaggi d'errore
chiamato 'errori.txt' che dovrà contenere una linea per
ogni errore rilevato secondo la sintassi data qui di seguito.
-
-
-
-
Il messaggio (e):l va interpretato come segue:
- e: codice dell'errore
- l: linea del file di input che si stava leggendo quando si
è trovato l'errore oppure 0 se non si è in grado di precisare tale
linea.
Classificazione degli errori
Quanti decidano di trattare degli errori indichino gli errori trattati
specificando per ogni codice il tipo di errore trattato. I codici vanno
assegnati tenendo conto della seguente classificazione.
- errori di sintassi e = 1, ..., 99 (l'input non rispetta la
sintassi descritta dai grafi sintattici);
- errori contestuali e = 100, ..., 199 (l'input non rispetta le
condizioni contestuali, ad esempio, un reale enorme ha più di 50
cifre decimali,
una costante è dichiarata 2
volte, in una espressione vengono usate costanti o funzioni non
dichiarate);
- overflow e underflow (la valutazione di un'espressione risulta in un
reale enorme con parte intera con più di 50 cifre oppure con parte
decimale con più di 50 cifre).
Materiale da consegnare
- Cartaceo
- Listato del programma
- Lista degli errori trattati e relativi codici
- Relazione finale che specifichi in particolare:
- ragioni dell'introduzione di variabili globali
- ragioni per l'introduzione di parametri var
- ottimizzazioni realizzate e relativo algoritmo non ottimizzato
- Magnetico
- Dischetto per Macintosh contenete il programma ed il file
ingresso.txt
distribuito con l'esercitazione.
Si richiama l'attenzione sul fatto che, se si esclude la parte relativa
alle ottimizzazioni e agli errori, due pagine sono più che sufficienti per la
relazione finale.
Annotazioni
- La gestione degli errori è opzionale quindi una esercitazione perfetta
anche senza la parte di gestione degli errori può raggiungere la votazione
massima.
- La composizione del gruppo viene registrata alla data di consegna.
I gruppi vanno costituiti al più da 3 persone. In casi del tutto speciali
e ben motivati si possono autorizzare gruppi di 2 o 1 persona; in tali
casi contattare il docente.
- La correttezza del software prodotto verrà valutato con dei tests
che non sono distributi in anticipo. Qualora il programma producesse un
output scorretto su qualcuno di questi tests si richiederà al gruppo di
correggere l'esercitazione e di produrne una nuova versione. Tale versione
verrà verificata su altri tests ancora fino ad ottenere un output corretto.
Tale correzione è da considerarsi parte integrante dell' esercitazione
che non si considererà conclusa fino a che non vengano superati tutti
i tests del caso.
-
Per quest'esercitazione di recupero non è prevista assistenza;
eventali questioni riguardanti la comprensione del testo possono essere
poste durante il mio normale orario di ricevimento; controllate comunque
le FAQ, che verranno aggiornate periodicamente.
Tests
Il tests è costituito da un file di ingresso.txt
e dal file uscita.txt che è
l'uscita che dovrebbe
produrre il programma corretto sull'input dato. Si consiglia di creare
altri tests più semplici per espressioni piccole.
DATA DI CONSEGNA
FAQ (Frequently Asked Questions)
Ultima revisione 10/1/99
- IL programma non gira perchè non c'è abbastanza spazio
sullo stack delle chiamate.
- Modificare la dimensione di tale stack usando il menù run (item
run options).
- Come calcolare le operazioni sui reali enormi ?
- Si suggerisce di implementare gli algoritmi correntemente utilizzati per eseguire tali
operazioni a mano usando carta e penna.