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

Documenti analoghi
Uso di metodi statici. Walter Didimo

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Definizione di metodi

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

Equazioni Polinomiali II Parabola

I RADICALI QUADRATICI

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Ingegneria del Software

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 28 Gennaio 1999 PROVA SCRITTA

Array multidimensionali e stringhe

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

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 28 Gennaio 1999 PROVA SCRITTA

Esame di INFORMATICA (*) Operazioni Aritmetiche: Somma. Lezione 3. Operazioni Aritmetiche: Somma. Operazioni Aritmetiche: Somma

1. riconoscere la risolubilità di equazioni e disequazioni in casi particolari

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Esercizi per la prova in itinere (con soluzioni)

Somma di numeri floating point. Algoritmi di moltiplicazione e divisione per numeri interi

TEOREMA DEL RESTO E REGOLA DI RUFFINI

Numeri Frazionari. Numeri Frazionari

Esercitazione su Bilancio Familiare

4 GLI ARRAY E LE STRINGHE

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

SOTTOSPAZI E OPERAZIONI IN SPAZI DIVERSI DA R n

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

La codifica. dell informazione

Istruzioni di ripetizione in Java 1

Programmazione Orientata agli Oggetti

Problema: calcolare il massimo tra K numeri

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Esonero del corso di Programmazione a Oggetti

Informatica Teorica. Macchine a registri

04 - Numeri Complessi

Refactoring 5 Sposta Metodo. 5 Sposta Metodo. 5 Sposta Metodo - Codice iniziale

Anno 2. Sistemi di equazioni di secondo grado

public BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }

Prontuario degli argomenti di Algebra

Heap e code di priorità

ESERCIZI SVOLTI SUL CALCOLO INTEGRALE

11.4 Chiusura transitiva

ARRAY E STRINGHE. G. Frosini Slide 1

Esercizi sulle Disequazioni

ACCESS. Database: archivio elettronico, dotato di un programma di interfaccia che facilita la registrazione e la ricerca dei dati.

1.5 DIVISIONE TRA DUE POLINOMI

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Roadmap. Ricorsione: funzioni ricorsive. Definizione di fattoriale. Definizione dei numeri Fibonacci

Normalizzazione. Definizione

Monomi e Polinomi. Monomio Si dice monomio un espressione letterale in cui figurano solo operazioni di moltiplicazione.

Diagrammi a blocchi 1

Zeri di una funzione. Funzioni continue - Proprietà. certo intervallo dell'asse x. da: a ξ. cui f(x)=0. precisione desiderata (iterazione( iterazione)

Algoritmi di Ricerca. Esempi di programmi Java

Un grafico utilizza i valori contenuti in un foglio di lavoro per creare una rappresentazione grafica delle relazioni esistenti tra loro;

Unità Didattica 2 Rappresentazione dei Dati

FILE BINARI FILE BINARI

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

Disequazioni - ulteriori esercizi proposti 1

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

Giovanna Carnovale. October 18, Divisibilità e massimo comun divisore

SQL Server Architettura Client-Server. SQL Server Introduzione all uso di SQL Server Dutto Riccardo.

Anno 2. Risoluzione di sistemi di primo grado in due incognite

Potenziamento formativo, Infermieristica, M. Ruspa RIPASSO DI MATEMATICA

NUMERI COMPLESSI. Test di autovalutazione

EQUAZIONI E GRAFICI con DERIVE. Gli errori di Derive EQUAZIONI

Lezione 4. Sommario. L artimetica binaria: I numeri relativi e frazionari. I numeri relativi I numeri frazionari

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Elezioni comunali Esempi di attribuzione dei seggi

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

x 2 + (x+4) 2 = 20 Alle equazioni di secondo grado si possono applicare i PRINCIPI di EQUIVALENZA utilizzati per le EQUAZIONI di PRIMO GRADO.

Modellazione avanzata di fogli di lavoro Bilancio Famigliare

DISEQUAZIONI ALGEBRICHE

