La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 su array Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E10 Esercizi su.

Presentazioni simili


Presentazione sul tema: "1 su array Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E10 Esercizi su."— Transcript della presentazione:

1 1 su array Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E10 Esercizi su Array di Stringhe A. Miola Gennaio 2012

2 2 su array Problema su array di stringhe...  Dato un array di stringhe, verificare che esiste almeno una stringa nell’array che sia costituita da tutti caratteri alfabetici maiuscoli  Ad esempio {"2100"}; {"PIPPO"}; {"Ab4cd7e00","ABC","pippO"}; {"2001", "odissea", "nello", "spazio"}; {"2001", “ODISSEA", "nello", “SPAZIO"};

3 3 su array... Problema su array di stringhe  Per risolvere il problema devo di fatto verificare che un dato array appartenga allo specifico “linguaggio degli array di stringhe, con almeno una stringa nell’array che sia costituita da tutti caratteri alfabetici maiuscoli”  Assumo che l’array sia non nullo e non vuoto e che i suoi elementi-stringhe siano non nulle e non vuote  Definisco quindi la grammatica per quel linguaggio  Definisco una serie di metodi ciascuno dei quali serve a verificare una delle regole di produzione della grammatica

4 4 su array La grammatica... Linguaggio degli array di stringhe, con almeno una stringa nell’array che sia costituita da tutti caratteri alfabetici maiuscoli Il lessico V = Insieme di tutti i caratteri Unicode I simboli non terminali N = {,,,,,, }

5 5 su array... La grammatica... Il simbolo iniziale S = Le regole di produzione ::= { } ::= {, } h ::= {, } k  Nota : con h + k + 1 = n, se n è la dimensione dell’array...

6 6 su array... La grammatica... ::= { } ::= uno dei caratteri unicode ::= { } ::= A | B |... | Y | Z

7 7 su array Soluzione del problema su array di stringhe...  Scrivere un metodo boolean maiuscola(char c) che, dato un carattere c, verifica se il carattere è una lettera maiuscola, cioè se (c >= ‘A’ && c <= ‘Z’)  Il metodo di fatto verifica la regola di produzione ::= A | B |... | Y | Z public static boolean maiuscola(char c){ return (c >= ‘A’ && c <= ‘Z’); } public static boolean maiuscola(char c){ boolean ris; if (c >= ‘A’ && c <= ‘Z’) ris = true else ris = false; return ris}

8 8 su array... Soluzione del problema su array di stringhe...  Scrivere un metodo boolean stringaTipoA(String s) che, data una stringa s, verifica se la stringa s è una stringa di tipo A  Il metodo di fatto verifica la regola di produzione ::= { }  cioè verifica se tutti i suoi caratteri sono lettere maiuscole, cioè quelli per cui il metodo maiuscola ritorna true  si tratta di una verifica universale

9 9 su array... Soluzione del problema su array di stringhe  Scrivere un metodo boolean almenoUnaStringaTipoA(String[ ] a) che, dato un array di stringhe a, verifica se almeno una stringa sia del tipo A  Il metodo di fatto verifica la regola di produzione ::= { }  cioè verifica se almeno una stringa abbia tutti i suoi caratteri lettere maiuscole, cioè una stringa per cui il precedente metodo stringaTipoA ritorna true  si tratta di una verifica esistenziale  Scrivere una classe applicazione per i test di ciascuno dei metodi precedenti

10 10 su array  Bisogna determinare se una sequenza di elementi contiene almeno un elemento che soddisfa una certa proprietà  In altre parole: si vuole verificare che in una sequenza di elementi a 1,…, a n esiste almeno un elemento che verifica una data proprietà p cioè che  i  {1,..,n}, p(a i ) = true RICORDIAMOCI - Verifica esistenziale …

11 11 su array … RICORDIAMOCI - Verifica esistenziale …  Viene usata una variabile booleana che indica se la sequenza contiene almeno un elemento che soddisfa la proprietà  Inizialmente si assegna alla variabile booleana un valore che indica convenzionalmente che la sequenza non contiene nessun elemento che soddisfa la proprietà (false)  A partire dal primo elemento della sequenza si verifica se l’elemento corrente soddisfa la proprietà se l’elemento corrente soddisfa la proprietà, allora si assegna alla variabile booleana un valore che indica convenzionalmente che la sequenza contiene almeno un elemento che soddisfa la proprietà (true)  Quando si trova un elemento che soddisfa la proprietà ci si ferma (non ha senso esaminare oltre perché il problema è risolto)

12 12 su array … RICORDIAMOCI - Schema risolutivo boolean proprietaSoddisfatta; // almeno un elemento // soddisfa la proprietà proprietaSoddisfatta = false;... altre eventuali inizializzazioni... finche’ non trovo un elemento che soddisfa la proprieta’ while (!proprietaSoddisfatta && sequenza non terminata) {... accedi al prossimo elemento... if (l’elemento corrente soddisfa la proprietà) proprietaSoddisfatta = true; }... altre elaborazioni... usare un nome opportuno per la variabile booleana

