La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Presentazioni simili


Presentazione sul tema: "Corso di Laurea Ingegneria Informatica Fondamenti di Informatica"— Transcript della presentazione:

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

2 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"}; Esercizi su array

3 . . . 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 Esercizi su array

4 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 = {<array> , <seq-stringhe-inz> , <seq-stringhe-fin> , <stringa>, <carattere-unicode>, <stringa-tipoA> , <maiuscola> } Esercizi su array

5 . . . La grammatica . . . Il simbolo iniziale S = <array>
Le regole di produzione <array> ::= {<seq-stringhe-iniz> <stringa-tipoA> <seq-stringhe-fin> } <seguenza-stringhe-iniz> ::= { <stringa> , }h <seguenza-stringhe-fin> ::= { , <stringa> }k Nota : con h + k + 1 = n, se n è la dimensione dell’array . . . Esercizi su array

6 . . . La grammatica . . . <stringa> ::= <carattere-unicode> { <carattere-unicode> } <carattere-unicode> ::= uno dei caratteri unicode <stringa-tipoA> ::= <maiuscola> {<maiuscola>} < maiuscola > ::= A | B | ... | Y | Z Esercizi su array

7 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 < maiuscola > ::= A | B | ... | Y | Z public static boolean maiuscola(char c){ return (c >= ‘A’ && c <= ‘Z’); } boolean ris; if (c >= ‘A’ && c <= ‘Z’) ris = true else ris = false; return ris} Esercizi su array

8 . . . 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 <stringa-tipoA> ::= <maiuscola> {<maiuscola>} 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 Esercizi su array

9 . . . 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 <array> ::= {<seq-stringhe-iniz> <stringa-tipoA> <seq-stringhe-fin> } 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 Esercizi su array

10 RICORDIAMOCI - Verifica esistenziale …
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 a1,…, an esiste almeno un elemento che verifica una data proprietà p cioè che  i {1,..,n}, p(ai) = true Esercizi su array

11 … 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) Esercizi su array

12 … 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 Esercizi su array

13 RICORDIAMOCI - Verifica universale …
Un problema di verifica universale consiste nel verificare se tutti gli elementi di una sequenza a1,…, an 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(ai) = true Oppure un problema di verifica universale non è soddisfatto se esiste almeno un elemento che non verifica p:  i  {1,..,n}, p(ai) = false La verifica universale si può sempre ricondurre alla verifica esistenziale Esercizi su array

14 … 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) Esercizi su array

15 … 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 Esercizi su array

16 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 <stringa-tipoA> ::= <maiuscola> {<maiuscola>} 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 Esercizi su array

17 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<s.length() ) { if (!(maiuscola(s.charAt(i)) ) tutteMaiuscole = false; i++; } return tutteMaiuscole; Esercizi su array

18 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 <array> ::= {<seq-stringhe-iniz> <stringa-tipoA> <seq-stringhe-fin> } 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 Esercizi su array

19 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<a.length ) { if (stringaTipoA(a[i]) ) almenoUna = true; i++; } return almenoUna ; Esercizi su array

20 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 Esercizi su array

21 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 = {<array> , <carattere-unicode>, <stringa-tipoB> , <maiuscola> } Il simbolo iniziale S = <array> . . . Esercizi su array

22 . . . La grammatica . . . Le regole di produzione
<array> ::= { <stringa-tipoB> } | { <stringa-tipoB> { , < stringa-tipoB > }n-1 } <stringa-tipoB> ::= { <carattere-unicode> } <maiuscola> <maiuscola> {< carattere-unicode >} <carattere-unicode> ::= uno dei caratteri unicode < maiuscola > ::= A | B | ... | Y | Z Esercizi su array

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


Scaricare ppt "Corso di Laurea Ingegneria Informatica Fondamenti di Informatica"

Presentazioni simili


Annunci Google