• Non ci sono risultati.

Classe 4D Informatica (disciplina: Informatica)

N/A
N/A
Protected

Academic year: 2021

Condividi "Classe 4D Informatica (disciplina: Informatica)"

Copied!
7
0
0

Testo completo

(1)

ESERCIZI DI INFORMATICA 4D INFORMATICA

La prova di recupero del debito di fine agosto verterà sulla programmazione ad oggetti in linguaggio Java e sarà di tipo pratico al PC, mediante uso di netBeans.

A tal fine sono proposti esercizi di programmazione in linguaggio Java, ma si consiglia di corredare inizialmente ciascun progetto con almeno il proprio diagramma delle classi UML. Nonostante ciò, si precisa che la progettazione UML non sarà oggetto della prova di verifica del recupero di fine agosto.

Gli alunni senza giudizio sospeso in Informatica devono svolgere almeno il 50% degli

esercizi proposti (differenziandoli equamente nei vari argomenti).

Gli alunni con giudizio sospeso dovranno svolgere tutti gli esercizi proposti.

Alla prima lezione di Informatica ad inizio anno scolastico la docente ritirerà TUTTI i

lavori e li valuterà.

PRIMI PROGRAMMI IN LINGUAGGIO JAVA Esercizio 1

Scrivere una classe java UtilityStringhe1 che contenga un metodo statico static void stampaIniziali(String nome, String cognome) che stampa a schermo le iniziali di nome e cognome. Scrivere una classe cliente ClienteUtilityStringhe1 che contiene un metodo main che prende due stringhe da tastiera (nome e cognome) e utilizzando il metodo stampaIniziali stampare le iniziali a schermo.

Esercizio 2

Scrivere la classe UtilityStringhe2 aggiungendo alla classe UtilityStringhe1 un metodo static String iniziali(String nome, String cognome) che ritorna una Stringa che è la concatenazione delle iniziali delle due stringhe. Scrivere una classe ClienteUtilityStringhe2 per stampare le iniziali con il metodo showMessageDialog della classe JOptionPane utilizzando il metodo iniziali appena definito.

Esercizio 3

Scrivere la classe UtilityStringhe aggiungendo alla classe UtilityStringhe1 un metodo static String invertiIniziali(String str) che ritorna una Stringa che è la ottenuta dalla stringa str mettendo come primo carattere l'ultimo e viceversa. Scrivere una classe ClienteUtilityStringhe con un metodo main che prenda una stringa in ingresso da tastiera e stampa su una finestra la stringa con la prima e l'ultima lettere invertite.. Esercizio 4

Si vuole realizzare una applicazione che gestisca dei brani musicali in formato digitale. Le caratteristiche salienti di ciascun brano musicale sono formato (mp3, wav, etc.) il titolo e l'autore del brano. Scrivere una classe BranoDigitale che rappresenti tutte le caratteristiche di un brano musicale digitale. La classe deve inoltre mettere a disposizione le seguenti operazioni:

• String getAutore() che ritorna l'autore del brano

• String getTitolo() che ritorna il titolo di un brano musicale • String getFormato() che ritorna il formato di un brano musicale

• void setFormato(String nuovoFormato) che cambia il formato di un brano musicale La classe deve inoltre avere due costruttori:

• Un costruttore con due argomenti autore e titolo, che setta l'autore ed il titolo del brano ai valori passati come parametro, ed il formato a null.

• Un costruttore con tre valori: autore, titolo e formato che setta tutte le variabili di istanza della classe.

Creare una classe principale ClienteBranoDigitale per verificare il corretto funzionamento della classe scritta BranoDigitale.

Esercizio 5

Scrivere una classe java Logaritmo e definire un metodo statico calcolaLog(double a) che calcoli il logaritmo naturale di a. Scrivere il metodo main della classe Logaritmo che prenda in input un double e stampi a schermo il logaritmo naturale del numero letto.[il logaritmo naturale è il logaritmo in base e. esiste una funzione della classe math per calcolarlo]

(2)

Esercizio 6

