Soluzioni Degli Esercizi Di Riepilogo
Soluzioni degli esercizi di riepilogo
(Fondamenti di Informatica 1 – Walter Didimo)
Soluzioni delle prove al calcolatore
Esercizio 1 (esame del 13/01/2006)
class Matrice{
private String[][] mat; // variabile che memorizza la matrice rappresentata
/* costruttore che permette di passare la matrice rappresentata in fase di
istanziazione di un oggetto Matrice */
public Matrice (String[][] mat){
int m = mat.length;
this.mat = new String[m][m];
for (int i=0; i<m; i++)
for (int j=0; j<m; j++)
this.mat[i][j]=mat[i][j];
}
/* metodo che restituisce un array contenente tutte le stringhe della
diagonale principale che hanno lunghezza minore di k */
public String[] diagonale (int k) {
/* conta il numero di stringhe della diagonale di lunghezza minore di k */
int count = 0;
for (int i=0; i<this.mat.length; i++)
if (this.mat[i][i].length() < k)
count
++;
/* crea e riempie l’array da restituire */
String[] risultato = new String[count];
int
j=0;
for (int i=0; i<this.mat.length; i++)
if (this.mat[i][i].length() < k){
risultato[j]=this.mat[i][i];
j++;
}
return
risultato;
}
}
class ProvaMatrice{
public static void main (String[] args){
InputWindow in = new InputWindow ();
OutputWindow out = new OutputWindow ("Prova Matrica");
int dim = in.readInt("Dimensione della matrice?");
String[][] mat = new String[dim][dim];
for (int i=0; i<dim; i++)
for (int j=0; j<dim; j++)
mat[i][j] = in.readString ("Stringa (" + i + "," + j + ")?");
int k = in.readInt("Inserire un intero");
Matrice matrice = new Matrice (mat);
String[] ris = matrice.diagonale (k);
out.writeln ("Stringhe della diagonale più corte di " + k);
for (int i=0; i<ris.length; i++)
out.writeln
(ris[i]);
}
}
Esercizio 2 (esame del 30/06/2006)
class Esercizio{
public static int[] eliminaDoppi (int[] v){
/* esiste[k] varrà true se il numero k è già stato incontrato
nota: inizialmente tutti gli elementi di esiste varranno false */
boolean[] esiste = new boolean[10];
/* temp memorizza temporaneamente i numeri di v senza ripetizioni
nota: temp sarà riempito solo in parte */
int[] temp = new int[v.length];
/* count memorizza il numero di elementi copiati in temp, cioè
quanti sono gli elementi di v senza ripetizioni */
int count = 0;
for (int i=0; i<v.length; i++){
if
(!esiste[v[i]]){
temp[count]=v[i];
count++;
esiste[v[i]]=true;
}
}
/* risultato è l’array da restituire, cioè quello che memorizza gli
elementi di v senza ripetizioni. Tale array ha esattamente la
lunghezza che serve, cioè pari a count */
int[] risultato = new int[count];
for (int i=0; i<count; i++)
risultato[i]
=
temp[i];
return
risultato;
}
}
class ProvaEsercizio{
public static void main (String[] args){
InputWindow in = new InputWindow ();
OutputWindow out = new OutputWindow ();
int dim = in.readInt("Numero di elementi della sequenza?");
int[] sequenza = new int[dim];
for (int i=0; i<dim; i++)
sequenza[i]=in.readInt("Inserire elemento " + i);
int[] seqSenzaDoppi = Esercizio.eliminaDoppi(sequenza);
out.writeln ("Sequenza senza doppi");
for (int i=0; i<seqSenzaDoppi.length; i++)
out.write (seqSenzaDoppi[i] + " ");
}
}
Esercizio 3 (esame del 7/04/2006)
class Esercizio{
public static int[] calcolaMassimo (int[] a, int[] b, int[] c){
int[] max = new int[a.length];
for (int i=0; i<a.length; i++){
int
maxTraAeB;
if (a[i] < b[i])
maxTraAeB
=
b[i];
else
maxTraAeB
=
a[i];
if (maxTraAeB < c[i])
max[i]
=
c[i];
else
max[i]
=
maxTraAeB;
}
return
max;
}
}
class ProvaEsercizio{
public static void main (String[] args){
InputWindow in = new InputWindow ();
OutputWindow out = new OutputWindow ();
int dim = in.readInt("Dimensione delle sequenze?");
int[] a = new int[dim];
int[] b = new int[dim];
int[] c = new int[dim];
for (int i=0; i<dim; i++){
a[i] = in.readInt("Elemento a[" + i + "]?");
b[i] = in.readInt("Elemento b[" + i + "]?");
c[i] = in.readInt("Elemento c[" + i + "]?");
}
int[] max = Esercizio.calcolaMassimo (a,b,c);
out.writeln ("Stampa dei massimi");
for (int i=0; i<max.length; i++)
out.writeln
(max[i]);
}
}
Esercizio 4 (esame del 30/09/2005)
class StatSuMatrice{
public static void main (String[] args){
InputWindow in = new InputWindow ();
OutputWindow out = new OutputWindow ();
int r = in.readInt("Numero di righe?");
int c = in.readInt("Numero di colonne?");
/* inserimento matrice */
int[][] mat = new int[r][c];
for (int i=0; i<mat.length; i++)
for (int j=0; j<mat[i].length; j++)
mat[i][j] = in.readInt("Elemento (" + i + "," + j + ")?");
/* calcolo e stampa delle somme per riga */
for (int i=0; i<mat.length; i++){
int somma = 0;
for (int j=0; j<mat[i].length; j++)
somma
+=
mat[i][j];
out.writeln ("Somma elementi su riga " + i + "=" + somma);
}
/* calcolo e stampa del massimo e del minimo */
int max, rMax, cMax;
int min, rMin, cMin;
min = max = mat[0][0];
rMax = rMin = cMax = cMin = 0;
for (int i=0; i<mat.length; i++)
for (int j=0; j<mat[i].length; j++){
if
(max
<
mat[i][j]){
max
=
mat[i][j];
rMax
=
i;
cMax
=
j;
}
if
(min
>
mat[i][j]){
min
=
mat[i][j];
rMin
=
i;
cMin
=
j;
}
}
out.writeln ("massimo = " + max);
out.writeln ("posizione = (" + rMax + "," + cMax + ")");
out.writeln ("minimo = " + min);
out.writeln ("posizione = (" + rMin + "," + cMin + ")");
}
}
Esercizio 5 (esame del 6/04/2005)
class Sequenza{
private int[] seq;
private int count;
// numero di elementi aggiunti
/* costruttore: crea una sequenza vuota di dimensione pari a dim */
public Sequenza(int dim){
this.seq = new int[dim];
this.count
=
0;
}
/* aggiunge il numero k alla sequenza
PRE: la sequenza non deve essere piena */
public void aggiungi (int k){
if (count < this.seq.length){
this.seq[this.count]=k;
this.count++;
}
}
/* visualizza tutti i numeri della sequenza */
public void visualizza (){
for (int i=0; i<this.count; i++)
System.out.print (this.seq[i] + " ");
System.out.println
();
}
/* ritorna il numero minimo nella sequenza
PRE: la sequenza non deve essere vuota */
public int minimo (){
int
min=this.seq[0];
for (int i=0; i<this.count; i++)
if (min > this.seq[i])
min
=
this.seq[i];
return
min;
}
}
class ProvaSequenza{
public static void main (String[] args){
InputWindow in = new InputWindow ();
/* crea sequenza */
int dim = in.readInt("Dimensione della sequenza?");
Sequenza s = new Sequenza(dim);
/* inserisce numeri nella sequenza */
for (int i=0; i<dim; i++){
int k = in.readInt ("Elemento " + i + "?");
s.aggiungi(k);
}
/* visualizza la sequenza */
System.out.println ("La sequenza inserita e'");
s.visualizza();
/* visualizza il numero minimo */
System.out.println ("Il numero minimo e' " + s.minimo());
}
}
Esercizio 6 (esame del 9/12/2005)
class Quadrato{
public static int sommaIntorno (int[][] m, int i, int j){
int dim = m.length;
int somma = 0;
for (int k=i-1; k<=i+1; k++)
for (int h=j-1; h<=j+1; h++)
if ( !(k==i && h==j) &&
(k>=0
&&
k<dim)
&&
(h>=0
&&
h<dim)
)
somma += m[k][h];
return
somma;
}
}
class ProvaQuadrato{
public static void main (String[] args){
InputWindow in = new InputWindow ();
int dim = in.readInt ("Dimensione matrice?");
int[][] mat = new int[dim][dim];
for (int i=0; i<dim; i++)
for (int j=0; j<dim; j++)
mat[i][j]=in.readInt ("Elemento (" + i + "," + j + ")?");
for (int i=0; i<dim; i++)
for (int j=0; j<dim; j++){
int somma = Quadrato.sommaIntorno (mat,i,j);
System.out.println ("Somma dell’intorno di (" + i + "," + j +
") = " + somma);
}
}
}
Soluzioni delle prove scritte
Prova del 9/12/2005
Esercizio 1.
class Esame{
private String nomeEsame;
private int numStudenti;
private double votoMinimo;
……
}
Esercizio 2.
Errore 1: z non è inizializzata quando si valuta z = z + y (errore di compilazione)
Errore 2: il metodo deve restituire uno short, e non un int (errore di compilazione)
Errore 3: nel for, la condizione i<=x.length causerebbe un
ArrayIndexOutofBoundsExcpetion (errore di esecuzione)
Prova del 6 aprile 2005
Esercizio 1.
Un array in Java è un oggetto che rappresenta una sequenza finita di variabili tutte dello stesso tipo.
Esempio di istanziazione di un array di array di oggetti String.
new String[10][10];
Esercizio 2.
for (int i=6; i<100; i+=6)
System.out.println
(i);
Oppure (ma è una soluzione meno elegante)
for (int i=1; i<100; i++)
if
(i%6==0)
System.out.println
(i);
Prova del 24 giugno 2005
Esercizio 1
public static void ipotenusa (double cateto1, double cateto2){
double ip = Math.sqrt (cateto1*cateto1 + cateto2*cateto2);
System.out.println
(ip);
}
Esercizio 2
3b
b12
b3
b1
Prova del 13 gennaio 2006
Esercizio 1.
public static int[] arrayDiNumeri(){
int[] numero = new int[11];
for (int i=0; i<numero.length; i++)
numero[i]=i;
return
numero;
}
Esercizio 2.
Variabili di classe:
telefonoCentralino, numeroUtenzeTotali
Variabili di istanza:
nome, cognome, telefono
Variabili locali:
n, c, t
Prova del 30 giugno 2006
Esercizio 1 Scrivi un metodo di classe (completo di prototipo) che riceve in input un array di interi
e stampa a video tutti i numeri dell’array che hanno un valore compreso nell’intervallo [0,10]
public static void stampaArray (int[] a){
for (int i=0; i<a.length; i++)
if (a[i]<=10 && a[i]>=0)
System.out.println
(a[i]);
}
Esercizio 2
byte
8
bit
short
16
bit
int
32
bit
long
64
bit
float
32
bit
double
64 bit
char
16
bit
boolean 1
bit