Fondamenti di Informatica I

Corso di Laurea in Ingegneria Informatica e Automatica - Corso di Laurea in Ingegneria dei Sistemi Informatici

HomePage | Avvisi | Informatica Automatica | Sistemi Informatici | Programma | Materiale didattico | Esercitazioni | Esami | Anni Precedenti | Login

Esercizi misti di programmazione Java - collezione 5


Scrivere metodi che risolvono i seguenti problemi e scrivere dei main di prova per testarli.

Esercizio 080106

Scrivere un metodo statico creaAbete che, dato un intero n dispari, restituisce una matrice di char in cui ogni cella contiene uno spazio ' ' o un asterisco '*' in modo da formare il disegno di un abete la cui base contiene n asterischi. Ad esempio, per n=11, il risultato deve essere la matrice 7x11:

     *     
    ***    
   *****   
  *******  
 ********* 
***********
     *     
Per n=5, il risultato deve essere la matrice 4x5:

  *  
 *** 
*****
  *  
Per n=3, si avrà invece la matrice 3x3:

 * 
***
 * 
Scrivere un main di prova per testare il metodo scritto.

Esercizio 080105a

Si aggiunga alla classe:
public class Cerchio {
	public double x,y,r; // coordinate centro e raggio
}
un metodo di istanza numIntersezioni che, dato un array di cerchi, restituisce il numero di quelli che si intersecano con il cerchio su cui il metodo è invocato.

Si ricordi che due cerchi si intersecano nel piano se la somma dei loro raggi è superiore alla distanza dei due centri. Si ricordi inoltre che per calcolare la distanza fra due punti (x1,y1) e (x2,y2) basta calcolare la radice quadrata di (x1-x2)2+(y1-y2)2.

Scrivere inoltre un main di prova per testare il metodo scritto.

Esercizio 080105b

Scrivere un metodo statico cerchioConMaxIntersezione che, dato un array di cerchi, restituisce il cerchio che si interseca con il più alto numero di altri cerchi. Si assuma che i cerchi siano rappresentati come oggetti della classe:
public class Cerchio {
	public double x,y,r; // coordinate centro e raggio
}
Si ricordi che due cerchi si intersecano nel piano se la somma dei loro raggi è superiore alla distanza dei due centri. Si ricordi inoltre che per calcolare la distanza fra due punti (x1,y1) e (x2,y2) basta calcolare la radice quadrata di (x1-x2)2+(y1-y2)2.

Scrivere inoltre un main di prova per testare il metodo scritto.


Esercizio 080105

Si scriva un metodo costruisciMatrice che, dato un array di oggetti della seguente classe

public class Cella {
    public int i, j, val;
}


costruisce una matrice in cui ogni cella è zero, tranne quelle specificate dall'array di celle. Assumere che in ogni oggetto Cella, val contiene il valore della cella e i,j le sue coordinate. La dimensione della matrice deve essere la minima possibile per includere tutti i valori specificati dall'array.

Ad esempio, dato un array contenente le tre celle (0,1,7), (1,3,2), (2,1,6), il risultato deve essere la matrice 3x4:

0 7 0 0
0 0 0 2
0 6 0 0


Scrivere inoltre un main di prova per verificare il metodo scritto, aggiungendo eventualmente per comodità di inizializzazione dell'array di celle un metodo costruttore a tre argomenti alla classe Cella.

Esercizio 080104a

Scrivere un metodo statico filtraLettereBasse che, data una stringa e un carattere (di tipo char), restituisce un'altra stringa ottenuta da quella di ingresso togliendo tutti i caratteri con codice strettamente inferiore a quello del carattere dato.

Ad esempio, data la stringa "mi sono difeso bene" e il carattere 'e', il risultato deve essere: "misonoifesoene". Infatti vengono rimossi gli spazi (che hanno un codice inferiore a ogni lettera) e le lettere 'b' e 'd'.

Data invece la stringa "se ti prendo" e il carattere 'm', il risultato deve essere "stprno".

Scrivere inoltre un main di prova per verificare il metodo scritto.


Esercizio 080104

Scrivere un metodo statico verificaSottomatrice che, data una matrice di double e un intero k dispari, restituisce true se e solo se esiste una cella (i,j) che contiene la media dei valori della sottomatrice k x k centrata nella cella stessa. Dovranno essere escluse dalla media quelle celle della sottomatrice k x k che risultassero uscire dai limiti della matrice.

Ad esempio, data la seguente matrice e k=3:

1.0 2.0 1.0 0.0 1.0
3.0 2.0 5.0 1.0 0.0
1.0 1.0 2.0 8.0 9.0