Scrivere una classe nuovoOperatore ed un predicato statico NAND(boolean a, boolean b) definito come il negato dell'operatore and (Negative AND). Scrivere il metodo main della classe nuovoOperatore che stampi la tavola di verità dell'operatore NAND, quindi legga da input due valori booleani e stampi il risultato.

Esercizio 7

Aggiungere ala classe definita nell'esercizio 4, che rappresenta brani digitali, un predicato Uguale che preda come parametro un brano digitale e restituisca true se e solo se il brano digitale che è oggetto di invocazione del metodo è uguale al brano digitale passato come parametro. Due brani digitali sono uguali se hanno stesso autore, titolo e formato. Scrivere anche un apposita classe cliente della classe clienteBranoDigitale per testare la correttezza del metodo scritto. La classe cliente deve creare nel metodo main due oggetti di tipo BranoDigitale richiedendo le informazioni necessarie all'utente. Deve quindi essere invocato il metodo Uguale sui due oggetti per verificarne il funzionamento.

Esercizio 8

Scrivere una programma che legge da tastiera un intero e stampa un messaggio a video secondo la seguente tabella: Valore Messaggio v >= 700 Montagna 700 > v >= 300 Collina 300 > v >= 0 Pianura 0 > v Errore Esercizio 9

Scrivere una programma java che legga da input una stringa rappresentante il nome di un mese dell'anno, e stampi un messagio indicante il numero di giorni di quel mese [si considera sempre un anno come non bisestile].

Esercizio 10

Scrivere una programma java per rappresentare dei giocatori di baseball. Per ciascun giocatore devono essere rappresentati il nome come stringa, un punteggio che rappresenta la bravura del giocatore in battuta e la sua età. Si devono quindi realizzare i seguenti metodi:

• giocatore(String nome, int eta) costruttore con due argomenti.

• giocatore(String nome, int eta, double valore) costruttore con tre argomenti. • String getNome() che ritorna il nome del giocatore.

• double getPunteggio() che ritorna il punteggio del giocatore.

• void setPunteggio(double nuovoPunteggio) che pone il punteggio del giocatore a nuovoPunteggio. • int getEta() che ritorna l'età del giocatore.

Si deve inoltre realizzare un metodo boolean migliore(giocatore g) che ritorna true se l'oggetto di invocazione è migliore del giocatore g passato come parametro, false altrimenti. Un giocatore è migliore di un altro se ha un punteggio più alto. A parità di punteggio il giocatore con l'età più bassa è considerato migliore. Si realizzi inoltre una classe clienteGiocatore per verificare il corretto funzionamento di tutte le funzioni della classe giocatore.

Esercizio 11

Scrivere una programma java per rappresentare delle cisterne. Per ciascuna cisterna si deve rappresentare un identificativo numerico univoco per la cisterna, una capacità massima e lo stato attuale della cisterna (quantità di materiale contenuto nella cisterna). Si devono quindi realizzare i seguenti metodi:

• cisterna(int identificativo, int capacita) costruttore con due argomenti pone lo stato della cisterna a 0.

• cisterna(int identificativo, int capacita, int stato) costruttore con tre argomenti. • int getId() che ritorna l'identificativo della cisterna.

• int getCapacita() che ritorna la capacità attuale della cisterna. • int getStato() che ritorna lo stato attuale della cisterna.

• boolean aggiungiValore(int quantita) che aggiunge il valore quanità allo stato della cisterna. Se lo stato eccede la capacità lo stato deve essere posto pari alla capacità della cisterna e viene segnalato

(3)

un messaggio di errore indicante cisterna piena ed il metodo ritorna il valore false. Altrimenti il metodo ritorna il valore true.

• int togliValore(int quantita) che preleva il valore quanità dallo stato della cisterna e lo restituisce. Se lo stato risulta minore di quantita il metodo restituisce come valore lo stato attuale e segnala un messaggio di errore indicante cisterna vuota.

• boolean equivalente(cisterna c) che ritorna true se l'oggetto di invocazione è ugualle alla cisterna c. Due cisterne sono equivalenti se hanno la stessa capacità residua: capacità massima - stato attuale. Si realizzi inoltre una classe clienteCisterna per verificare il corretto funzionamento di tutte le funzioni della classe giocatore.

