Sei sulla pagina 1di 6

Correzione dell'Esercitazione di Complementi di Informatica

del 17 giugno 2008

Esercizio 1

Scrivere un programma Java caratterizzato dal solo metodo main. Questo programma deve:

(1) leggere un numero intero N digitato dall'utente (tramite l'apposito metodo della classe
SavitchIn);

(2) N stringhe S1, S2, ..., SN digitate dall'utente dopo il numero N (tramite
l'apposito metodo della classe SavitchIn);

(3) stampare a video la più corta tra le stringhe S1, S2, ..., SN.

Ad esempio:

Se l'utente scrive 3 e successivamente scrive ciao, poi buongiorno a tutti, ed in fine


elefante, il programma deve stampare a video ciao.

Svolgimento
class Esercizio {
public static void main (String [] args) {

System.out.println("Quante stringhe vuoi scrivere?");


int numStringhe = SavitchIn.readLineInt();

String stringaPiuCorta, s;

if (numStringhe > 0) {

stringaPiuCorta = SavitchIn.readLine();

for (int i = 1; i < numStringhe; i++) {

s = SavitchIn.readLine();

if (s.length() < stringaPiuCorta.length()) {

stringaPiuCorta = s;
}
}

System.out.println("Stringa piu corta: " + stringaPiuCorta);

1
} else {

System.out.println("Hai scelto di non scrivere nessuna stringa");


}
}

Esercizio 2
Scrivere un metodo Java statico chiamato isIdentity che riceve in ingresso una matrice
(vettore bidimensionale) A di numeri interi e restituisce come risultato un valore booleano uguale a
true se la matrice A è uguale alla matrice identità e uguale a false altrimenti.

Svolgimento
static boolean isIdentity (int [][] A) {

boolean tuttoOk = true;

for (int i = 0; (i < A.length && tuttoOk); i++) {


for (int j = 0; (j < A[i].length && tuttoOk); j++) {

if ( ! ((i == j) && (A[i][j] == 1)) || ((i != j) && (A[i][j] == 0))) {

tuttoOk = false;
}
}
}

return(tuttoOk);
}

2
Esercizio 3

Scrivere un metodo Java statico chiamato prodottoMatrici che riceve in ingresso due matrici
(vettori bidimensionali) A e B di numeri reali. Il metodo prodottoMatrici deve:

• Controllare che il numero di colonne di A sia uguale al numero di righe di B. In caso


contrario, stampare a video un messaggio di errore ed arrestare l'esecuzione del programma.

• Qualora il numero di colonne di A sia uguale al numero di righe di B, restituire come


risultato una matrice uguale al prodotto tra A e B.

Svolgimento

static double [][] prodottoMatrici (double[][] A, double[][] B) {

double[][] M;
double somma;

// ... eventualmente inserire qui il codice per inizializzare la matrice M


// ... con dei valori di default

if (A.length != B[0].length) {
// ... stampa di errore e terminazione
} else {

for (int i = 0; i < A.length; i++) {


for (int j = 0; j < B[i].length; j++) {

somma = 0;

for (int z = 0; z < B.length; z++) {

somma = somma + A[i][z] * B[z][j];


}

M[i][j] = somma;
}
}
}

return(M);
}

3
Esercizio 4

Scrivere un programma Java composto da:

• Una classe CertificatoDiResidenza caratterizzata da un nome, un cognome, una


città di residenza (tutti e tre questi attributi possono essere rappresentati come stringhe), un
riferimento al certificato successivo in una pila e un metodo per stampare tutte le
informazioni che caratterizzano questa classe.

• Una classe Pila, che realizza una pila di certificati di residenza, caratterizzata da un
metodo per inserire un nuovo certificato sulla testa della pila, un metodo per togliere un
elemento dalla pila prendendolo dalla testa e un metodo per stampare tutti i certificati che
sono nella pila. I parametri del metodo che inserisce i certificati nella pila devono essere un
nome, un cognome e una città (in altri termini, chi usa questo metodo può non essere a
conoscenza dell'esistenza della classe CertificatoDiResidenza).

• Una classe ImpiegatoComunale contenente il metodo main che istanzia una pila di
certificati di residenza, vi inserisce un numero a piacere di certificati e successivamente
elimina i certificati dalla pila fino a che non trova in testa alla pila un certificato
appartenente a una persona di nome Mario Rossi. Una volta trovato questo certificato,
stampa la città di residenza di Mario Rossi.

Svolgimento

class CertificatoDiResidenza {

String nome;
String cognome;
String citta;
CertificatoDiResidenza succ;

CertificatoDiResidenza (String n, String co, String ci, CertificatoDiResidenza ce) {


nome = n;
cognome = co;
citta = ci;
succ = ce;
}

void stampa() {
System.out.println(nome + " " + cognome + " " + citta);
}
}

4
class Pila {

CertificatoDiResidenza primo;

Pila (CertificatoDiResidenza p) { primo = p;}

void inserisci (String nome, String cognome, String citta) {

CertificatoDiResidenza c = new CertificatoDiResidenza (nome,


cognome,
citta,
primo);

primo = c;
}

void cancella() {

if (primo != null) {

primo = primo.succ;
}
}

void stampa() {

CertificatoDiResidenza c = primo;

while (c != null) {

c.stampa();
c = c.succ;
}
}
}

5
class ImpiegatoComunale {
public static void main (String [] args) {

Pila p = new Pila(null);

p.inserisci("Francesco", "Bianchi", "Roma");


p.inserisci("Mario", "Rossi", "Milano");
p.inserisci("Giuseppe", "Verdi", "Como");

//... inserire altri certificati di residenza a piacere

while (! ((p.primo.nome.equals("Mario")) &&


(p.primo.cognome.equals("Rossi")))) {

p.cancella();
}

System.out.println(p.primo.citta);
}
}