il risultato deve essere true perché la cella (1,1) contiene 2.0, che è uguale alla somma dei valori nella cella (1,1) e nelle celle adiacenti, cioè 1.0+2.0+1.0+3.0+2.0+5.0+1.0+1.0+2.0=18.0, diviso per 9. Inoltre, la cella (0,4) contiene 1.0, che è la media di 0.0, 1.0, 0.0 e 1.0.

Data invece la seguente matrice, sempre per k=3:

1.0 4.0 9.0
2.0 6.0 8.0
3.0 5.0 9.0


il risultato deve essere false poiché nessuna sua cella soddisfa la condizione richiesta.

Ovviamente, per k=1 il metodo deve sempre restituire true.

Scrivere inoltre un main di prova per verificare il metodo scritto.

Esercizio 071230b

Una matrice n x n di int occupa n2 celle di memoria. Se però la maggior parte di queste celle vale zero, esiste una rappresentazione alternativa degli stessi dati che permette di occupare una quantità di memoria proporzionale alle sole celle diverse da zero. L'idea è quella di mantenere una matrice k x 3 dove k è il numero di celle diverse da zero. Ogni riga ha la forma {i,j,val}, dove i e j sono gli indici di riga e colonna di una cella e val il suo valore (diverso da zero).

Ad esempio, la seguente matrice 5x5:

0 7 0 0 0
2 0 0 0 0
0 0 0 0 0
0 0 5 0 0
0 0 0 0 0


occupa 25 celle di memoria, ma solo 3 contengono un valore diverso da zero. Il suo contenuto informativo può essere rappresentato in modo più compatto mediante la matrice equivalente 3x3:

0 1 7
1 0 2
3 3 5


che occupa solo 9 celle di memoria.

Data la classe:
public class MatriceSparsa {
	private int n;     // lato della matrice rappresentata
	private int v[][]; // matrice k x 3 compatta
}

1) Aggiungere alla classe un metodo costruttore ad un argomento che, data una matrice n x n di interi in ingresso, inizializza l'oggetto MatriceSparsa memorizzando in n il lato della matrice e creando la matrice compatta v con i soli valori non zero della matrice.

2) Aggiungere alla classe un metodo di istanza getMatrice() a zero argomenti che ricostruisce la matrice originaria a partire dai campi n e v dell'oggetto su cui il metodo è invocato.

Esempio di uso:
int[][] m = { 
	{0, 0, 5, 0}, 
	{1, 0, 0, 0}, 
	{0, 0, 3, 0}, 
	{0, 2, 0, 0} };

MatriceSparsa s = new MatriceSparsa(m);
int[][] m2 = s.getMatrice();
// ora m2 dovrebbe essere uguale a m

Esercizio 071230a

Scrivere un metodo cripta che, data una stringa, restituisce una nuova stringa della stessa lunghezza formata dagli stessi caratteri alfanumerici della stringa di ingresso, ma con un codice (secondo lo standard Unicode) di 1 più grande.

Ad esempio, data la stringa "ciao", la stringa criptata risultante deve essere "dlbp".

Scrivere inoltre un metodo decripta che, data una stringa, restituisce una nuova stringa della stessa lunghezza formata dagli stessi caratteri alfanumerici della stringa di ingresso, ma con un codice Unicode (o ASCII) di 1 più piccolo.

Ad esempio, data la stringa "dlbp", la stringa decriptata risultante deve essere "ciao".

Ovviamente, s.equals(decripta(cripta(s))) deve restituire true per qualunque stringa s.

Scrivere un main di prova per testare i metodi scritti.


Esercizio 071230

Scrivere un metodo maxPrefissoAlternato che, data una stringa, restituisce il più lungo prefisso della stringa in cui vocali e consonanti si alternano strettamente senza che ci siano due consonanti o due vocali consecutive.

Ad esempio, il massimo prefisso alternato di:

"manzo" è "man"
"lunotto" è "lunot"
"cuscino" è "cus"
"amore" è "amore"
"finestra" è "fines"
"ciao" è "cia"

Si assuma che la stringa di ingresso sia formata da sole lettere alfabetiche minuscole.

Scrivere inoltre un main di prova per testare il metodo scritto.

Esercizio 071229

Scrivere un metodo statico rimuoviDuplicati che, dato un array di interi, restituisce un nuovo array di interi ottenuto da quello di ingresso rimuovendo tutti i duplicati.

Ad esempio, dato {1,3,5,4,6,5,9,1,2}, il risultato deve essere {1,3,5,4,6,9,2}.

Fare poi overloading del metodo rimuoviDuplicati scrivendone una versione che lavora su array di String invece che di int.

Scrivere infine un main di prova per testare i due metodi scritti.

Esercizio 071228

Scrivere un metodo statico cercaStringaInversa che, date due stringhe a e b, restituisce true se la stringa a rovesciata appare come sottostringa di b, e false altrimenti.