Funzioni Pari e Dispari

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a giugno 2013

Esercizio 1: archivio CD e DVD

Parcheggio.rtf 1/8 6 gennaio Prova di programmazione: parcheggio a pagamento

Esame di FONDAMENTI DI AUTOMATICA (9 crediti) SOLUZIONE

ARRAY BIDIMENSIONALI float [][] mx = new float[3][4]; (float []) [] mx = new float[3][4];

Programmazione Orientata agli Oggetti in Linguaggio Java

Codice binario. Codice. Codifica - numeri naturali. Codifica - numeri naturali. Alfabeto binario: costituito da due simboli

Le imprese nei mercati concorrenziali

float somma_float(float a, float b) int get_ascii(char c)

Oggetti e classi. Cos è un oggetto

1 Multipli di un numero

Codifica dei Numeri. Informatica ICA (LC) 12 Novembre 2015 Giacomo Boracchi

3. Terza esercitazione autoguidata: progetto gestione voli

Processo di validazione delle offerte

Esercitazione 4. Comandi iterativi for, while, do-while

Generazione di Numeri Casuali- Parte 2

Creazione, eliminazione, lettura e scrittura di file di testo

LE DISEQUAZIONI LINEARI

Strutture di controllo in C++

EQUAZIONI E PROBLEMI: GUIDA D'USO

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

3. Matrici e algebra lineare in MATLAB

EXCEL: FORMATTAZIONE E FORMULE

Esempi di attribuzione dei seggi

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Soluzioni degli esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Transcript:

Classi e array Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array Si vuole definire una classe Polinomio per la rappresentazione di polinomi a coefficienti reali un oggetto Polinomio rappresenta un polinomio a coefficienti reali ad esempio, un oggetto Polinomio può rappresentare il polinomio p(x) = x 3 + 2x 1 un oggetto Polinomio sa eseguire le seguenti operazioni calcolare il proprio grado calcolare il proprio valore in un punto calcolare una stringa che sia una propria descrizione Altre operazioni creazione di un nuovo Polinomio dati i coefficienti del polinomio 1

Polinomio interfaccia Metodi d istanza di Polinomio metodo d istanza int grado() restituisce il grado del polinomio ad esempio, il polinomio p(x) = x 3 + 2x 1 ha grado 3 metodo d istanza double valore(double x) restituisce il valore del polinomio nel punto x ad esempio, il polinomio p(x) = x 3 + 2x 1 valutato nel punto x=2 vale 11 metodo d istanza String tostring() restituisce una descrizione del polinomio sotto forma di stringa ad esempio, il polinomio p(x) = x 3 + 2x 1 può essere la stringa "+1.0*x^3 +2.0*x 1.0" 2

