Programmazione
Cognome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Compitino del 23 novembre 2011
Nome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Negli esercizi fate riferimento alle classi di cui trovate nell’ultima pagina un estratto della
documentazione. Supponete che le classi siano già correttamente importate nel file sorgente.
Negli esempi di esecuzione riportati, il testo sottolineato (come ad esempio 10 ) rappresenta
Matricola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dati inseriti dall’utente.
TEMPO DISPONIBILE: 1 ora e 20 minuti.
1. Completate il seguente metodo main in modo che:
(a) legga due stringhe di caratteri,
(b) controlli se la seconda stringa è un prefisso della prima,
(c) in caso affermativo comunichi il suffisso ottenuto cancellando dalla prima stringa il prefisso uguale alla seconda,
(d) in caso negativo comunichi che la seconda stringa non è un prefisso della prima.
Note:
- Una stringa è un prefisso di un’altra se appare all’inizio di essa, è un suffisso se appare alla fine.
- Non preoccupatevi delle questioni relative alle maiuscole e minuscole, che sono considerate diverse. Pertanto
tre non va considerato prefisso di Treno.
- L’output deve essere fornito esattamente nello stesso formato degli esempi di esecuzione seguenti:
Esempio 1
Stringa da esaminare? elefante
Prefisso cercato? ele
Suffisso rimanente: fante
Esempio 2
Stringa da esaminare? elefante
Prefisso cercato? elica
elica non e’ un prefisso di elefante
public static void main(String[] args) {
ConsoleInputManager in = new ConsoleInputManager();
ConsoleOutputManager out = new ConsoleOutputManager();
String s = in.readLine("Stringa da esaminare? ");
String pref = in.readLine("Prefisso cercato? ");
...
2. Si vuole scrivere un metodo main analogo al precedente che al posto della seconda stringa legga un numero intero.
Il metodo deve controllare se la stringa che rappresenta il numero in lettere è un prefisso della prima stringa, come
nei seguenti esempi di esecuzione:
Esempio 4
Esempio 3
Stringa da esaminare? tremonti
Stringa da esaminare? tremonti
Numero cercato? 3
Numero cercato? 4
Suffisso rimanente: monti
quattro non e’ un prefisso di tremonti
Il metodo può essere scritto modificando la parte iniziale del metodo main dell’esercizio precedente. In particolare, dopo avere letto la prima stringa e il numero (memorizzato in una variabile num di tipo int) si può ricavare la stringa che
rappresenta in lettere il numero, memorizzandone il riferimento in una variabile pref di tipo String (da dichiarare).
Scrivete solo questa parte di codice (se avete svolto correttamente l’esercizio 1 il resto non cambia).
public static void main(String[] args) {
ConsoleInputManager in = new ConsoleInputManager();
ConsoleOutputManager out = new ConsoleOutputManager();
String s = in.readLine("Stringa da esaminare? ");
int num = in.readInt("Numero cercato? ");
...
3. Considerate le seguenti dichiarazioni di variabile:
Sequenza<String> seq;
int lung;
//riferimento a una sequenza di stringhe
Supponete che seq si riferisca a una sequenza già costruita (quindi non contiene null) e che a lung sia stato assegnato
un valore. Supponete inoltre di disporre del solito riferimento out al monitor.
Scrivete una porzione di codice che visualizzi sul monitor tutte le stringhe di lunghezza maggiore di lung che
iniziano con una lettera maiuscola. Ad esempio, se gli oggetti presenti nella sequenza rappresentano le stringhe
"cane"
"Gatto"
"2 Albero"
""
"Elefante"
"pipistrello"
"Ape"
e lung contiene 4, le stringhe fornite in output dovranno essere "Gatto" ed "Elefante" (come nei letterali Java,
nell’esempio le virgolette evidenziano l’inizio e la fine di ciascuna stringa, ma non fanno parte della stringa).
4. Siano x e y due variabili di tipo int alla quali sono stati assegnati dei valori iniziali. Scrivete, per i casi indicati,
i valori delle due variabili dopo l’esecuzione dei seguenti frammenti di codice:
(b) y = y - x + y;
x = x + y + y;
y = x - y;
(a) x = x + y + y;
y = y - x + y;
y = x - y;
Frammento (a), assegnamenti iniziali x = 4; y = 3
Frammento (b), assegnamenti iniziali x = 4; y = 3
valore finale di x?
valore finale di x?
valore finale di y?
valore finale di y?
Frammento (a), assegnamenti iniziali x = 3; y = 4
Frammento (b), assegnamenti iniziali x = 3; y = 4
valore finale di x?
valore finale di x?
valore finale di y?
valore finale di y?
5. Sia x una variabile di tipo int alla quale è stato assegnato un valore iniziale. Scrivete, per i casi indicati, i valori
delle variabili b e c dopo l’esecuzione dei seguenti frammenti di codice:
(a) boolean[] w = new
for (int i = 0; i
w[i] = i % 3 ==
boolean b = w[x /
boolean c = w[x /
boolean[x];
< w.length; i++)
1;
2] && w [x / 3];
2] || w [x / 3];
(b) int[] w = new int[x];
int[] y = w;
for (int i = 0; i < w.length; i++)
w[i] = i;
int b;
int c = (b = y[x / 2]) + w[x / 3];
Frammento (a), assegnamento iniziale x = 4
Frammento (b), assegnamento iniziale x = 4
valore finale di b?
valore finale di b?
valore finale di c?
valore finale di c?
Frammento (a), assegnamento iniziale x = 3
Frammento (b), assegnamento iniziale x = 3
valore finale di b?
valore finale di b?
valore finale di c?
valore finale di c?
6. Siano x e y due variabili di tipo Intero. Scrivete in ciascun riquadro il risultato dell’espressione di tipo boolean
indicata, nell’ipotesi che immediatamente prima del calcolo dell’espressione siano stati eseguiti i due assegnamenti
riportati sopra il riquadro:
(a) x = y = new Intero(7);
x == y
x != y
(c) x = new Intero(7);
y = new Intero(x.intValue());
x == y
x != y
(b) x = new Intero(7);
y = new Intero(x.intValue() / 2 * 2);
x.equals(y)
!x.equals(y)
(d) x = new Intero(7);
y = new Intero(x.intValue() * 2 / 2);
x.equals(y)
Nota: Ricordatevi che i valori del tipo boolean in Java non sono 0 e 1.
!x.equals(y)
prog.utili
Class Intero
Le istanze della classe rappresentano numeri interi.
Constructor Detail
Intero
public Intero(int x)
Costruisce un nuovo oggetto che rappresenta il numero intero fornito tramite l'argomento.
java.lang
!Class String
Le sue istanze rappresentano stringhe di caratteri.
Gli indici delle posizioni all’interno di una stringa variano da 0 alla lunghezza meno 1.
Method Detail
Method Detail
charAt
intValue
Restituisce il carattere che si trova all’indice specificato.
public int intValue()
Restituisce il valore intero rappresentato dall’oggetto che esegue il metodo.
endsWith
public boolean endsWith(String suffix)
toString
public java.lang.String toString()
Restituisce una stringa contenente il numero rappresentato dall'oggetto che esegue il metodo,
espresso in lettere. Ad esempio, se l'oggetto che esegue il metodo rappresenta il numero 34, il
metodo restituirà la stringa "trentaquattro".
Restituisce true se e solo se la stringa che esegue il metodo ha come suffisso la stringa riferita
da suffix.
equals
public boolean equals(String str)
Restituisce true se e solo se la stringa che esegue il metodo è uguale a quella riferita da str.
equals
public boolean equals(Intero n)
Restituisce true se e solo se l’oggetto che esegue il metodo rappresenta lo stesso numero intero
rappresentato dall’oggetto di cui viene fornito il riferimento tramite l’argomento.
java.lang
public char charAt(int index)
!Class Character
Classe involucro corrispondente al tipo primitivo char. Le sue istanze rappresentano
caratteri
Method Detail
isLowerCase
public static boolean isLowerCase(char ch)
Restituisce true se e solo se il carattere specificato tramite l’argomento è una lettera
minuscola.
isUpperCase
public static boolean isUpperCase(char ch)
Restituisce true se e solo se il carattere specificato tramite l’argomento è una lettera maiuscola.
indexOf
public int indexOf(String str)
Restituisce l’indice della prima occorrenza, all’interno della stringa che esegue il metodo,
della stringa riferita da str. Nel caso questa non sia un fattore della stringa che esegue il
metodo, restituisce -1.
length
public int length()
Restituisce la lunghezza della stringa, cioè il numero di caratteri che la compongono.
startsWith
public boolean startsWith(String prefix)
Restituisce true se e solo se la stringa che esegue il metodo ha come prefisso la stringa riferita
da prefix.
substring
public String substring(int beginIndex)
Restituisce il riferimento a una nuova stringa formata da tutti i caratteri della stringa che
esegue il metodo, che si trovano a partire dall’indice specificato dall’argomento.
substring
public String substring(int beginIndex, int endIndex)
prog.utili
!Class Sequenza<E>
Le sue istanze rappresentano sequenze di oggetti di tipo E, cioè collezioni di oggetti di tipo E
che possono contenere duplicazioni. Nelle sequenze gli oggetti compaiono nell'ordine in cui
sono stati inseriti. Inoltre una sequenza non può contenere riferimenti null
N.B. E’ possible esaminare gli elementi contenuti in un oggetto di tipo Sequenza mediante
cicli for-each.
Restituisce il riferimento a una nuova stringa formata da tutti i caratteri della stringa che
esegue il metodo, che si trovano a partire dall’indice specificato dal primo argomento
beginIndex, sino all’indice endIndex – 1. Pertanto il secondo argomento indica la prima
posizione da escludere nella nuova stringa.
Programmazione
Cognome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Compitino del 23 novembre 2011
Nome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Negli esercizi fate riferimento alle classi di cui trovate nell’ultima pagina un estratto della
documentazione. Supponete che le classi siano già correttamente importate nel file sorgente.
Negli esempi di esecuzione riportati, il testo sottolineato (come ad esempio 10 ) rappresenta
Matricola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dati inseriti dall’utente.
TEMPO DISPONIBILE: 1 ora e 20 minuti.
1. Completate il seguente metodo main in modo che:
(a) legga due stringhe di caratteri,
(b) controlli se la seconda stringa è un suffisso della prima,
(c) in caso affermativo comunichi il prefisso ottenuto cancellando dalla prima stringa il suffisso uguale alla seconda,
(d) in caso negativo comunichi che la seconda stringa non è un suffisso della prima.
Note:
- Una stringa è un suffisso di un’altra se appare alla fine di essa, è un prefisso se appare all’inizio.
- Non preoccupatevi delle questioni relative alle maiuscole e minuscole, che sono considerate diverse. Pertanto
Arte non va considerato suffisso di carte.
- L’output deve essere fornito esattamente nello stesso formato degli esempi di esecuzione seguenti:
Esempio 1
Stringa da esaminare? tremonti
Suffisso cercato? monti
Prefisso rimanente: tre
Esempio 2
Stringa da esaminare? tremonti
Suffisso cercato? menti
menti non e’ un suffisso di tremonti
public static void main(String[] args) {
ConsoleInputManager in = new ConsoleInputManager();
ConsoleOutputManager out = new ConsoleOutputManager();
String s = in.readLine("Stringa da esaminare? ");
String suff = in.readLine("Suffisso cercato? ");
...
2. Si vuole scrivere un metodo main analogo al precedente che al posto della seconda stringa legga un numero intero.
Il metodo deve controllare se la stringa che rappresenta il numero in lettere è un suffisso della prima stringa, come nei
seguenti esempi di esecuzione:
Esempio 4
Esempio 3
Stringa da esaminare? risotto
Stringa da esaminare? risotto
Numero cercato? 8
Numero cercato? 9
Prefisso rimanente: ris
nove non e’ un suffisso di risotto
Il metodo può essere scritto modificando la parte iniziale del metodo main dell’esercizio precedente. In particolare, dopo avere letto la prima stringa e il numero (memorizzato in una variabile num di tipo int) si può ricavare la stringa che
rappresenta in lettere il numero, memorizzandone il riferimento in una variabile suff di tipo String (da dichiarare).
Scrivete solo questa parte di codice (se avete svolto correttamente l’esercizio 1 il resto non cambia).
public static void main(String[] args) {
ConsoleInputManager in = new ConsoleInputManager();
ConsoleOutputManager out = new ConsoleOutputManager();
String s = in.readLine("Stringa da esaminare? ");
int num = in.readInt("Numero cercato? ");
...
3. Considerate le seguenti dichiarazioni di variabile:
Sequenza<String> seq;
int lung;
//riferimento a una sequenza di stringhe
Supponete che seq si riferisca a una sequenza già costruita (quindi non contiene null) e che a lung sia stato assegnato
un valore. Supponete inoltre di disporre del solito riferimento out al monitor.
Scrivete una porzione di codice che visualizzi sul monitor tutte le stringhe di lunghezza maggiore di lung che
iniziano con una lettera minuscola. Ad esempio, se gli oggetti presenti nella sequenza rappresentano le stringhe
"Cane"
"gatto"
"2 albero"
""
"elefante"
"Pipistrello"
"ape"
e lung contiene 4, le stringhe fornite in output dovranno essere "gatto" ed "elefante" (come nei letterali Java,
nell’esempio le virgolette evidenziano l’inizio e la fine di ciascuna stringa, ma non fanno parte della stringa).
4. Siano x e y due variabili di tipo int alla quali sono stati assegnati dei valori iniziali. Scrivete, per i casi indicati,
i valori delle due variabili dopo l’esecuzione dei seguenti frammenti di codice:
(b) x = x + y + y;
y = y - x + y;
y = x - y;
(a) y = y - x + y;
x = x + y + y;
y = x - y;
Frammento (a), assegnamenti iniziali x = 3; y = 4
Frammento (b), assegnamenti iniziali x = 3; y = 4
valore finale di x?
valore finale di x?
valore finale di y?
valore finale di y?
Frammento (a), assegnamenti iniziali x = 4; y = 3
Frammento (b), assegnamenti iniziali x = 4; y = 3
valore finale di x?
valore finale di x?
valore finale di y?
valore finale di y?
5. Sia x una variabile di tipo int alla quale è stato assegnato un valore iniziale. Scrivete, per i casi indicati, i valori
delle variabili b e c dopo l’esecuzione dei seguenti frammenti di codice:
(a) int[] w = new int[x];
int[] y = w;
for (int i = 0; i < w.length; i++)
w[i] = i;
int b;
int c = (b = y[x / 2]) + w[x / 3];
(b) boolean[] w = new
for (int i = 0; i
w[i] = i % 3 ==
boolean b = w[x /
boolean c = w[x /
boolean[x];
< w.length; i++)
1;
2] && w [x / 3];
2] || w [x / 3];
Frammento (a), assegnamento iniziale x = 4
Frammento (b), assegnamento iniziale x = 4
valore finale di b?
valore finale di b?
valore finale di c?
valore finale di c?
Frammento (a), assegnamento iniziale x = 3
Frammento (b), assegnamento iniziale x = 3
valore finale di b?
valore finale di b?
valore finale di c?
valore finale di c?
6. Siano x e y due variabili di tipo Intero. Scrivete in ciascun riquadro il risultato dell’espressione di tipo boolean
indicata, nell’ipotesi che immediatamente prima del calcolo dell’espressione siano stati eseguiti i due assegnamenti
riportati sopra il riquadro:
(a) x = new Intero(7);
y = new Intero(x.intValue());
x == y
x != y
(c) x = y = new Intero(7);
x == y
x != y
(b) x = new Intero(7);
y = new Intero(x.intValue() * 2 / 2);
x.equals(y)
!x.equals(y)
(d) x = new Intero(7);
y = new Intero(x.intValue() / 2 * 2);
x.equals(y)
Nota: Ricordatevi che i valori del tipo boolean in Java non sono 0 e 1.
!x.equals(y)
prog.utili
Class Intero
Le istanze della classe rappresentano numeri interi.
Constructor Detail
Intero
java.lang
!Class String
Le sue istanze rappresentano stringhe di caratteri.
Gli indici delle posizioni all’interno di una stringa variano da 0 alla lunghezza meno 1.
public Intero(int x)
Costruisce un nuovo oggetto che rappresenta il numero intero fornito tramite l'argomento.
Method Detail
Method Detail
public char charAt(int index)
intValue
public int intValue()
Restituisce il valore intero rappresentato dall’oggetto che esegue il metodo.
toOrdinalString
charAt
Restituisce il carattere che si trova all’indice specificato.
equals
public boolean equals(String str)
Restituisce true se e solo se la stringa che esegue il metodo è uguale a quella riferita da str.
public java.lang.String toOrdinalString()
Restituisce una stringa contenente il numero rappresentato dall'oggetto che esegue il metodo,
espresso in lettere come ordinale; ad esempio, se l'oggetto che esegue il metodo rappresenta il
numero 34, il metodo restituirà la stringa "trentaquattresimo".
indexOf
toString
indexOf
public java.lang.String toString()
Restituisce una stringa contenente il numero rappresentato dall'oggetto che esegue il metodo,
espresso in lettere. Ad esempio, se l'oggetto che esegue il metodo rappresenta il numero 34, il
metodo restituirà la stringa "trentaquattro".
public int indexOf(String str, int fromIndex)
equals
length
public boolean equals(Intero n)
Restituisce true se e solo se l’oggetto che esegue il metodo rappresenta lo stesso numero intero
rappresentato dall’oggetto di cui viene fornito il riferimento tramite l’argomento.
public int indexOf(String str)
Restituisce l’indice della prima occorrenza della stringa riferita da str all’interno della stringa
che esegue il metodo. Se tale occorrenza non c’è restituisce -1.
Restituisce l’indice della prima occorrenza a partire dall’indice specificato da fromIndex,
della stringa riferita da str all’interno della stringa che esegue il metodo. Se tale occorrenza
non c’è restituisce -1.
public int length()
Restituisce la lunghezza della stringa, cioè il numero di caratteri che la compongono.
substring
public String substring(int beginIndex)
java.lang
!Class Character
Classe involucro corrispondente al tipo primitivo char. Le sue istanze rappresentano
caratteri
Method Detail
isLowerCase
public static boolean isLowerCase(char ch)
Restituisce true se e solo se il carattere specificato tramite l’argomento è una lettera
minuscola.
prog.utili
!Class Sequenza<E>
Le sue istanze rappresentano sequenze di oggetti di tipo E, cioè collezioni di oggetti di tipo E
che possono contenere duplicazioni. Nelle sequenze gli oggetti compaiono nell'ordine in cui
sono stati inseriti. Inoltre una sequenza non può contenere riferimenti null
N.B. E’ possible esaminare gli elementi contenuti in un oggetto di tipo Sequenza mediante
cicli for-each.
Restituisce il riferimento a una nuova stringa formata da tutti i caratteri della stringa che
esegue il metodo, che si trovano a partire dall’indice specificato dall’argomento.
substring
public String substring(int beginIndex, int endIndex)
Restituisce il riferimento a una nuova stringa formata da tutti i caratteri della stringa che
esegue il metodo, che si trovano a partire dall’indice specificato dal primo argomento
beginIndex, sino all’indice endIndex – 1. Pertanto il secondo argomento indica la prima
posizione da escludere nella nuova stringa.
Programmazione
Cognome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Compitino del 23 novembre 2011
Nome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Negli esercizi fate riferimento alle classi di cui trovate nell’ultima pagina un estratto della
documentazione. Supponete che le classi siano già correttamente importate nel file sorgente.
Negli esempi di esecuzione riportati, il testo sottolineato (come ad esempio 10 ) rappresenta
Matricola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dati inseriti dall’utente.
TEMPO DISPONIBILE: 1 ora e 20 minuti.
1. Completate il seguente metodo main in modo che:
(a) legga due stringhe di caratteri,
(b) controlli se la seconda stringa è un prefisso della prima,
(c) in caso affermativo comunichi il suffisso ottenuto cancellando dalla prima stringa il prefisso uguale alla seconda,
(d) in caso negativo comunichi che la seconda stringa non è un prefisso della prima.
Note:
- Una stringa è un prefisso di un’altra se appare all’inizio di essa, è un suffisso se appare alla fine.
- Non preoccupatevi delle questioni relative alle maiuscole e minuscole, che sono considerate diverse. Pertanto
tre non va considerato prefisso di Treno.
- L’output deve essere fornito esattamente nello stesso formato degli esempi di esecuzione seguenti:
Esempio 1
Stringa da esaminare? elefante
Prefisso cercato? ele
Suffisso rimanente: fante
Esempio 2
Stringa da esaminare? elefante
Prefisso cercato? elica
elica non e’ un prefisso di elefante
public static void main(String[] args) {
ConsoleInputManager in = new ConsoleInputManager();
ConsoleOutputManager out = new ConsoleOutputManager();
String s = in.readLine("Stringa da esaminare? ");
String pref = in.readLine("Prefisso cercato? ");
...
2. Si vuole scrivere un metodo main analogo al precedente che al posto della seconda stringa legga un numero intero.
Il metodo deve controllare se la stringa che rappresenta il numero in lettere è un prefisso della prima stringa, come
nei seguenti esempi di esecuzione:
Esempio 4
Esempio 3
Stringa da esaminare? tremonti
Stringa da esaminare? tremonti
Numero cercato? 3
Numero cercato? 4
Suffisso rimanente: monti
quattro non e’ un prefisso di tremonti
Il metodo può essere scritto modificando la parte iniziale del metodo main dell’esercizio precedente. In particolare, dopo avere letto la prima stringa e il numero (memorizzato in una variabile num di tipo int) si può ricavare la stringa che
rappresenta in lettere il numero, memorizzandone il riferimento in una variabile pref di tipo String (da dichiarare).
Scrivete solo questa parte di codice (se avete svolto correttamente l’esercizio 1 il resto non cambia).
public static void main(String[] args) {
ConsoleInputManager in = new ConsoleInputManager();
ConsoleOutputManager out = new ConsoleOutputManager();
String s = in.readLine("Stringa da esaminare? ");
int num = in.readInt("Numero cercato? ");
...
3. Considerate le seguenti dichiarazioni di variabile:
Sequenza<String> seq;
int lung;
//riferimento a una sequenza di stringhe
Supponete che seq si riferisca a una sequenza già costruita (quindi non contiene null) e che a lung sia stato assegnato
un valore. Supponete inoltre di disporre del solito riferimento out al monitor.
Scrivete una porzione di codice che visualizzi sul monitor tutte le stringhe di lunghezza maggiore di lung che
iniziano con una lettera maiuscola. Ad esempio, se gli oggetti presenti nella sequenza rappresentano le stringhe
"cane"
"Gatto"
"2 Albero"
""
"Elefante"
"pipistrello"
"Ape"
e lung contiene 4, le stringhe fornite in output dovranno essere "Gatto" ed "Elefante" (come nei letterali Java,
nell’esempio le virgolette evidenziano l’inizio e la fine di ciascuna stringa, ma non fanno parte della stringa).
4. Siano x e y due variabili di tipo int alla quali sono stati assegnati dei valori iniziali. Scrivete, per i casi indicati,
i valori delle due variabili dopo l’esecuzione dei seguenti frammenti di codice:
(b) y = y - x + y;
x = x + y + y;
y = x - y;
(a) x = x + y + y;
y = y - x + y;
y = x - y;
Frammento (a), assegnamenti iniziali x = 2; y = 5
Frammento (b), assegnamenti iniziali x = 2; y = 5
valore finale di x?
valore finale di x?
valore finale di y?
valore finale di y?
Frammento (a), assegnamenti iniziali x = 5; y = 2
Frammento (b), assegnamenti iniziali x = 5; y = 2
valore finale di x?
valore finale di x?
valore finale di y?
valore finale di y?
5. Sia x una variabile di tipo int alla quale è stato assegnato un valore iniziale. Scrivete, per i casi indicati, i valori
delle variabili b e c dopo l’esecuzione dei seguenti frammenti di codice:
(a) boolean[] w = new
for (int i = 0; i
w[i] = i % 3 ==
boolean b = w[x /
boolean c = w[x /
boolean[x];
< w.length; i++)
1;
2] || w [x / 3];
2] && w [x / 3];
(b) int[] w = new int[x];
int[] y = w;
for (int i = 0; i < w.length; i++)
w[i] = i;
int c;
int b = (c = y[x / 2]) + w[x / 3];
Frammento (a), assegnamento iniziale x = 4
Frammento (b), assegnamento iniziale x = 4
valore finale di b?
valore finale di b?
valore finale di c?
valore finale di c?
Frammento (a), assegnamento iniziale x = 3
Frammento (b), assegnamento iniziale x = 3
valore finale di b?
valore finale di b?
valore finale di c?
valore finale di c?
6. Siano x e y due variabili di tipo Intero. Scrivete in ciascun riquadro il risultato dell’espressione di tipo boolean
indicata, nell’ipotesi che immediatamente prima del calcolo dell’espressione siano stati eseguiti i due assegnamenti
riportati sopra il riquadro:
(a) x = new Intero(7);
y = new Intero(x.intValue() / 2 * 2);
x.equals(y)
!x.equals(y)
(c) x = new Intero(7);
y = new Intero(x.intValue() * 2 / 2);
x.equals(y)
!x.equals(y)
(b) x = y = new Intero(7);
x == y
x != y
(d) x = new Intero(7);
y = new Intero(x.intValue());
x == y
x != y
Nota: Ricordatevi che i valori del tipo boolean in Java non sono 0 e 1.
prog.utili
Class Intero
Le istanze della classe rappresentano numeri interi.
Constructor Detail
Intero
public Intero(int x)
Costruisce un nuovo oggetto che rappresenta il numero intero fornito tramite l'argomento.
java.lang
!Class String
Le sue istanze rappresentano stringhe di caratteri.
Gli indici delle posizioni all’interno di una stringa variano da 0 alla lunghezza meno 1.
Method Detail
Method Detail
charAt
intValue
Restituisce il carattere che si trova all’indice specificato.
public int intValue()
Restituisce il valore intero rappresentato dall’oggetto che esegue il metodo.
endsWith
public boolean endsWith(String suffix)
toString
public java.lang.String toString()
Restituisce una stringa contenente il numero rappresentato dall'oggetto che esegue il metodo,
espresso in lettere. Ad esempio, se l'oggetto che esegue il metodo rappresenta il numero 34, il
metodo restituirà la stringa "trentaquattro".
Restituisce true se e solo se la stringa che esegue il metodo ha come suffisso la stringa riferita
da suffix.
equals
public boolean equals(String str)
Restituisce true se e solo se la stringa che esegue il metodo è uguale a quella riferita da str.
equals
public boolean equals(Intero n)
Restituisce true se e solo se l’oggetto che esegue il metodo rappresenta lo stesso numero intero
rappresentato dall’oggetto di cui viene fornito il riferimento tramite l’argomento.
java.lang
public char charAt(int index)
!Class Character
Classe involucro corrispondente al tipo primitivo char. Le sue istanze rappresentano
caratteri
Method Detail
isLowerCase
public static boolean isLowerCase(char ch)
Restituisce true se e solo se il carattere specificato tramite l’argomento è una lettera
minuscola.
isUpperCase
public static boolean isUpperCase(char ch)
Restituisce true se e solo se il carattere specificato tramite l’argomento è una lettera maiuscola.
indexOf
public int indexOf(String str)
Restituisce l’indice della prima occorrenza, all’interno della stringa che esegue il metodo,
della stringa riferita da str. Nel caso questa non sia un fattore della stringa che esegue il
metodo, restituisce -1.
length
public int length()
Restituisce la lunghezza della stringa, cioè il numero di caratteri che la compongono.
startsWith
public boolean startsWith(String prefix)
Restituisce true se e solo se la stringa che esegue il metodo ha come prefisso la stringa riferita
da prefix.
substring
public String substring(int beginIndex)
Restituisce il riferimento a una nuova stringa formata da tutti i caratteri della stringa che
esegue il metodo, che si trovano a partire dall’indice specificato dall’argomento.
substring
public String substring(int beginIndex, int endIndex)
prog.utili
!Class Sequenza<E>
Le sue istanze rappresentano sequenze di oggetti di tipo E, cioè collezioni di oggetti di tipo E
che possono contenere duplicazioni. Nelle sequenze gli oggetti compaiono nell'ordine in cui
sono stati inseriti. Inoltre una sequenza non può contenere riferimenti null
N.B. E’ possible esaminare gli elementi contenuti in un oggetto di tipo Sequenza mediante
cicli for-each.
Restituisce il riferimento a una nuova stringa formata da tutti i caratteri della stringa che
esegue il metodo, che si trovano a partire dall’indice specificato dal primo argomento
beginIndex, sino all’indice endIndex – 1. Pertanto il secondo argomento indica la prima
posizione da escludere nella nuova stringa.
Programmazione
Cognome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Compitino del 23 novembre 2011
Nome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Negli esercizi fate riferimento alle classi di cui trovate nell’ultima pagina un estratto della
documentazione. Supponete che le classi siano già correttamente importate nel file sorgente.
Negli esempi di esecuzione riportati, il testo sottolineato (come ad esempio 10 ) rappresenta
Matricola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
dati inseriti dall’utente.
TEMPO DISPONIBILE: 1 ora e 20 minuti.
1. Completate il seguente metodo main in modo che:
(a) legga due stringhe di caratteri,
(b) controlli se la seconda stringa è un suffisso della prima,
(c) in caso affermativo comunichi il prefisso ottenuto cancellando dalla prima stringa il suffisso uguale alla seconda,
(d) in caso negativo comunichi che la seconda stringa non è un suffisso della prima.
Note:
- Una stringa è un suffisso di un’altra se appare alla fine di essa, è un prefisso se appare all’inizio.
- Non preoccupatevi delle questioni relative alle maiuscole e minuscole, che sono considerate diverse. Pertanto
Arte non va considerato suffisso di carte.
- L’output deve essere fornito esattamente nello stesso formato degli esempi di esecuzione seguenti:
Esempio 1
Stringa da esaminare? tremonti
Suffisso cercato? monti
Prefisso rimanente: tre
Esempio 2
Stringa da esaminare? tremonti
Suffisso cercato? menti
menti non e’ un suffisso di tremonti
public static void main(String[] args) {
ConsoleInputManager in = new ConsoleInputManager();
ConsoleOutputManager out = new ConsoleOutputManager();
String s = in.readLine("Stringa da esaminare? ");
String suff = in.readLine("Suffisso cercato? ");
...
2. Si vuole scrivere un metodo main analogo al precedente che al posto della seconda stringa legga un numero intero.
Il metodo deve controllare se la stringa che rappresenta il numero in lettere è un suffisso della prima stringa, come nei
seguenti esempi di esecuzione:
Esempio 4
Esempio 3
Stringa da esaminare? risotto
Stringa da esaminare? risotto
Numero cercato? 8
Numero cercato? 9
Prefisso rimanente: ris
nove non e’ un suffisso di risotto
Il metodo può essere scritto modificando la parte iniziale del metodo main dell’esercizio precedente. In particolare, dopo avere letto la prima stringa e il numero (memorizzato in una variabile num di tipo int) si può ricavare la stringa che
rappresenta in lettere il numero, memorizzandone il riferimento in una variabile suff di tipo String (da dichiarare).
Scrivete solo questa parte di codice (se avete svolto correttamente l’esercizio 1 il resto non cambia).
public static void main(String[] args) {
ConsoleInputManager in = new ConsoleInputManager();
ConsoleOutputManager out = new ConsoleOutputManager();
String s = in.readLine("Stringa da esaminare? ");
int num = in.readInt("Numero cercato? ");
...
3. Considerate le seguenti dichiarazioni di variabile:
Sequenza<String> seq;
int lung;
//riferimento a una sequenza di stringhe
Supponete che seq si riferisca a una sequenza già costruita (quindi non contiene null) e che a lung sia stato assegnato
un valore. Supponete inoltre di disporre del solito riferimento out al monitor.
Scrivete una porzione di codice che visualizzi sul monitor tutte le stringhe di lunghezza maggiore di lung che
iniziano con una lettera minuscola. Ad esempio, se gli oggetti presenti nella sequenza rappresentano le stringhe
"Cane"
"gatto"
"2 albero"
""
"elefante"
"Pipistrello"
"ape"
e lung contiene 4, le stringhe fornite in output dovranno essere "gatto" ed "elefante" (come nei letterali Java,
nell’esempio le virgolette evidenziano l’inizio e la fine di ciascuna stringa, ma non fanno parte della stringa).
4. Siano x e y due variabili di tipo int alla quali sono stati assegnati dei valori iniziali. Scrivete, per i casi indicati,
i valori delle due variabili dopo l’esecuzione dei seguenti frammenti di codice:
(b) x = x + y + y;
y = y - x + y;
y = x - y;
(a) y = y - x + y;
x = x + y + y;
y = x - y;
Frammento (a), assegnamenti iniziali x = 5; y = 2
Frammento (b), assegnamenti iniziali x = 5; y = 2
valore finale di x?
valore finale di x?
valore finale di y?
valore finale di y?
Frammento (a), assegnamenti iniziali x = 2; y = 5
Frammento (b), assegnamenti iniziali x = 2; y = 5
valore finale di x?
valore finale di x?
valore finale di y?
valore finale di y?
5. Sia x una variabile di tipo int alla quale è stato assegnato un valore iniziale. Scrivete, per i casi indicati, i valori
delle variabili b e c dopo l’esecuzione dei seguenti frammenti di codice:
(a) int[] w = new int[x];
int[] y = w;
for (int i = 0; i < w.length; i++)
w[i] = i;
int c;
int b = (c = y[x / 2]) + w[x / 3];
(b) boolean[] w = new
for (int i = 0; i
w[i] = i % 3 ==
boolean b = w[x /
boolean c = w[x /
boolean[x];
< w.length; i++)
1;
2] || w [x / 3];
2] && w [x / 3];
Frammento (a), assegnamento iniziale x = 4
Frammento (b), assegnamento iniziale x = 4
valore finale di b?
valore finale di b?
valore finale di c?
valore finale di c?
Frammento (a), assegnamento iniziale x = 3
Frammento (b), assegnamento iniziale x = 3
valore finale di b?
valore finale di b?
valore finale di c?
valore finale di c?
6. Siano x e y due variabili di tipo Intero. Scrivete in ciascun riquadro il risultato dell’espressione di tipo boolean
indicata, nell’ipotesi che immediatamente prima del calcolo dell’espressione siano stati eseguiti i due assegnamenti
riportati sopra il riquadro:
(a) x = new Intero(7);
y = new Intero(x.intValue() * 2 / 2);
x.equals(y)
!x.equals(y)
(c) x = new Intero(7);
y = new Intero(x.intValue() / 2 * 2);
x.equals(y)
!x.equals(y)
(b) x = new Intero(7);
y = new Intero(x.intValue());
x == y
x != y
(d) x = y = new Intero(7);
x == y
Nota: Ricordatevi che i valori del tipo boolean in Java non sono 0 e 1.
x != y
prog.utili
Class Intero
Le istanze della classe rappresentano numeri interi.
Constructor Detail
Intero
public Intero(int x)
Costruisce un nuovo oggetto che rappresenta il numero intero fornito tramite l'argomento.
java.lang
!Class String
Le sue istanze rappresentano stringhe di caratteri.
Gli indici delle posizioni all’interno di una stringa variano da 0 alla lunghezza meno 1.
Method Detail
Method Detail
charAt
intValue
Restituisce il carattere che si trova all’indice specificato.
public int intValue()
Restituisce il valore intero rappresentato dall’oggetto che esegue il metodo.
endsWith
public boolean endsWith(String suffix)
toString
public java.lang.String toString()
Restituisce una stringa contenente il numero rappresentato dall'oggetto che esegue il metodo,
espresso in lettere. Ad esempio, se l'oggetto che esegue il metodo rappresenta il numero 34, il
metodo restituirà la stringa "trentaquattro".
Restituisce true se e solo se la stringa che esegue il metodo ha come suffisso la stringa riferita
da suffix.
equals
public boolean equals(String str)
Restituisce true se e solo se la stringa che esegue il metodo è uguale a quella riferita da str.
equals
public boolean equals(Intero n)
Restituisce true se e solo se l’oggetto che esegue il metodo rappresenta lo stesso numero intero
rappresentato dall’oggetto di cui viene fornito il riferimento tramite l’argomento.
java.lang
public char charAt(int index)
!Class Character
Classe involucro corrispondente al tipo primitivo char. Le sue istanze rappresentano
caratteri
Method Detail
isLowerCase
public static boolean isLowerCase(char ch)
Restituisce true se e solo se il carattere specificato tramite l’argomento è una lettera
minuscola.
isUpperCase
public static boolean isUpperCase(char ch)
Restituisce true se e solo se il carattere specificato tramite l’argomento è una lettera maiuscola.
indexOf
public int indexOf(String str)
Restituisce l’indice della prima occorrenza, all’interno della stringa che esegue il metodo,
della stringa riferita da str. Nel caso questa non sia un fattore della stringa che esegue il
metodo, restituisce -1.
length
public int length()
Restituisce la lunghezza della stringa, cioè il numero di caratteri che la compongono.
startsWith
public boolean startsWith(String prefix)
Restituisce true se e solo se la stringa che esegue il metodo ha come prefisso la stringa riferita
da prefix.
substring
public String substring(int beginIndex)
Restituisce il riferimento a una nuova stringa formata da tutti i caratteri della stringa che
esegue il metodo, che si trovano a partire dall’indice specificato dall’argomento.
substring
public String substring(int beginIndex, int endIndex)
prog.utili
!Class Sequenza<E>
Le sue istanze rappresentano sequenze di oggetti di tipo E, cioè collezioni di oggetti di tipo E
che possono contenere duplicazioni. Nelle sequenze gli oggetti compaiono nell'ordine in cui
sono stati inseriti. Inoltre una sequenza non può contenere riferimenti null
N.B. E’ possible esaminare gli elementi contenuti in un oggetto di tipo Sequenza mediante
cicli for-each.
Restituisce il riferimento a una nuova stringa formata da tutti i caratteri della stringa che
esegue il metodo, che si trovano a partire dall’indice specificato dal primo argomento
beginIndex, sino all’indice endIndex – 1. Pertanto il secondo argomento indica la prima
posizione da escludere nella nuova stringa.
Scarica

Testo della prova (edizione diurna)