Esercizio 12

Scrivere una programma guess che gioca con l'utente. Il gioco consiste nel far indovinare un numero all'utente tramite mosse successive. Il programma inizializza un numero qualsiasi compreso tra 0 e 100. Quindi chiede all'utente di immettere un numero per indovinare quello inizializzato dal programma. Se il numero che l'utente immette è più grande del numero iniziale, il programma deve restituire un messaggio che indica che il numero è più grande, se il numero è più piccolo segnala che il numero ` più piccolo. Se l'utente indovina il numero, un segnale a schermo indica il numero di mosse eseguite. Il programma deve prevedere che l'utente decida di uscire dal gioco prima di indovinare il numero.

Esercizio 13

Scrivere tre programmi java, uno per trovare il minimo tra un insieme di interi tutti strettamente minori di 100. Uno che calcola il minimo tra un insieme di interi che contiene almeno un elemento, ed uno per ottenere il minimo nel caso generale (insieme può essere vuoto e l'intervallo di interi non è limitato). L'insieme di interi deve essere inserito dall'utente. Quando l'utente interrompe di immettere interi viene restituito un messaggio che dice qual'è l'intero minore inmmesso oppure indica che l'insieme ` vuoto. Provare a violare appositamente le considzioni poste nei primi due programmi e osservate cosa accade. Esercizio 14

Scrivere una programma java che accetti in ingresso una serie di stringhe e stampi la stringa più lunga immessa.

Esercizio 15

Una funzione campionata è una funzione y=f(x) i cui valori y sono definiti solamente per determinati valori di x (detti punti di campionamento) opportunamente intervallati. In particolare, una funzione campionata è caratterizzata da:

• un punto di campionamento iniziale x0 (un reale) • un intervallo di campionamento dx (un reale) • un numero fissato di campioni n (un intero)

e l'i-esimo valore campionato (i = 0,..,n-1) corrisponde al valore della funzione yi = f(xi) dove xi è l'i-esimo punto di campionamento ed è pari a xi=x0+i*dx.

Progettare e realizzare una classe FunzioneCampionata che rappresenti una funzione campionata. In particolare, la funzione di cui interessano i campioni è y = 2*x + 3, mentre il punto di campionamento iniziale, l'intervallo di campionamento e il numero di campioni variano da istanza a istanza.

(4)

Equipaggiare la classe con i seguenti metodi pubblici: • un opportuno costruttore;

• metodi che restituiscono il punto di campionamento iniziale, l'intervallo di campionamento e il numero di campioni;

• un metodo puntoCampionamento, che dato un intero i restituisce l'i-esimo punto di campionamento; • un metodo valoreCampionato, che dato un intero i restituisce l'i-esimo valore campionato;

• un metodo toString, che restituisce una stringa composta da tutte le coppie separate da '\n', formate da punto di campionamento e valore campionato separati da uno spazio.

Esercizio 16

Realizzare una classe FunzionalitaFunzioniCampionate, che includa un metodo statico integrale, che prende come argomento una funzione campionata e ne calcola una approssimazione dell'integrale nell'intervallo tra x0 e xn-1, sommando il valore di tutti i campioni, tra 0 e n-1, moltiplicati per l'intervallo di campionamento, secondo la formula seguente:

L'area racchiusa tra i rettangoli evidenziati nella figura seguente rappresenta l'integrale di una funzione campionata:

Esercizio 17

Realizzare una classe cliente delle classi precedenti avente un metodo main che legga da tastiera il punto di campionamento iniziale, l'intervallo di campionamento e un numero fissato di campioni e crei un oggetto di tipo FunzioneCampionata stampi l'oggetto e calcoli e stampi l'integrale.

Esercizio 18

Scrivere una classe con metodi statici per operazioni su matrici con elementi interi. La classe deve contenere:

• un metodo per stampare una matrice

• un metodo che restituisce una stringa che rappresenta un array