Polinomio interfaccia Costruttori costruttore Polinomio(double[] coefficienti) crea un nuovo Polinomio, dato un array di coefficienti vengono fatte la seguente ipotesi sull interpretazione dell array coefficienti l elemento di indice i dell array coefficienti rappresenta il coefficiente del termine di grado i del polinomio da creare ad esempio, il primo elemento di coefficienti rappresenta il coefficiente del termine costante del polinomio se il polinomio da creare ha grado maggiore di zero, allora l ultimo elemento di coefficienti (il coefficiente del termine di grado più alto del polinomio) è diverso da zero ad esempio, per creare il polinomio p(x) = x 3 + 2x 1 deve essere usata la seguente espressione new Polinomio( new double[] { 1, 2, 0, 1 ) il grado del polinomio da creare è quindi pari alla lunghezza dell array coefficienti diminuita di 1 3

Polinomio metodo di test /* Applicazione di esempio di uso per Polinomio. */ public static void main(string[] args) { Polinomio p; p = new Polinomio( new double[] { -1, 2, 0, 1 ); /* p rappresenta x^3 +2*x -1 */ System.out.println(p.grado()); // 3 System.out.println(p.valore(0)); // -1.0 System.out.println(p.valore(2)); // 11.0 System.out.println(p.toString()); // +1.0*x^3+2.0*x-1.0 4

Polinomio variabili d istanza Un oggetto Polinomio rappresenta un polinomio a coefficienti reali le proprietà di un polinomio a coefficienti reali sono il grado N del polinomio gli N+1 coefficienti dei termini del polinomio queste proprietà possono essere rappresentate da un array coefficienti di numero reali l elemento i-esimo di coefficienti rappresenta il coefficiente del termine di grado i del polinomio il grado del polinomio viene rappresentato (indirettamente) dalla lunghezza dell array coefficienti Ad esempio, il seguente array rappresenta lo stato del polinomio p(x) = x 3 + 2x 1 1 2 0 1 0 1 2 3 5

Polinomio struttura della classe /** Un Polinomio rappresenta un polinomio * a coefficienti reali. */ class Polinomio { /** Coefficienti del polinomio. */ private double[] coefficienti; /* l'elemento i-esimo rappresenta il coefficiente * del termine di grado i del polinomio */ // chk: coefficienti!=null && // l'ultimo elemento di coefficienti // è diverso da zero... costruttori...... metodi... 6

Polinomio costruttore /** Crea un nuovo Polinomio, * dato l'array c dei coefficienti. */ public Polinomio(double[] c) { // pre: c!=null && // l'ultimo elemento di c è diverso da zero... Il costruttore potrebbe semplicemente assegnare alla variabile d istanza coefficienti il riferimento all array c passato come parametro questa soluzione è però soggetta a effetti collaterali non desiderati in particolare, il polinomio verrebbe modificato se venisse cambiato il valore degli elementi dell array usato come parametro attuale nell invocazione del costruttore è quindi opportuno che il costruttore cloni l array c (ovvero, crei una copia di c) 7

Polinomio costruttore /** Crea un nuovo Polinomio, * dato l'array c dei coefficienti. */ public Polinomio(double[] c) { // pre: c!=null && // l'ultimo elemento di c è diverso da zero int i; // indice per la scansione di c /* crea una copia di c */ this.coefficienti = new double[c.length]; for (i=0; i<c.length; i++) this.coefficienti[i] = c[i]; In questo modo, il polinomio creato è insensibile a eventuali variazioni dell array usato come parametro attuale nell invocazione del costruttore 8

Polinomio int grado() Il metodo int grado() deve calcolare e restituire il grado del polinomio il grado del polinomio è dato dalla lunghezza dell array coefficienti diminuita di uno /** Calcola il grado di questo Polinomio. */ public int grado() { return coefficienti.length - 1; 9

Polinomio double valore(double x) Il metodo double valore(double x) deve calcolare e restituire il valore del polinomio nel punto x indicando con n il grado del polinomio e con c i il coefficiente del termine di grado i, deve calcolare il valore dell espressione c n x n + c n 1 x n 1 +... + c 1 x + c 0 una prima soluzione può essere ottenuta definendo un metodo ausiliario potenza per il calcolo di potenze intere /** Calcola il valore di questo Polinomio in x. */ public double valore(double x) { double v; // valore del polinomio nel punto x int i; // indice per iterare // sui termini del polinomio 10 /* calcola il valore del polinomio nel punto x */ v = 0; for (i=0; i<coefficienti.length; i++) v += coefficienti[i]*potenza(x,i); return v;

Polinomio il metodo potenza Il metodo double potenza(double x, int n) calcola e restituisce il valore di x n, con n naturale /** Calcola il valore di x alla n. */ private static double potenza(double x, int n) { // pre: n>=0 double p; // x alla n int i; // per iterare fino a n /* calcola x alla n */ p = 1; for (i=0; i<n; i++) p = p*x; return p; il metodo double potenza(double x, int n) è evidentemente un metodo di supporto, ed è pertanto stato dichiarato privato alternativamente, potrebbe essere usato il metodo double pow(double a, double b) di Math 11

Polinomio double valore(double x) La seguente osservazione permette di scrivere una implementazione più efficiente del metodo valore il calcolo della potenza i-esima avviene contestualmente al calcolo del valore parziale del polinomio limitatamente al termine di grado i /** Calcola il valore di questo Polinomio in x. */ public double valore(double x) { double v; // valore del polinomio nel punto x int i; // per iterare sui termini del polinomio double xi; // x alla i v = 0; xi = 1; // ok per i = 0 for (i=0; i<coefficienti.length; i++) { /* xi vale x alla i */ v += coefficienti[i]*xi; xi = xi*x; // ok per la prossima iterazione return v; 12

Polinomio String tostring() Il metodo d istanza String tostring() deve calcolare una descrizione del polinomio sotto forma di stringa ad esempio, la descrizione del polinomio p(x) = x 3 + 2x 1 può essere la stringa "+1.0*x^3 +2.0*x 1.0" ipotesi che vengono fatte circa la descrizione del polinomio i termini il cui coefficiente vale zero non devono comparire nella descrizione tranne per il caso del polinomio p(x) = 0, la cui rappresentazione è "0" il termine di grado uno non riporta il grado del termine il termine di grado zero è composto solo dal coefficiente per i termini che hanno coefficiente negativo sono preceduti dal solo segno meno 13

Polinomio String tostring() /** Calcola una descrizione di questo Polinomio. */ public String tostring() { String d; // descrizione di questo Polinomio int i; // indice per i termini del polinomio double ci; // il coefficiente i-esimo /* calcola la descrizione d di questo polinomio */ if (this.grado()==0) // polinomio di grado 0 d = String.valueOf(coefficienti[0]); else { /* caso di polinomio di grado maggiore di 0 */ d = ""; for (i=grado(); i>=0; i--) {... concatena a d la descrizione del termine di grado i... return d; 14

Polinomio String tostring() d = ""; for (i=grado(); i>=0; i--) { /* concatena a d la descrizione del termine di grado i */ ci = coefficienti[i]; /* solo termini con coeff. non nullo */ if (ci!=0) { /* concatena + per i coeff. positivi */ if (ci>0) d += "+"; /* concatena coefficiente */ d += ci; /* concatena il resto del termine */ if (i>0) d += "*x"; if (i>1) d += "^" + i; 15

Esercizi I seguenti esercizi richiedono di modificare e/o estendere la definizione della classe Polinomio definire il metodo d istanza boolean equals(polinomio p) e il metodo boolean equals(object p) che verificare l uguaglianza tra questo polinomio e il polinomio p definire un metodo di classe somma che, data una coppia di polinomi a e b, crea e restituisce un nuovo Polinomio uguale alla somma di a e b si faccia attenzione al caso in cui a e b hanno grado diverso, e al caso in cui, pur avendo a e b lo stesso grado, la loro somma ha un grado inferiore modificare la definizione del costruttore rilassando il vincolo sull ultimo elemento del parametro del costruttore se l ultimo o gli ultimi coefficienti del parametro sono nulli, il costruttore deve creare un array di lunghezza opportunamente minore di quello passato come parametro, in modo che comunque l ultimo elemento della variabile d istanza coefficienti sia non nullo 16

Esercizi Intuitivamente, lo stato di un oggetto che rappresenta una stringa può essere rappresentato mediante un array di caratteri, la cui lunghezza è esattamente la lunghezza della stringa rappresentata definire una classe MyString che sia una nuova implementazione (di una parte) della classe String la classe MyString deve definire una sola variabile d istanza cars di tipo array di caratteri, per rappresentare i caratteri della stringa un costruttore MyString(String s), che crea un nuovo oggetto MyString per rappresentare la stringa s un metodo String tostring(), che restituisce la stringa rappresentata dall oggetto MyString i metodi int length(), char charat(), MyString concat(mystring s), MyString substring(int inizio, int fine), MyString substring(int inizio), equivalenti ai metodi corrispondenti della classe String (questi metodi devono essere realizzati operando sulla variabile d istanza cars) 17