Capitolo 1 Introduzione OOP Esercizi a casa

Documenti analoghi
Laboratorio di programmazione

del Linguaggio C Istruzioni di iterazione

Quadrato Magico. Fondamenti di Programmazione

Preparazione allo scritto di Programmazione Comunicazione Digitale / Informatica - A.A. 2012/2013

Note ed esercizi aggiuntivi

Esercizi in Python. Docente: Domenico Daniele Bloisi

HOMEWORKS. in modo che il programma stampi N ripetizioni della stringa HelloWorld (su righe diverse), con N inserito dall utente.

Prof. Marco Masseroli

Programmazione II Compitino (Vers. A)

Rappresentazione degli algoritmi

LABORATORIO 4 - Iterazioni

csp & backtracking informatica e laboratorio di programmazione Alberto Ferrari Informatica e Laboratorio di Programmazione

Fondamenti di Informatica T-1

Fondamenti di Informatica T-1. Classi e array

STRUTTURE DI CONTROLLO DEL C++

Calcolare x n = x x x (n volte)

Informatica per Statistica Riassunto della lezione del 21/10/2011

Programmazione II Compitino (Vers. B)

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

public double getraggio() restituisce la lunghezza del raggio del cerchio che esegue il metodo.

Capitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61

Laboratorio 1. 2) All interno della directory c:\temp\cognome\codici creare il file sorgente hello.c contenente il seguente codice:

AccumulatoreSomma AccumulatoreSommaProdotto AccumulatoreSomma AccumulatoreSommaProdottoDivisione

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO

Laboratorio di programmazione

Informatica B. Facoltà di Ingegneria Industriale Laurea in Ingegneria Energetica, Meccanica e dei Trasporti. Prof. Marco Masseroli

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2015

//riferimento a una sequenza di oggetti della classe Importo

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

A. Ferrari. informatica. Java basi del linguaggio. Alberto Ferrari Informatica

Capitolo 10 - Strutture

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array

Introduzione alla programmazione Esercizi risolti

Passare argomenti al programma

Istruzioni di controllo

Rappresentazione degli algoritmi

I Metodi. Fondamenti di Informatica A-K

Scopo del progetto è la costruzione di un compilatore per il linguaggio descritto qui di seguito.

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

E17 Esercizi sugli Array in Java

Esame Laboratorio di Programmazione

Corso di Laurea Ingegneria Informatica

public double getlato() restituisce la lunghezza del lato del quadrato che esegue il metodo.

Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java

E9 Esercizi sul Capitolo 9 Array

Fondamenti di Informatica T-1

Iterazione (introduzione)

Matematica con Python

L ALLOCAZIONE DEI COSTI GENERALI CON MICROSOFT EXCEL

Realizzare un business plan con Excel 2003

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Strutture di Controllo

Esercizi

giochi sulla persistenza

Funzioni, Stack e Visibilità delle Variabili in C

Le basi del linguaggio Java

Le Funzioni in C. Fondamenti di Informatica Anno Accademico 2010/2011. Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia

LABORATORIO 7 ARRAY. ATTENZIONE: argomenti da linea di comando!!!

Laboratorio di Informatica I

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Liste di Liste Matrici

8 Introduzione MATLAB

Corso sul linguaggio Java

Esempi di programmi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E01. A. Miola Settembre 2007

A1- Array MODULO Java3

Esercitazione n 2. Obiettivi

Figura 1 - Finestra Tabella

LA FORMATTAZIONE Impostare la pagina, i paragrafi e il corpo del testo

Introduzione Programmazione Java

Pag. 1 di 7. import java.io.*;

Progetto di classi: Metodi Costruttori Documentazione e commenti Variabili di istanza (campi)

LABORATORIO DI INFORMATICA ESERCITAZIONE VIII

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

ESERCIZIO allochi staticamente un vettore V1 di 10 float e allochi dinamicamente un vettore V2 di 10 double;