• un metodo per sommare due matrici con un uguale numero di righe e di colonne • un metodo per moltiplicare due matrici ben formate

• un predicato per decidere se due matrici sono ben formate

• un metodo main per verificare il corretto funzionamento dei metodi scritti

• un metodo che restituisce un array che rappresenta la somma delle righe dei una matrice

Due matrici sono ben formate per la moltiplicazione se il numero di colonne della prima matrice è uguale al numero di righe della seconda matrice.

(5)

Scrivere una classe i cui oggetti mantengono informazioni su proprietari di appartamenti. Ogni oggetto deve contere una stringa che indica il nome del proprietario, ed un array di slot di tipo stringa che possono contere ciascuno l'indirizzo di un appartamento posseduto da quel proprietario (oppure null se lo slot è vuoto). La classe deve contenere: (1) costruttore che imposta il nome del proprietario ed il numero di slot e crea l'array con tutti gli slot vuoti; (2) un metodo per assegnare un indirizzo di un appartamento a uno slot; (3) un metodo che restituisce l'indirizzo contenuto in uno slot (o null se lo slot è vuoto); (4) un metodo che restituisce il numero di slot non vuoti; (5) un metodo per ottenere come stringa il contenuto di un oggetto. (6) un metodo per riorganizzare gli indirizzi contenuti negli slot in maniera che tutti gli slot non vuoti si trovino nelle prime posizioni. Scrivere inoltre un file di prova per verificare i corretto funzionamento della classe scritta.

Esercizio 20

Scrivere un programma che costruisca un conto bancario chiamato harrysChecking, versi in esso $1000, prelevi da esso $500, prelevi altri $400 e infine visualizzi il saldo rimanente.

Il programma deve poi creare un altro conto bancario chiamato momsSaving, utilizzando il costruttore che inizializza la variabile bilance.

Su quest’ultimo conto deve essere poi applicato un interesse del 10%, a seguito del quale viene stampato il saldo.

Esercizio 21

Progettare e realizzare una classe Car (automobile) con le proprietà seguenti.

Un’automobile ha una determinata resa del carburante (misurata in miglia/galloni o in litri/chilometri: scegliete il sistema che preferite) e una certa quantità di carburante nel serbatoio. La resa è specificata dal costruttore e il livello iniziale del carburante è a zero. Fornire questi metodi: un metodo drive per simulare il percorso di un’automobile per una certa distanza, riducendo il livello di carburante nel serbatoio; un metodo getGas, per ispezionare il livello corrente del carburante; un metodo addGas per far rifornimento.

Consigli:

S’invita a porre particolare attenzione al metodo drive(double km), che calcola il livello di carburante dopo un certo percorso.

Esercizio 22

Modificate la classe Car dell'esercizio precedente aggiungendo una nuova variabile d'istanza String carburante. Se tale variabile vale "verde", allora l'automobile consuma benzina verde, se tale variabile vale "gasolio", allora l'automobile consuma gasolio. Scrivere inoltre un nuovo metodo predicato boolean isDiesel, che restituisce true nel caso l'automobile consumi gasolio e false

altrimenti.

EREDITARIETA’ E POLIMORFIRMO Esercizio 23

Ogni studente è caratterizzato da una matricola, un nome ed un cognome ed un array chiamato voti di 35 interi da 18 a 30, che costituiscono i suoi voti nei vari esami. Tale classe ha un costruttore che imposti matricola nome e cognome passati come parametri.

E’ previsto poi un attributo intero nEsamiSuperati che inizialmente è settato a zero e che ogni volta che viene invocato il metodo RegistraVoto(int voto) di tale classe viene incrementato di uno, contestualmente alla registrazione di un nuovo esame nell’array voti.

Un borsista è un particolare studente dotato di uno stipendio. Il costruttore di borsista deve utilizzare opportunamente il costruttore della classe padre ed impostare poi lo stipendio uguale al valore che gli viene passato come parametro.

Un borsista laureando è un borsista per il quale è registrata anche una data prevista per la laurea ed una media di tutti i suoi 35 voti.

