• Non ci sono risultati.

Esercizi sulle tecniche di ricerca (Fondamenti di Informatica 2 – Walter Didimo)

N/A
N/A
Protected

Academic year: 2021

Condividi "Esercizi sulle tecniche di ricerca (Fondamenti di Informatica 2 – Walter Didimo)"

Copied!
2
0
0

Testo completo

(1)

Esercizi sulle tecniche di ricerca

(Fondamenti di Informatica 2 – Walter Didimo)

Esercizio 1 Scrivere un metodo di classe di nome cerca che prende in ingresso un array seq di stringe già ordinate alfabeticamente in senso non decrescente, e una ulteriore stringa elem, e che restituisce:

• la posizione di elem in seq, se elem è contenuta in seq

• -1, se elem non è contenuta in seq

Il metodo deve essere implementato con una tecnica di ricerca dicotomica, in modo che la sua complessità computazionale sia O(log N), dove N è la dimensione dell’array seq.

Scrivere inoltre un metodo main che effettua il test del metodo cerca. In particolare, il metodo main deve far inserire all’utente una sequenza di stringhe, assicurandosi che tale sequenza sia ordinata alfabeticamente; farà poi inserire una ulteriore stringa da ricercare e visualizzerà all’utente l’esito della ricerca.

Esercizio 2 Un oggetto della classe StringheOrdinate rappresenta una sequenza di stringhe ordinate alfabeticamente in senso non decrescente. La sequenza può contenere un numero massimo di stringhe predefinito in fase di creazione dell’oggetto. Lo scheletro della classe è come segue:

class StringheOrdinate{

private String[] seq; // sequenza ordinata di stringhe

private int count; // numero di elementi memorizzati nell’array

/* crea un’istanza della classe, fissando a dim la dimensione massima della sequenza */

public StringheOrdinate (int dim){...}

/* aggiunge l’elemento elem se c’è ancora spazio nell’array; l’elemento viene inserito nella posizione giusta, mantenendo cioè l’ordinamento alfabetico. In caso di inserimento, il metodo restituisce la posizione del nuovo elemento, altrimenti restituisce -1 */

public int aggiungi (String elem){...}

/* ricerca l’elemento elem; se presente, ne restituisce la posizione, altrimenti restituisce -1 */

public int cerca (String elem){...}

/* fornisce una descrizione completa della sequenza di elementi */

public String toString (){...}

}

Svolgere i seguenti punti:

1. Implementare la classe StringheOrdinate;

2. Analizzare la complessità asintotica di ciascun metodo implementato.

3. Scrivere una classe di test che verifica il corretto funzionamento della classe StringheOrdinate.

(2)

Esercizio 3 Ampliare la classe StringheOrdinate dell’esercizio precedente, aggiungendo il seguente metodo di istanza:

/* elimina l’elemento elem se presente. In caso di eliminazione restituisce true; se l’elemento non è presente, restituisce false. */

public boolean elimina (String elem){...}

Esercizio 4 Un oggetto della classe RubricaTelefonica rappresenta una rubrica che permette di memorizzare, e ricercare utenze telefoniche in numero qualunque. Lo scheletro della classe è come segue. Una utenza telefonica è modellata attraverso la seguente classe:

class Utenza{

private String cognome, nome, telefono;

/* crea una utenza con i dati specificati */

public Utenza (String cognome, String nome, String telefono){..}

/* restituisce il cognome dell’utenza */

public String getCognome () {..}

/* restituisce il nome dell’utenza */

public String getNome () {..}

/* restituisce il telefono dell’utenza */

public String getTelefono () {..}

/* restituisce una descrizione completa dell’utenza */

public String toString (){..}

}

La classe RubricaTelefonica ha il seguente scheletro:

class RubricaTelefonica{

private Utenza[] seq; // memorizza la lista delle utenze

private int count; // memorizza il numero di utenze correnti

/* crea una rubrica telefonica vuota */

public RubricaTelefonica (){..}

/* aggiunge alla rubrica l’utenza specificata, mantenendo le utenze ordinate alfabeticamente per cognome */

public void aggiungi (String cognome, String nome, String tel){..}

/* restituisce la descrizione completa dell’utenza con cognome e nome specificati; se l’utenza non esiste, restituisce null */

public String cerca(String cognome, String nome){..}

/* restituisce una descrizione completa della rubrica */

public String toString (){..}

}

Si chiede di: (i) implementare le classi Utenza e RubricaTelefonica; (ii) implmentare una classe di test per la classe RubricaTelefonica. Si noti in particolare che la rubrica deve poter contenere un numero arbitrariamente elevato di utenze. Questo implica che se il metodo aggiungi non trova spazio per inserire una nuova utenza perché l’array seq è pieno, il metodo dovrà preventivamente sostituire seq con un array di dimensione maggiore e copiarci dentro gli elementi già presenti. Una scelta tipica è quella di sostituire seq con un array di dimensione doppia.

Riferimenti

Documenti correlati

La classe ContoCorrente ha inoltre una variabile statica, di nome massimoScoperto, che indica (in valore assoluto) il massimo valore di scoperto consentito per ogni conto corrente

La classe ContoCorrente ha inoltre una variabile statica, di nome massimoScoperto, che indica (in valore assoluto) il massimo valore di scoperto consentito per ogni conto corrente

• Il metodo di classe static void stampaIntersezione (Intervallo interv1, Intervallo interv2), che visualizza sullo standard output tutti numeri compresi nell’intersezione tra

Scrivere inoltre una classe ProvaCoppiaDiStringhe, avente il solo metodo main, che fa inserire all’utente due stringhe e che testa tutti i metodi della classe CoppiaDiStringhe,

Scrivere il codice della classe Esame, e scrivere inoltre il codice di una classe ProvaEsame che consente, attraverso il suo metodo main, di inserire un appello di esame e tutti

• Un costruttore che consente di definire una nuova TabellaVoti; il costruttore deve prendere in ingresso un array di stringhe che definisce la sequenza dei nomi degli studenti,

• Un metodo di istanza, di nome analizza, che non ha parametri in ingresso e che restituisce sotto forma di oggetto String una descrizione comprendente: (1) il numero di numeri pari

b) il corpo della classe, che si struttura nella definizione degli attributi (variabili di istanza e di classe) e nella definizione dei metodi. - Il cast esplicito si rende