Scelte. Costrutto condizionale. Il costrutto if. Il costrutto if. Rappresentazione con diagramma a blocchi. Il costrutto if

COMANDI ITERATIVI. Ivan Lanese

import java.io.*; class Quadrato implements FigureGeometrichePiane { private double lato;

Lezione 4 programmazione in Java

APPUNTI PER IL CORSO DI MATEMATICA APPLICATA. 1. Lezione 1 Richiamo brevemente alcune notazioni della teoria degli insiemi.

Programmazione. Cognome... Nome... Matricola... Compitino del 24 novembre 2008

Alcune funzioni matematiche utili della libreria <math.h>:

import java.io.*; Pag. 1 di 15

Esercitazione 2. Variabili e Tipi Input e Output Assegnamenti Il comando if-else

Introduzione alla programmazione A. Ferrari

Strutture come parametri di funzioni

JAVA IL LINGUAGGIO. Ogni valore nel linguaggio ha un tipo Ogni variabile deve essere dichiarata ed associata ad un tipo:

I L IN I GU G AGG G I G O

Proprietà delle potenze

Programmazione I - Preparazione A.A. 2010/2011

Impariamo a programmare in. Lezione 6

Fondamenti di informatica T-1 (A K) Esercitazione 7: metodi, classi, oggetti

FUNZIONI. Ivan Lanese

Sunto della scorsa lezione Il linguaggio C. Un Programma con Errori. Il preprocessore. Linguaggi di Programmazione I.

INTRODUZIONE ALLA PROGRAMMAZIONE

Leggere una sequenza di dati

Transcript:

Capitolo 1 Introduzione OOP Esercizi a casa Introduzione Gli esercizi di questo corso sono spesso costituiti da codici forniti incompleti: è necessario completarli perché possano svolgere il compito che viene richiesto. Lo spazio da utilizzare è delimitato da righe, all interno delle quali deve essere aggiunto il codice mancante, mentre il codice all esterno non deve essere modificato. Le classi che costituiscono gli esercizi sono contenute in file.java, inseriti in file compressi.zip. I file.zip del Capitolo 1 sono scaricabili alla voce Codici: Capitolo 1 Esercizi a casa, presente nel sito del corso. Ad esempio, nel caso del primo esercizio di questo capitolo il file si chiama IMC.zip e contiene due classi (GestioneIMC e Imc), rappresentate dai file GestioneIMC.java e Imc.java. I file.java devono essere estratti (è necessario fornire una password) e inseriti in una cartella. Per eseguire gli esercizi, si consiglia di copiare i relativi file.java in una cartella di progetto BlueJ, come illustrato nell Appendice F. Si sconsiglia di utilizzare tecniche come copia-incolla dal testo del file sorgente a quello di un sorgente creato all interno del progetto BlueJ. Infatti, alcuni caratteri, come le virgolette, possono non essere copiati correttamente. Si sconsiglia anche di riscrivere completamente il codice a mano poiché, soprattutto in alcuni esercizi, il codice è lungo da riscrivere e in questo modo si possono introdurre errori, che fanno perdere molto tempo. È anche possibile inviarmi per e-mail le soluzioni degli esercizi, perché possano essere corrette. In questo caso è raccomandato di non modificare in alcun modo tutto quello che è al di fuori dello spazio assegnato per l inserimento del codice. Attenersi scrupolosamente alle indicazioni che accompagnano gli esercizi e considerare che le classi che gestiscono il progetto (quelle che contengono il metodo main()), spesso non esauriscono tutti casi che consentono di giudicare positivamente la soluzione di un esercizio. i

Es1.1 IMC La classe GestioneIMC contiene il metodo main() e non deve essere modificata. Per funzionare richiede la classe Imc, da completare come esercizio. La classe GestioneIMC gestisce la richiesta dei dati necessari a calcolare l indice di massa corporea (IMC) di una persona. I dati da inserire sono il peso in kg e l altezza in metri. L IMC è un indicatore di peso forma, che si ottiene dal rapporto tra il peso e il quadrato dell altezza e dovrebbe essere compreso tra 18.51 e 25.00. Questa gestione, riportata nella figura seguente, è contenuta in un ciclo do-while, che si incarica di richiedere i dati e, tramite l oggetto imc, impostarli e infine visualizzare il valore dell IMC. I cicli do-while sono ripetuti se il prodotto dei valori immessi è maggiore di 0. Per uscire dal ciclo e terminare il programma, è quindi necessario inserire 0 (o un valore negativo) come valore di peso o altezza. Il codice è il seguente: Questo codice contiene istruzioni Java illustrate nel Corso Base e che non richiedono ulteriori approfondimenti. Gli unici commenti riguardano alcuni aspetti della OOP. Nella seconda riga all interno del corpo del metodo main(), viene creato l oggetto imc: Imc imc = new Imc(); Quest oggetto è poi utilizzato per impostarne gli attributi, con le istruzioni: imc.setaltezza(altezza) imc.setpeso(peso) ii

Infine è usato per calcolare il valore dell IMC. imc.calcolo() La classe Imc, contenuta nel file Imc.java, è fornita vuota e deve essere completata in modo da rendere il programma compilabile. Essa deve avere: Un attributo double che rappresenti il peso in kg. Un attributo double che rappresenti l altezza in metri. Un metodo setpeso, con un parametro di tipo double. Il metodo deve impostare l attributo, relativo al peso, per mezzo del valore passato come argomento. Se questo valore è negativo, il metodo deve impostare l attributo uguale a zero. Il metodo non deve ritornare nulla. Un metodo setaltezza, con un parametro di tipo double. Il metodo deve impostare il valore dell attributo, relativo all altezza, per mezzo del valore passato come argomento. Se questo valore è negativo, il metodo deve impostare l attributo uguale a zero. Il metodo non deve ritornare nulla. Un metodo calcolo, senza parametri. Il metodo deve calcolare e ritornare il valore dell IMC (peso/(altezza x altezza)). Se il valore del peso o altezza è negativo o uguale a 0 il metodo deve ritornare 0. Tutti i metodi fanno parte dell interfaccia della classe, mentre gli attributi ne costituiscono l implementazione (cfr. Capitolo1, paragrafo 1.4). Sebbene il codice della classe GestioneIMC, protegga contro l uso di valori di peso e/o altezza non validi, tuttavia si chiede di realizzare la classe Cerchio dotata delle stesse protezioni. Nella figura seguente è riportata la stampa di un esecuzione del programma completato. iii

Es1.2- Salvadanaio (da un idea del Politecnico Losanna) Questo esercizio simula il funzionamento di un salvadanaio. Il codice fornito è costituito da due classi: una (UsaSalvadanaio) contiene il metodo main() e gestisce tutto il programma, che verifica l accesso ad un salvadanaio per utilizzarne il contenuto; l altra (Salvadanaio) deve essere completata. Queste classi possono essere acquisite dai file UsaSalvadanaio.java e Salvadanaio.java, inseriti nel file compresso Salvadanaio.zip. All inizio il salvadanaio contiene 1000 euro, che possono essere utilizzati per progetti vari. Non è possibile aumentare il deposito, mentre si può definire il costo di un progetto: se il salvadanaio contiene sufficienti risparmi per realizzarlo, il contenuto del salvadanaio è diminuito del costo del progetto, diversamente il contenuto resta invariato e si informa di quanto manca per realizzarlo. La classe UsaSalvadanaio, che è fornita completa e non deve essere modificata, ha il codice seguente: All inizio vengono creati gli oggetti slvd, dalla classe Salvadanaio, e tastiera dalla classe Scanner; quindi sono dichiarate le variabili costoprogetto, che contiene il costo di un progetto inserito dall utente, e saldo, che rappresenta il contenuto del salvadanaio; infine nel salvadanaio vengono messi 1000 euro (slvd.aggiungi(1000.0)). Un ciclo do-while gestisce le richieste di prelievi finché l utente inserisce -1 (o un valore negativo) o il saldo si azzera, che pongono termine all esecuzione del programma. Nel ciclo do-while viene richiesta la somma iv

per un progetto e, tramite il metodo prelievotest(), se ne verifica la disponibilità: solo in caso positivo la somma viene presa dal salvadanaio per mezzo del metodo preleva(). Non soffermarsi troppo sulla possibilità di migliorare il codice della classe UsaSalvadanaio con modifiche di vario tipo. Concentrarsi invece sul completamento della classe Salvadanaio, che, oltre ad un attributo deposito (private), che ne specifica il contenuto in euro e già inserito nel codice, deve possedere i seguenti elementi, che ne rappresentano l interfaccia: o Un metodo aggiungi, che consente di inserire nel salvadanaio un valore in euro, passato come argomento double. Solo se il valore è positivo deve essere accettato. Il metodo non ritorna nulla. o Un metodo preleva, che consente di prelevare dal salvadanaio una somma double, passata come argomento. Una somma negativa o superiore al contenuto deve essere ignorata. o Un metodo prelievotest, che ritorna quanto resterebbe nel salvadanaio dopo il prelievo, passato come argomento. Se il prelievo è 0 o un valore minore di zero il metodo deve ritornare il contenuto del salvadanaio. o Un metodo stampasaldo, che stampa i seguenti messaggi: a. Siete al verde, se il salvadanaio è vuoto b. Ci sono <deposito> euro nel salvadanaio, dove <deposito > è il contenuto in euro del salvadanaio Le stampe devono essere seguite da un salto di riga. È qui riportato un esempio di utilizzo del programma completo: v

Es1.3- Cerchio In questo esercizio viene fornita la classe testcerchio e la classe Cerchio, vuota. La prima costruisce un oggetto cerchio, a partire dalla classe Cerchio, impostandone le seguenti caratteristiche geometriche: le coordinate del centro (x=5.0, y=5.0) e lunghezza del raggio (4.0). Quindi indica se un punto, di cui sono state introdotte le coordinate (x,y) da tastiera, è interno o esterno a cerchio. Le due classi sono contenute nei file TestCerchio.java e Cerchio.java, inserite nel file compresso Cerchio.zip. Della classe Cerchio è fornita solo la dichiarazione e deve essere completata, mentre la classe testcerchio, che contiene il metodo main() e gestisce il programma, è completa e non deve essere modificata. Il suo codice è il seguente: La classe Cerchio deve essere impostata in modo da rendere il programma compilabile e produrre stampe come questa: vi

Si chiede di realizzare la classe Cerchio in modo che contenga: 1. Un attributo privato che rappresenti il valore del raggio 2. Un attributo privato che rappresenti la coordinata x del centro del cerchio 3. Un attributo privato che rappresenti la coordinata y del centro del cerchio 4. Un metodo pubblico setcentro, che imposti le coordinate del centro del cerchio 5. Un metodo pubblico setraggio, che imposti il valore del raggio 6. Un metodo pubblico interno(), che ha come parametri due valori double, che rappresentano le coordinate di un punto. Il metodo restituisce true, se il punto è interno al cerchio e false in caso contrario. Se il punto cade sulla circonferenza si considera interno al cerchio. La distanza di un punto dal centro di un cerchio si trova con il teorema di Pitagora, applicato alle differenze tra le coordinate del punto (x, y) e quelle del centro del cerchio (cx, cy), come illustrato qui sotto. La radice quadrata si calcola con l espressione Math.sqrt(), dove tra parentesi è inserito il valore di cui calcolare la radice: 2 2 (x-cx) + (y-cy) 2 2 (x-cx) + (y-cy) (x,y) (y-cy) 2 (cx,cy) (x-cx) 2 Es1.4- Filetto (da un idea del Politecnico Losanna) In questo esercizio si prende in considerazione il gioco del filetto. Al gioco partecipano due giocatori, che mettono su di una scacchiera 3x3, alternativamente, la propria pedina (cerchio o croce). Vince chi riesce per primo a occupare tutta una linea orizzontale, verticale o diagonale, come nella figura seguente: vii

Del programma viene fornita completa la classe Gioco (Gioco.java), contenente il metodo main() e una parte della classe Filetto (Filetto.java). La prima gestisce il gioco per mezzo dell oggetto filetto, derivato dalla classe Filetto, che mette a disposizione i metodi del gioco. Il codice della classe Gioco è il seguente: viii

Per questa gestione si utilizzano due cicli do-while, che contengono la richiesta ai due giocatori di definire la posizione della pedina (cerchio o croce). La posizione in cui deve essere collocata la pedina è determinata dal numero di riga (1, 2, 3) e da quello di colonna (1, 2, 3). Un terzo ciclo do-while, che contiene gli altri due, ha il compito di stampare la condizione della scacchiera dopo ogni mossa. La partita e il programma terminano quando un giocatore vince o non vi sono più caselle libere, senza un vincitore È anche possibile terminare la partita inserendo 0 in una delle coordinate: per questa possibilità in ogni ciclo do-while sono state inserite alcune istruzioni condizionali di break. Considerare infine che per il giocatore le coordinate valide delle caselle sono 1, 2 e 3, mentre per la classe Filetto devono essere 0, 1 e 2. Questa è la ragione per cui, nei cicli do-while interni, al valore di riga/colonna è stato tolto 1. Nella prossima figura è riportato lo svolgimento di una partita. ix

La classe Filetto, fornita con il file Filetto,java è la seguente: x

Gli elementi già impostati sono tutti gli attributi: a. LIBERO: costante intera private che indica una casella libera (=0) b. CERCHIO: costante intera private che indica la pedina cerchio (=1) c. CROCE: costante intera private che indica la pedina croce (=2) d. MOSSE_MAX: costante intera private che indica il numero massimo di mosse (=9); e. numeromosse: variabile d istanza intera che rappresenta il contatore delle mosse fatte (inizializzato a 0) f. scacchiera: un array 3x3 di interi dichiarato e definito. Inoltre sono forniti completi i seguenti metodi pubblici: a. vincecerchio: ritorna true, se c è un filetto di cerchi, false in caso contrario. b. vincecroce: ritorna true, se c è un filetto di croci, false in caso contrario. c. stampavincitore: stampa Partita finita: vince: cerchio/croce, se c è un vincitore, in caso contrario stampa Partita finita pari. d. stampastato: stampa lo stato si della scacchiera, con la posizione delle pedine giocate, prima di una mossa. Si chiede di completare il codice della classe Filetto impostando i seguenti metodi: a. casellelibere (public): ritorna true, se ci sono caselle libere e false in caso contrario. Non ha parametri. b. giocacerchio (public): pone una pedina cerchio su di una casella della scacchiera. Il metodo ritorna true, se la giocata è valida e false in caso contrario. Il metodo ha 2 parametri interi: il primo è la riga (0-2) ed il secondo è la colonna (0-2), che individuano la posizione da coprire. Utilizza il metodo giocapedina(). Se la casella è inesistente o è già giocata chiama il metodo stampaerrorecasella(). d. giocacroce (public): come per giocacerchio al punto precedente. e. giocapedina (private): occupa con una pedina una casella della scacchiera. Utilizza come parametri nell ordine: la riga e la colonna, che definiscono la posizione della pedina e il tipo di pedina. Ritorna true, se la pedina è stata posizionata e false in caso contrario (casella occupata o casella inesistente). f. stampaerrorecasella: Stampa sul terminale Casella inesistente, se i valori di riga e colonna identificano una casella non valida o Casella già giocata, se la casella è già occupata da una pedina. Dopo la stampa deve esserci un salto di riga. Utilizza gli stessi parametri del metodo giocapedina() e non ritorna nulla. xi