Creare un applicativo che abbia queste tre classi opportunamente collocate in una mutua gerarchia. Creare una classe principale nel cui main vengano testati tre oggetti, uno per ciascun tipo di classe.

GESTIONE DEI FILE ATTRAVERSO I FLUSSI Esercizio 24

(6)

Realizzare un programma Java che memorizzi su un file di oggetti le informazioni relative ad un insieme di libri introdotte da tastiera.

Un libro è composto da titolo, autore e prezzo. Si consiglia di creare la classe Libro. Esercizio 25

Realizzare un programma che visualizzi tutti i libri memorizzati nel file dell’esercizio precedente, il cui prezzo è inferiore ad un prezzo introdotto da tastiera.

Esercizio 26

Realizzare un programma che memorizzi su un file di tipi primitivi 100 numeri interi generati random fra 1 e 1000.

Scrivere un secondo programma che legge il file precedente calcolando la somma totale di tali numeri e la loro media.

Esercizio 27

Realizzare un programma Java che legga un file di testo e conti il numero di parole e di caratteri presenti in esso.

Esercizio 28

Realizzare un programma Java che esegua la copia di un file di testo in un nuovo file, in modo che ogni riga copiata dal file originale sia seguita da una riga vuota.

Esercizio 29

Realizzare un programma Java che, dato un file di testo, scriva il suo contenuto presentando a video 20 righe per volta e permetta all’utente di passare alla “pagina” successiva o di interrompere la visualizzazione. FUNZIONALITA’ GRAFICHE DI JAVA

Esercizio 30

Realizzare i programmi degli esercizi 24 e 25 con una opportuna GUI. Esercizio 31

Realizzare il programma dell’esercizio 30 con una opportuna GUI. Per il nome del file usare una casella di testo. Prevedere un bottone VISUALIZZA che una volta cliccato visualizzi le 20 righe in una area di testo di 20 righe. Dopo il primo click su VISUALIZZA se ci sono ulteriori righe da mostrare il bottone VISUALIZZA sparisce e compaiono due bottoni NEXT e STOP permettono di passare alla “pagina” successiva o di interrompere la visualizzazione chiudendo la finestra.

Esercizio 32

Realizzare una opportuna GUI per l’esercizio 26.

Il nome del file sarà richiesto tramite una casella di testo. Una volta cliccato sul bottone GENERA NUMERI verrà effettuata la scrittura dei 100 numeri su file. Tramite il bottone VISUALIZZA la somma totale e la media saranno visualizzare in due diverse etichette.

PROGETTAZIONE MEDIANTE UML

Si realizzino i Class Diagram e gli Use case Diagram relativi agli esercizi n. 19 e 23 nonché quelli relativi alle situazioni proposte negli esercizi seguenti.

Esercizio 33

Si vuole progettare un programma gestionale per una cooperativa di servizi di pulizia, secondo le specifiche seguenti.

Ogni cliente ha un codice, un nome e cognome di un referente, una partita iva, un indirizzo e un numero di telefono, ogni cliente possiede inoltre uno o più appartamenti da pulire a lui intestati.

Ogni appartamento ha un indirizzo, il nome del condominio a cui appartiene (conCodice e nome) e una dimensione (espressa in mq); per ogni appartamento sono programmati uno o più interventi di pulizia: gli interventi sono quindi da descritti da un nome, un codice, un costo, una data di esecuzione e un insieme di operazioni di pulizia (ad esempio deceratura, spolveratura, pulizia infissi,...).

Le operazioni sono descritte da codice, prodotto, macchinari e attrezzi utilizzati e alcune di esse possono essere eseguite solo da specifici operatori formati all’uso (dei quali si deve tenere traccia).

(7)

Ad ogni intervento sono assegnati uno o più operatori che eseguono l’intervento (descritti da codice, nome e cognome, indirizzo e codice fiscale).

Per ogni cliente si tiene traccia di quando è stato effettuato il pagamento di uno

O più interventi (memorizzando codice, data di pagamento, metodo di pagamento, importo totale). Esercizio 34