Ad esempio, se a="bene" e b="tenenebre", il risultato deve essere true, poiché "tenebre" contiene "eneb" che è il rovescio di "bene" (casualmente, ha anche un senso :-).

Scrivere inoltre un main di prova per testare il metodo scritto.

Esercizio 071227

Si scriva un metodo statico contaOccorrenze che, date due stringhe a e b, conta il numero di occorrenze di a in b, cioè il numero di volte che a appare come sottostringa di b. Se a è più lunga di b, il metodo deve restituire ovviamente zero.

Ad esempio, se a="la" e b="la fine della storia" il metodo deve restituire 2. Se a="burger" e b="hamburger" il metodo deve restituire 1. Se infine a="uno" e b="cinque" il metodo deve restituire 0.

Scrivere inoltre un main di prova per testare il metodo scritto.

Esercizio 071226

Scrivere un metodo statico matriceCornici che, dati due interi m ed n, restituisce una matrice m x n di interi formata da rettangoli concentrici con numeri crescenti a partire da 1 come nel seguente esempio per m=6 e n=8:

1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 1
1 2 3 3 3 3 2 1
1 2 3 3 3 3 2 1
1 2 2 2 2 2 2 1
1 1 1 1 1 1 1 1


Per m=4 e n=4 la matrice prodotta dovrebbe essere invece:

1 1 1 1
1 2 2 1
1 2 2 1
1 1 1 1


Si assuma che m ed n siano non negativi e divisibili per 2 (cioè siano numeri pari).

Scrivere inoltre un main di prova per verificare il metodo scritto.

Esercizio 071218a

Si scriva un metodo statico maxSottomatr che, data una matrice di interi, restituisca il lato della piu' grande sottomatrice quadrata formata da soli elementi non negativi.

Ad esempio, data la matrice:
-1  7  1  4  9
 2  1  5 -1  1
 1  9  3  1 -6
 4  1  4  3  9

il metodo deve restituire 3. Infatti la sottomatrice quadrata
2  1  5
1  9  3
4  1  4

è formata da soli elementi positivi, e ogni sottomatrice piu' grande contiene almeno un elemento negativo.

Scrivere un main di prova per verificare il metodo scritto.

Esercizio 070108

Scrivere un metodo statico togliVocali che, data una stringa s, restituisce una nuova stringa ottenuta da s togliendo tutte le vocali.

Il metodo deve avere il seguente prototipo:

public static String togliVocali(String s)

Scrivere inoltre una classe con un main di prova per testare il funzionamento del metodo in vari scenari possibili.

Esercizio 070107

Scrivere un metodo statico intersezione che, dati due array A e B di interi, restituisce un nuovo array contenete tutti e soli gli elementi che appartengono sia ad A che a B. Gli array A e B possono contenere duplicati, ma l'array restituito no.

Il metodo deve avere il seguente prototipo:

public static int[] intersezione(int[] A, int[] B)

Scrivere inoltre un main di prova per testare il funzionamento del metodo in vari scenari possibili.

Esercizio 061225

Scrivere un metodo riscala che, data una matrice v di dimensione n x m, restituisce una nuova matrice q di interi di dimensione n/2 x m/2 tale che per ogni i e j con 0 <= i < n/2 e 0 <= j < m/2, q[i][j] contiene la media dei quattro valori v[2*i][2*j], v[2*i][2*j+1], v[2*i+1][2*j], v[2*i+1][2*j+1] (arrotondata all'intero inferiore).

Scrivere la soluzione in modo da poter compilare il seguente programma di prova senza doverlo modificare.

class ProvaEserc6 {
    public static void main(String[] args){
        int[][]v = {
            { 0, 255, 255, 255, 255,   0, 0 },
            { 0, 255,   0,   0,   0, 255, 0 },
            { 0, 255,   0,   0,   0, 255, 0 },
            { 0, 255,   0,   0,   0, 255, 0 },
            { 0, 255, 255, 255, 255,   0, 0 },
            { 0, 255,   0, 255,   0,   0, 0 },
            { 0, 255,   0,   0, 255,   0, 0 },
            { 0, 255,   0,   0,   0, 255, 0 }
        };
        int[][]q = Eserc6.riscala(v);
        stampa("Matrice estratta", q);
        int[][]c = {
            { 127, 127, 127 },
            { 127,   0, 127 },
            { 127, 19163 },
            { 127,   0, 127 }
        };
        stampa("Matrice corretta", c);
    }
    private static void stampa(String s, int[][] v){
        System.out.println(s);
        for (int i=0; i<v.length; i++) {
            for (int j=0; j<v[0].length; j++) System.out.print(v[i][j]+" ");
            System.out.println();
        }
    }
}

Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by Wikka Wakka Wiki 1.1.6.3
Page was generated in 0.1358 seconds