Algoritmi E Strutture Dati Code

13

Click here to load reader

Transcript of Algoritmi E Strutture Dati Code

Page 1: Algoritmi E Strutture Dati   Code

ANALISI

Code: 

Coda<char> acquisisciElementoFile(FILE *F), che legge dal file di testo F un rigo e ne inserisce i 

caratteri in una coda 

Coda<char> acquisisciElementoTastiera(), che legge da tastiera un rigo e ne inserisce i caratteri in 

una coda 

verificando che il rigo letto sia del tipo (OpNum)Suff(Fin) "Comm" 

con Op in {<,<=,=,>=,>,<>}, Num numero intero non negativo; Suff sequenza di caratteri 

alfabetici; Fin sequenza di lettere separate da virgole; Comm sequenza di caratteri qualunque. 

Esempio:

(>=1)zion(e,i) "s f/sing,f/pl"

È richiesta la realizzazione di due funzioni che analizzino del testo al fine di determinare la loro 

appartenenza ad un certo tipo di stringhe.

La prima funzione avrà in input un file di testo, il quale, sarà composto da una singola riga che sarà 

scansionata per determinarne l’appartenenza alla classe di equivalenza delle stringa con il seguente 

formato: (OpNum)Suff(Fin) "Comm".

La seconda funzione invece provvederà ad ottenere una singola stringha direttamente dalla tastiera e 

procederà alla scansione della stringa come definito nella procedura precedente.

Entrambe le procedure forniranno come output una coda con all’interno la riga da analizzare.

Nella direttiva del problema non vi sono accenni ai seguenti casi: 

1. Per la prima funzione non è menzionato come comportarsi nel caso il file in input fosse 

vuoto. 

Ignazio Altomare, Sergio Centrone, Fabio Gadaleta Pagina 1

Page 2: Algoritmi E Strutture Dati   Code

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

Page 3: Algoritmi E Strutture Dati   Code

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

Page 4: Algoritmi E Strutture Dati   Code

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

Page 5: Algoritmi E Strutture Dati   Code

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

Page 6: Algoritmi E Strutture Dati   Code

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

Page 7: Algoritmi E Strutture Dati   Code

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

Page 8: Algoritmi E Strutture Dati   Code

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

Page 9: Algoritmi E Strutture Dati   Code

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

Page 10: Algoritmi E Strutture Dati   Code

TEST

Sono state individuate le seguenti classi di equivalenza:

1. Il file in input non esiste;

Output: messaggio di errore

2. Il file di input è vuoto

Output: messaggio di stringa non conforme

3. Stringa conforme

Output: messaggio di stringa conforme con visualizzazione della stringa

Ignazio Altomare, Sergio Centrone, Fabio Gadaleta Pagina 10

Page 11: Algoritmi E Strutture Dati   Code

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

Page 12: Algoritmi E Strutture Dati   Code

5. Nell’inserimento da tastiera non viene inserito nulla

Output: messaggio di stringa non conforme

6. La stringa inserita è conforme

Output: messaggio di stringa conforme e visualizzazione della stringa scritta

Ignazio Altomare, Sergio Centrone, Fabio Gadaleta Pagina 12

Page 13: Algoritmi E Strutture Dati   Code

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