2. 2. Inerentemente alla prima funzione non è indicato come comportarsi nel caso in cui il file
di input non esista.
3. Per la prima funzione non vi sono riferimenti su come interpretare la fine di una riga.
4. Per la seconda funzione non vi sono riferimenti su come interpretare la fine di una riga.
5. Per la seconda funzione non è riportato come comportarsi nel caso in cui l’utente non
digiti nessun carattere da tastiera.
6. Per entrambe le procedure non è descritto il comportamento nel caso in cui la stringa
analizzata appartenga alla classe delle stringhe (OpNum)Suff(Fin) "Comm"
7. Per entrambe le procedure non è descritto il comportamento nel caso in cui la stringa
analizzata non appartenga alla classe delle stringhe (OpNum)Suff(Fin) "Comm"
In corrispondenza di questi casi, sono stati presi i seguenti provvedimenti:
1. Nel caso il file di input fosse vuoto verrà visualizzato un messaggio riguardante la
stringa non conforme alla classe di equivalenza delle stringhe
(OpNum)Suff(Fin)”Comm”.
2. Nel caso in cui il file di input non esiste, sarà visualizzato un messaggio di errore
all’utente.
3. Si considererà fine di una stringa la presenza del carattere ASCII invio.
4. Si considererà fine di una stringa la presenza del carattere ASCII invio.
5. Se non viene digitato nessun carattere, la funzione considererà la mancanza di caratteri
come stringhe non conformi alla classe di equivalenza delle stringhe
(OpNum)Suff(Fin)“Comm”.
6. Nel caso in cui la stringa sia ammessa dopo l’analisi alla classe delle stringhe
(OpNum)Suff(Fin) "Comm" l'utente sarà avvisato con un opportuno messaggio.
7. Nel caso in cui la stringa non sia ammessa dopo l’analisi alla classe delle stringhe
(OpNum)Suff(Fin) "Comm" l’utente sarà avvisato con un opportuno messaggio.
Ignazio Altomare, Sergio Centrone, Fabio Gadaleta Pagina 2
3. PROGETTAZIONE
La struttura utilizzata per la realizzazione della funzione e la coda:
Specifica sintattica:
TIPI:
Coda
Boolean
Tipoelem
File
OPERATORI:
CREACODA : () Coda
CODAVUOTA : (coda) Boolean
LEGGICODA : (coda) Tipoelem
FUORICODA : (coda) Coda
INCODA : (tipoelem, coda) Coda
OPERATORI DI SERVIZIO:
ACQUISISCIELEMENTOTASTIERA () Coda
ACQUISISCIELEMENTOFILE (File) Coda
Specifica semantica
TIPI:
FILE: sequenza di caratteri delimitata da un valore booleano che ne contrassegna la fine
(EOF)
CODA: insieme delle sequenze Q = a1, a2, … , an di elementi
di tipo TIPOELEM;
Ignazio Altomare, Sergio Centrone, Fabio Gadaleta Pagina 3
4. BOOLEAN: insieme dei valori di verità;
OPERATORI:
CREACODA = Q’
Post: Q’ = L (sequenza vuota)
CODAVUOTA(Q) = b
Post: b = true se Q = L, b = false altrimenti
LEGGICODA(Q) = a
Pre: Q = a1,a2,…,an && n >= 1
Post: a = a1
FUORICODA(Q) = Q’
Pre: Q = a1,a2,…,an && n >= 1
Post: Q’ = a2,a3,…,an se n > 1, Q’ = L se n = 1
INCODA (a,Q) = Q’
Pre: Q = a1, a2,…, an && n >= 0
Post: Q’ = a1, a2,…, an, a
OPERATORI DI SERVIZIO:
ACQUISISCIELEMENTOTASTIERA = Q
Post: Q = coda realizzata prendendo in input da tastiera una riga di caratteri. Sarà
verificato che questa stringa appartenga alla classe delle stringhe (OpNum)Suff(Fin)
"Comm"
ACQUISISCIELEMENTOFILE (F) = Q
Post: Q = coda realizzata prendendo in input da un file una riga di caratteri. Sarà
verificato che questa stringa appartenga alla classe delle stringhe (OpNum)Suff(Fin)
"Comm"
Ignazio Altomare, Sergio Centrone, Fabio Gadaleta Pagina 4
5. ALGORITMO RISOLUTIVO
ACQUISISCI ELEMENTO TASTIERA
Crea una coda di char;
boolean Test false;
Controllo stringa (Test, Coda);
Se test==false
Allora
Svuota la Coda;
Restituisci (Coda);
CONTROLLO STRINGA
Prende il prossimo carattere dalla riga
Se il carattere == ‘ ( ‘
Allora
Metti in Coda il carattere;
Richiama la funzione OP (Test, Coda);
fine Se.
OP
Prende il prossimo carattere dalla riga
Se( il carattere == ‘ < ‘) AND (NOT Test)
Allora
Metti in Coda il carattere;
Prendi il prossimo carattere dalla riga;
Se il (carattere == ‘ > ‘ OR carattere == ‘ = ‘) AND (NOT Test)
Allora
Metti in Coda il carattere;
Ignazio Altomare, Sergio Centrone, Fabio Gadaleta Pagina 5
6. Prendi il prossimo carattere dalla riga;
Richiama la funzione NUM (Test, Coda, Carattere);
Altrimenti
Richiama la funzione NUM (Test, Coda, Carattere);
fine Se;
fine Se;
Se (il carattere == ‘ > ‘) AND (NOT Test)
Allora
Metti in Coda il carattere;
Prendi il prossimo carattere dalla riga;
Se il (carattere == ‘ = ‘ ) AND (NOT Test)
Allora
Metti in Coda il carattere;
Prendi il prossimo carattere dalla riga;
Richiama la funzione NUM (Test, Coda, Carattere);
Altrimenti
Richiama la funzione NUM (Test, Coda, Carattere);
fine Se;
fine Se;
Se (il carattere == ‘ = ‘) AND (NOT Test)
Allora
Metti in coda il carattere;
Prendi il prossimo carattere dalla riga;
Richiama la funzione NUM (Test, Coda, Carattere);
fine Se;
Ignazio Altomare, Sergio Centrone, Fabio Gadaleta Pagina 6
7. NUM
Fintantoche (Il carattere >= ‘ 0 ‘) AND (il carattere <= ‘ 9 ‘)
Metti in coda il carattere;
Prendi il prossimo carattere dalla riga;
Se (il carattere == ‘ ) ‘)
Allora
Metti in coda il carattere;
Richiama la funzione SUFF (Test, Coda);
fine Se;
SUFF
Prendi il prossimo carattere;
Fintantoche (il carattere >= ‘ a ‘) AND ( il carattere <= ‘ z ‘)
Metti in coda il carattere;
Prendi il prossimo carattere dalla riga;
fine Fintantoche;
Se (il carattere == ‘ ( ‘ )
Allora
Metti in coda il carattere;
Prendi il prossimo carattere dalla riga;
Se(il carattere==')')
Allora
Metti in coda il carattere;
Prendi il prossimo carattere dalla riga;
Se (il carattere ==' ” ')
Allora
Metti in coda il carattere;
Ignazio Altomare, Sergio Centrone, Fabio Gadaleta Pagina 7
8. Richiama la funzione COMM(Test,Coda);
Altrimenti
Richiama la funzione FIN (Test, Coda,Carattere);
fine Se;
FIN
Se (il carattere >= ‘ a ‘) AND (il carattere <= ‘ z ‘)
Metti in coda il carattere;
Richiama la funzione FIN2 (Test, Coda);
fine Se;
FIN2
Prendi il prossimo carattere;
Se (il carattere == ‘ , ‘)
Allora
Metti in coda il carattere;
Prendi il prossimo carattere dalla riga;
Richiama la funzione FIN (Test, Coda,Carattere);
fine Se;
Se (il carattere == ‘ ) ‘ )
Allora
Metti in coda il carattere;
Prendi il prossimo carattere;
Se (il carattere == ‘ “ ‘ )
Allora
Ignazio Altomare, Sergio Centrone, Fabio Gadaleta Pagina 8
9. Metti in coda il carattere;
Richiama la funzione COMM (Test, Coda);
fine Se;
fine Se;
COMM
Prendi il prossimo carattere;
Fintantoche (prendi qualsiasi carattere esclusa ‘ “ ‘)
Metti in coda il carattere;
Prendi il prossimo carattere;
fine Fintantoche;
Se (il carattere == ‘ “ ‘)
Allora
Metti in coda il carattere;
Test = true;
fine Se;
ALGORITMO RISOLUTIVO
ACQUISISCI ELEMENTO DA FILE
L’algoritmo risolutivo è lo stesso usato per l’acquisizione della stringa da tastiera con la differenza
che ad ogni funzione, verrà passato come parametro il file oltre ai parametri Test e Coda
REALIZZAZIONE
Le realizzazioni effettuate sono le seguenti:
1. Coda realizzata con vettore (il limite massimo è impostato a 1024 elementi).
2. Coda realizzata con puntatori.
Ignazio Altomare, Sergio Centrone, Fabio Gadaleta Pagina 9
11. 4. Stringa non conforme
a. (>r12)zidsadsadon(e,i)"s f/sing,fasdsadsad/pl" (errore nella sezione OpNum)
b. (>12)z2idsadsadon(e,i)"s f/sing,fasdsadsad/pl" (errore nella sezione Suff)
c. (>12)zidsadsadon(e,,i)"s f/sing,fasdsadsad/pl" (errore nella sezione Fin)
Ignazio Altomare, Sergio Centrone, Fabio Gadaleta Pagina 11
13. 7. La stringa inserita non è conforme
a. (>r12)zidsadsadon(e,i)"s f/sing,fasdsadsad/pl" (errore nella sezione OpNum)
b. (>12)z2idsadsadon(e,i)"s f/sing,fasdsadsad/pl" (errore nella sezione Suff)
c. (>12)zidsadsadon(e,,i)"s f/sing,fasdsadsad/pl" (errore nella sezione Fin)
Ignazio Altomare, Sergio Centrone, Fabio Gadaleta Pagina 13