13 13 su array RICORDIAMOCI - Verifica universale …  Un problema di verifica universale consiste nel verificare se tutti gli elementi di una sequenza a 1,…, a n soddisfano una certa proprietà p una variante (duale) dei problemi di verifica esistenziale  In altre parole:  Un problema di verifica universale è soddisfatto, se tutti gli elementi verificano una data proprietà p:  i  {1,..,n}, p(a i ) = true  Oppure un problema di verifica universale non è soddisfatto se esiste almeno un elemento che non verifica p:  i  {1,..,n}, p(a i ) = false La verifica universale si può sempre ricondurre alla verifica esistenziale

14 14 su array … RICORDIAMOCI - Verifica universale …  Un problema di verifica universale può essere sempre ricondotto a un problema di verifica esistenziale  il problema diventa quello di verificare se non esiste alcun elemento della sequenza che non soddisfa la proprietà  inizialmente si assegna alla variabile booleana un valore che indica convenzionalmente che tutti gli elementi della sequenza soddisfano la proprietà (true)  per ogni elemento della sequenza, si verifica se l’elemento corrente non soddisfa la proprietà se l’elemento corrente non soddisfa la proprietà, allora si assegna alla variabile booleana un valore che indica convenzionalmente che non tutti gli elementi della sequenza soddisfano la proprietà (false)

15 15 su array … RICORDIAMOCI - Schema risolutivo boolean proprietaSoddisfatta; /* assumo che tutti gli elementi soddisfano la proprieta’ */ proprietaSoddisfatta = true;... altre inizializzazioni... finche’ non trovo un elemento che non soddisfa la proprieta while (proprietaSoddisfatta && la sequenza non e’ finita){... accedi al prossimo elemento... if (l’elemento corrente non soddisfa la proprietà) proprietàSoddisfatta = false; }... altre elaborazioni... usare un nome opportuno per la variabile booleana

16 16 su array TORNIAMO ALLA - Soluzione del problema su array di stringhe  Scrivere un metodo boolean stringaTipoA(String s) che, data una stringa s, verifica se la stringa s è una stringa di tipo A  Il metodo di fatto verifica la regola di produzione ::= { }  cioè verifica se tutti i suoi caratteri sono lettere maiuscole, cioè quelli per cui il metodo maiuscola ritorna true  si tratta di una verifica universale

17 17 su array Il metodo stringaTipoA public static boolean stringaTipoA(String s) { int i; boolean tutteMaiuscole; /* verifica universale: inizialmente la variabile booleana è vera finché non trovo un elemento della sequenza che non soddisfa la proprietà richiesta */ tutteMaiuscole = true; i = 0; while (tutteMaiuscole && i

18 18 su array TORNIAMO ALLA - Soluzione del problema su array di stringhe  Scrivere un metodo boolean almenoUnaStringaTipoA(String[ ] a) che, dato un array di stringhe a, verifica se almeno una stringa sia del tipo A  Il metodo di fatto verifica la regola di produzione ::= { }  cioè verifica se almeno una stringa abbia tutti i suoi caratteri lettere maiuscole, cioè una stringa per cui il precedente metodo stringaTipoA ritorna true  si tratta di una verifica esistenziale

19 19 su array Il metodo stringaTipoA public static boolean almenoUnaStringaTipoA(String[] a){ int i; boolean almenoUna; /* verifica esistenziale: inizialmente la variabile booleana e' falsa: non appena trovo l'elemento che soddisfa la verifica, la varabile booleana diventa vera */ almenoUna = false; i = 0; while (!almenoUna && i

20 20 su array Problema su array di stringhe  Dato un array di stringhe, verificare che tutte le stringhe dell’array contengono almeno una coppia di lettere maiuscole adiacenti  Per risolvere il problema devo di fatto verificare che un dato array appartenga allo specifico “linguaggio degli array di stringhe, con tutte le stringhe dell’array contengono almeno una coppia di lettere maiuscole adiacenti”  Assumo che l’array sia non nullo e non vuoto e che i suoi elementi-stringhe siano non nulle e non vuote  Definisco quindi la grammatica per quel linguaggio  Definisco una serie di metodi ciascuno dei quali serve a verificare una delle regole di produzione della grammatica

21 21 su array La grammatica... Linguaggio degli array di stringhe, con tutte le stringhe dell’array contenenti almeno una coppia di lettere maiuscole adiacenti Il lessico V = Insieme di tutti i caratteri Unicode I simboli non terminali N = {,,, } Il simbolo iniziale S =...

22 22 su array... La grammatica... Le regole di produzione ::= { } | { {, } n-1 } ::= { } ::= uno dei caratteri unicode ::= A | B |... | Y | Z

23 23 su array Soluzione del problema su array di stringhe  Scrivere tutti i metodi necessari AUGURI !


Scaricare ppt "1 su array Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E10 Esercizi su."

Presentazioni simili


Annunci Google