Un sistema informatico deve memorizzare le informazioni riguardo agli artisti: i loro nomi (che sono unici), luogo di nascita, età e stile dell’artista. Per ogni opera devono essere memorizzati l’artista, l’anno in cui è stata fatta, il titolo unico) il tipo di opera (dipinto, litografia, scultura, fotografia) e il prezzo. Le opere sono inoltre classificate in gruppi di diverso tipo, per esempio, “ritratto”, “lavori del 19esimo secolo”, “lavori di Picasso”. Un’opera può appartenere a più di un gruppo.

Ogni gruppo è identificato da un nome (come quelli appena mostrati) che descrive il gruppo. Infine vengono memorizzate le informazioni sui clienti. Per ogni cliente abbiamo: nome (unico), indirizzo, totale dei soldi spesi nella galleria, artista e gruppo preferito.

Esercizio 35

Si consideri il seguente insieme di requisiti per una base di dati UNIVERSITA’ usata per tenere traccia delle carriere universitarie degli studenti.

- L’università tiene traccia, per ciascuno studente, dei seguenti dati: nome, numero di matricola, numero di previdenza sociale (SSN), indirizzo e numero di telefono attuale, indirizzo e numero di telefono di residenza, data di nascita, sesso, anno di corso (primo, secondo, …), dipartimento principale di afferenza, dipartimento in cui si svolge una specializzazione complementare (se c’è), nonché corso di studi (B.A, B.S, …, Ph.D). Alcune applicazioni dell’utente necessitano di accedere ai dati relativi a città, stato e CAP dell’indirizzo attuale degli studenti, nonché al loro cognome. Sia il numero di previdenza sociale sia quello di matricola hanno valori univoci per ogni studente.

- Ogni dipartimento è caratterizzato da nome, codice di dipartimento, numero di ufficio, telefono di ufficio e edificio. Sia il nome sia il codice hanno valori univoci per ciascun dipartimento.

- Ogni insegnamento è caratterizzato da nome, descrizione, codice, numero di crediti, livello e dipartimento che eroga l’insegnamento. Il valore del codice dell’insegnamento è univoco per ciascun insegnamento.. - Ogni modulo è caratterizzato da docente, semestre, anno, insegnamento e codice. Il codice distingue i diversi moduli di un medesimo insegnamento che sono tenuti in un certo semestre/anno; i suoi valori sono 1, 2, 3, …, fino al numero di moduli attivati durante ciascun semestre.

- Una votazione è caratterizzata da studente, modulo, voto in lettere (F, D, C, B, A) e voto in cifre (0, 1, 2, 3, 4).

Riferimenti

Documenti correlati

Giornata di informazione sul gioco d’azzardo patologico dedicata agli studenti del 4° e del 5° anno delle Scuole Secondarie di secondo grado. Aula Magna della Facoltà di Medicina

Si progetti come FSM complessa un sistema in grado di comprimere i dati in modo da compattare gli spazi multipli (sequenze di due o più spazi) in un solo spazio, eliminare gli

- Una sequenza di n byte uguali tra loro (al massimo 127 byte) viene rappresentata mediante due byte, contenenti -n (primo byte, contiene l’opposto del numero di dati uguali,

 I dati di accesso della cittadinanza all’offerta complessiva del progetto sono positivi se rapportati ad una fase di prima sperimentazione ma sono molto parziali

Nel circo il domatore dà 3 pezzi di carne al leone maschio, 4 pezzi di carne alla leonessa e 1 pezzo al leoncino.. Quanti pezzi di carne dà il domatore ai suoi

sistemi in fibra ottica per la trasmissione. 3) Obiettivi minimi indispensabili da raggiungere al termine dell’anno scolastico Alla fine dell’anno scolastico lo studente deve

Ogni volta che gli esiti delle verifiche ne richiederanno l’effettuazione, si attiveranno attività di recupero delle conoscenze e delle competenze sviluppate, esercitazioni

Ogni volta che gli esiti delle verifiche ne richiederanno l’effettuazione, si attiveranno attività di recupero delle conoscenze e delle competenze sviluppate, esercitazioni