• Non ci sono risultati.

Corso di laurea in Informatica AA 2007/08 Programmazione, M.A. Alberti Prova scritta – IV appello, 11 luglio 2008 Cognome Nome Matricola

N/A
N/A
Protected

Academic year: 2021

Condividi "Corso di laurea in Informatica AA 2007/08 Programmazione, M.A. Alberti Prova scritta – IV appello, 11 luglio 2008 Cognome Nome Matricola"

Copied!
4
0
0

Testo completo

(1)

1

Corso di laurea in Informatica AA 2007/08 Programmazione, M.A. Alberti Prova scritta – IV appello, 11 luglio 2008

Cognome Nome

Matricola

1

Stabilire qual’è l’output del seguente codice Java, supponendo che sia stata dichiarata la variabile int i:

for (i = 1; i < 10; i++) { if (i%3 == 0) break;

System.out.println (i);

}

System.out.println (i);

1 
2


3 // valore della variabile i all'uscita dal ciclo

for (i = 1; i < 10; i++) { if (i%3 == 0) continue;

System.out.println (i);

}

System.out.println (i);

1 2 4 5 7 8

10 // valore della variabile i all'uscita dal ciclo for (i = 1; i < 10; i++) {

if (i%3 == 0) System.exit(0);

System.out.println (i);

}

System.out.println (i);

1 2

// il programma si interrompe senza eseguire la stampa fuori dal ciclo

2

Supponete sia definita una classe BarcaVela derivata dalla classe Barca e supponete che quest’ultima classe abbia definito i metodi pubblici velocitàNodi() e accendiMotori().

Un oggetto di classe BarcaVela risponde ai metodi velocitàNodi() e accendiMotori()?

SI NO

Questi metodi dovranno eseguire le stesse azioni sia per gli oggetti di classe BarcaVela sia per gli oggetti di classe Barca, sempre e comunque? SI NO Come si chiama in Java il concetto di specializzazione dei metodi? sovrascrittura

Se per la classe BarcaVela è stato definito il metodo alzareRanda(), questo può essere

invocato su un oggetto di classe Barca? SI NO

3

Data la classe seguente con i costruttori elencati:

class Dipendente { private String nome;

Dipendente(){

nome = new String();

}

Dipendente(String unNome) { nome = unNome;

} }

(2)

AA 2007/08 Programmazione, Prof. M.A. Alberti IV appello, 11 luglio 2008

2 E’ possibile al di fuori della classe cambiare il valore del membro nome di un oggetto già

istanziato? SI NO

Se nella classe è stato definito un metodo pubblico che accede al campo nome public void modificaNome (String nuovoNome) {

nome = nuovoNome;

}

Per estendere la classe con una specializzazione, introduciamo la sottoclasse Impiegato, completare quindi il codice seguente opportunamente:

class Impiegato extends Dipendente { private int settore;

// 1, 2, 3 ad esempio Impiegato() {

super();

settore = 1;

// valore di default }

Impiegato

(String unNome, int unSettore) { super(unNome);

settore = unSettore;

} }

Supponendo di aver eseguito l’istruzione: Impiegato imp = new Impiegato();

E’ possibile accedere al campo nome della superclasse? SI NO Per accedere al campo nome è corretta l’espressione: imp.nome ? SI NO

Esistono altri modi? SI NO

Definire il codice di possibili alternative, per accedere al campo:

public String riportaNome (){

return nome;

}

In generale, in una sottoclasse è possibile accedere direttamente ad un campo privato di

un’istanza della superclasse? SI NO

In una sottoclasse è possibile usare un metodo privato della superclasse? SI NO

4

Scrivere il metodo init che inizializza con numeri dispari un array di interi di dimensione MAX, passato come parametro. L’array inizializzato andrà riportato all’ambiente chiamante. A scelta si usi un ciclo for o un ciclo while:

public static int[] init(int[] a) { for (int i=0; i < MAX; i++) a[i]=2*i + 1;

return a;

}

public static int[] init(int[] a) { int i=0;

while (i < MAX)

(3)

AA 2007/08 Programmazione, Prof. M.A. Alberti IV appello, 11 luglio 2008

3 a[i]=2*++i + 1;

return a;

}

5

Scrivere un metodo per rimuovere un elemento in posizione data da un array che verrà quindi riportato all’ambiente chiamante modificato. Sia la posizione dell’elemento da rimuovere sia l’array sono passati come parametri. Per rimuovere l’elemento si deve procedere ad eseguire lo slittamento di una posizione di tutti i valori dell’array dalla posizione data alla fine dell’array. Alla fine del processo la posizione finale e quella precedente risultano uguali e quindi quella finale viene posta al valore di defualt 0. Si supponga cha l’array sia un array di interi. Ad esempio la rimozione dell’elemento 2 dall’array [23 45 1 65 87] genera l’array [23 45 65 87 0]

public static int[] rimuovi(int p, int[] a) { for (int i = p; i < a.length-1;)

a[i]=a[++i];

a[a.length-1] = 0;

return a;

}

6

Utilizzando la classe StringTokenizer implementare un ciclo for necessario per inizializzare l’array di stringhe frase. Ad esempio: se in input è data la frase “questo è un esame” allora l’array frase dovrà essere inizializzato a [questo, è, un, esame].

System.out.print("input una riga di testo: ");

String riga = Keyboard.readString();

StringTokenizer processore_di_riga = new StringTokenizer(riga);

String [] frase = new String[processore_di_riga.countTokens()];

for (int i = 0; processore_di_riga.hasMoreTokens(); i++) frase[i] = processore_di_riga.nextToken();

7

La classe Numeri ha un membro d’istanza numeri di tipo array di interi di lunghezza MAX. Si scrivano i metodi per inizializzare l’array e per contare i valori pari archiviati. Cioè si scrivano i metodi:

int[] init() che inizializza un array con numeri pseudo-casuali compresi tra 1 e 10 (estremi inlcusi) e lo riporta all’ambiente chiamante

int conta() che conta i numeri pari contenuti nell’array membro d’istanza.

class Numeri {

final int MAX = 20;

private int [] numeri;

Numeri() {

numeri = new int[MAX];

}

public int[] init() {

for (int i = 0; i < MAX; i++)

(4)

AA 2007/08 Programmazione, Prof. M.A. Alberti IV appello, 11 luglio 2008

4 numeri[i] = (int) (Math.random() * 10) + 1;

return numeri;

}

public int conta() { int i =0, cont = 0;

while (i < MAX)

if (array_numeri[i++]%2 == 0) cont++;

return cont;

} }

Quindi sarebbe possibile istanziare un oggetto di classe Numeri Numeri oggetto_num = new Numeri();

e poi si potrebbe invocare i metodi sopra citati:

oggetto_num.init()

Poiche il metodo riporta l’array che inizializza anche all’ambiente si potrebbe inoltre utilizzare l’invocazione del metodo per inizializzare un array accessorio. Ad esempio int[] archivio = oggetto_num.init()

8

Per valutare una espressione aritmetica scritta in notazione postfissa, si usa una struttura dati di tipo Last In First Out. Disegnate lo stato dello stack utilizzato per valutare l’espressione quando si sia arrivati a scandire l’espressione fino al token 3:

1 5 + 2 * 3 1 + / ^

.

1 stack

5 2 3 3 4

direzione

crescita 1 1 6 6 12 12 12 12 3

token

letto 1 5 + 2 * 3 1 + /

Riferimenti

Documenti correlati

E’ possibile al di fuori della classe cambiare il valore del membro nome di un oggetto

Occorre definire una struttura dati per memorizzare i numeri già estratti; ad esempio un array le cui posizioni corrispondono ai numeri estraibili e il valore

Definite quindi la classe Tombola, che contiene il campo estratti ed il metodo estrai_prossimo(), che userà la classe Random del pacchetto java.util, tiene aggiornato

(2) Fornire lo Fornire lo scheletro scheletro della classe Java della classe Java VettoreReali VettoreReali (solo campi d'istanza e intestazioni dei metodi). (solo campi d'istanza

 Un errore in esecuzione, perch`e il metodo propone restituisce un oggetto di tipo dinamico LeggeTaglio;.  un errore in compilazione perch`e il metodo propone non `e

 Niente, perch´e dar`a un errore a tempo di compilazione Domanda 23 L’istruzione p.canta(g); stamper` a:. 

■ La funzione costruttore di un oggetto locale (definito all'interno di una funzione o di un blocco di istruzioni) viene eseguita nel momento in cui viene incontrata l'istruzione

Applicando il metodo di Fourier-Motzkin, risolvere il seguente problema di Programmazione Lineare, esibendo il valore della soluzione ottima (e delle variabili)