Una classe Borsellino. Tipi numerici di base - Costanti. Esempio d uso. Classe Borsellino cont d. Primi passi per l implementazione di Purse

Documenti analoghi
Numeri, espressioni, calcoli, caratteri, input

Purse mypurse = new Purse(); mypurse.addnickels(3); mypurse.adddimes(1); mypurse.addquarters(2); double totalvalue = mypurse.

Operazioni numeriche - Input

Tipi di dati fondamentali

Tipi di dati fondamentali

Programmazione in Java (I modulo)

LA CODIFICA DELL INFORMAZIONE. Introduzione ai sistemi informatici D. Sciuto, G. Buonanno, L. Mari, McGraw-Hill Cap.2

Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010

Somma di numeri binari

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Tipi di dato primitivi

Linguaggio C. Tipi predefiniti. Università degli Studi di Brescia. Prof. Massimiliano Giacomin. Prof. M. Giacomin

Caratteristiche di un linguaggio ad alto livello

Lezione 3. I numeri relativi

Struttura dei programmi C

Calcolo numerico e programmazione Rappresentazione dei numeri

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

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

Linguaggio C - sezione dichiarativa: costanti e variabili

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

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

Codifica. Rappresentazione di numeri in memoria

Linguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Tipi elementari, costanti. Tipi di dati. VALORI: un insieme dei valori del tipo OPERAZIONI: per operare su tali valori. Tipi. intero reale carattere

La codifica. dell informazione

Rappresentazione di numeri relativi (interi con segno) Rappresentazione di numeri interi relativi (con N bit) Segno e Valore Assoluto

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

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

La codifica. dell informazione

Rappresentazione dell informazione

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

Capitolo 4. Tipi di dati fondamentali. Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione

Rappresentazione di Numeri Reali. Rappresentazione in virgola fissa (fixed-point) Rappresentazione in virgola fissa (fixed-point)

Analogico vs. Digitale. LEZIONE II La codifica binaria. Analogico vs digitale. Analogico. Digitale

Oggetti e classi. Cos è un oggetto

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

ESERCITAZIONE. Uso dell accessorio calcolatrice per

Un ripasso di aritmetica: Conversione dalla base 10 alla base 2

Rappresentazione dell Informazione

Codifica binaria. Rappresentazioni medianti basi diverse

Conversioni fra Tipi di Dati. Luca Abeni

Si possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi).

Laboratorio di Informatica

Introduzione al Linguaggio C

Input/Output di numeri

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Tipi di dati fondamentali. Tipi di dati fondamentali. Utilità dei tipi di dati nelle dichiarazioni. Il tipo di dati char. Codice ASCII.

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

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

Sistemi di Numerazione Binaria

La "macchina" da calcolo

1 Il Paradigma ad Oggetti

Java Le stringhe. Stringhe

Rapida Nota sulla Rappresentazione dei Caratteri

Programmazione 1 A.A. 2015/2016

Esercizi di Analisi Numerica. Errori, Cambi di base, Numeri macchina, Aritmetica finita

Laboratorio di Informatica Ingegneria Clinica Lezione 9/11/2011. Prof. Raffaele Nicolussi

Rappresentazione binaria delle variabili (int e char)

Riprendiamo l esercizio calcolatrice

Rappresentazione dei dati in memoria

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011

APPUNTI DI INFORMATICA

CONVERSIONE BINARIO DECIMALE NB: Convertire in decimale il numero binario N = N =

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

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Numeri reali. Notazione scientifica (decimale) Floating Point. Normalizzazione. Esempi. Aritmetica del calcolatore (virgola mobile)

PROBLEMI ALGORITMI E PROGRAMMAZIONE

Concetti base programmazione. Antonio Gallo

Cap. 2 - Rappresentazione in base 2 dei numeri interi

Riassunto. I mattoni di base di un programma Java. Oggi. Un programma complicato. Oggi. Perché è complicato? Stefano Mizzaro 1.

Rappresentazione dei numeri reali in un calcolatore

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Le basi del linguaggio Java

Codifica binaria dell informazione

codifica in virgola mobile (floating point)

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

Variabili. Tipi di dati di base. Variabili. Variabili

I.4 Rappresentazione dell informazione

Tipi di dato. Le variabili in C. Problema: dato in input un carattere, se esso è una lettera minuscola, trasformarla in maiuscola.

Uso di metodi statici. Walter Didimo

Modulo 2: Strutture fondamentali della programmazione Java

Aritmetica dei Calcolatori 3

Java. Java: compilatore e interprete. Programma Java. Java Virtual Machine. Token. Alfabeto

Corso sul linguaggio C Modulo Tipi di dato

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

Esercizi Programmazione I

Rappresentazione dei Dati

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Rappresentazione e Codifica dell Informazione

La programmazione nel linguaggio C

Rectangle BankAccount Purse

Programmazione orientata agli oggetti Classi, package e file system. Package

I sistemi di numerazione. Informatica - Classe 3ª, Modulo 1

Addizionatori: metodo Carry-Lookahead. Costruzione di circuiti combinatori. Standard IEEE754

R. Cusani, F. Cuomo: Telecomunicazioni - DataLinkLayer: Gestione degli errori, Aprile 2010

Il concetto di Package

La codifica binaria. Informatica B. Daniele Loiacono

Gli Operatori. Linguaggio C. Gli Operatori. Esempi sull uso dell Operatore di Assegnamento. L Operatore di Assegnamento

Transcript:

Una classe Borsellino Tipi numerici di base - Interi e decimali Definizione di costanti /** Realizza un borsellino per le monete. Registra il numero di monete e calcola il valore totale public class Purse { /** Costruisce un borsellino vuoto public Purse() { /** Aggiunge monete di tipo "nickel" al borsellino @param count il numero di nickel da aggiungere public void addnickels(int count) { 9/11/2004 Laboratorio di Programmazione - Luca Tesei 1 9/11/2004 Laboratorio di Programmazione - Luca Tesei 2 Classe Borsellino cont d /** Aggiunge monete di tipo "dime" al borsellino @param count il numero di dime da aggiungere public void adddimes(int count) { /** Aggiunge monete di tipo "quarter" al borsellino @param count il numero di quarter da aggiungere public void addquarters(int count) { /** Ispeziona il valore totale delle monete nel borsellino @returns la somma dei valori di tutte le monete attualmente presenti 9/11/2004 Laboratorio di Programmazione - Luca Tesei 3 Esempio d uso Purse mypurse = new Purse(); mypurse.addnickels(3); mypurse.adddimes(1); mypurse.addquarters(2); double totalvalue = mypurse.gettotal(); totalvalue conterrà 0,75 cioè il valore in dollari delle monete contenute nel borsellino 9/11/2004 Laboratorio di Programmazione - Luca Tesei 4 Numeri interi e numeri decimali Per rappresentare quantità che si contano naturalmente con multipli di 1 usiamo variabili di tipo intero (int) Nell esempio del borsellino int è il tipo dei parametri dei metodi addxxx Questo perché è naturale considerare le monete come quantità indivisibili e quindi quantificate con un numero intero Il metodo gettotal() invece restituisce un double Questo perché è naturale per un valore che rappresenta una quantità di dollari avere dei decimali Primi passi per l implementazione di Purse Ogni oggetto di tipo Purse può essere descritto dalla quantità di nickels, dimes e quarters che contiente Inseriamo quindi tre variabili istanza di tipo int per rappresentare queste quantità... private int nickels; private int dimes; private int quarters; 9/11/2004 Laboratorio di Programmazione - Luca Tesei 5 9/11/2004 Laboratorio di Programmazione - Luca Tesei 6

Primi passi per l implementazione di Purse return nickels * 0.05 + dimes * 0.01 + quarters * 0.25; L * indica la moltiplicazione (perché o non si trovano generalmente nelle tastiere) L espressione dopo return segue le regole di associatività e precedenza tipiche dell aritmetica (la grammatica di Java per le espressioni segue le regole che abbiamo visto a Programmazione) Il valore ottenuto è un numero in virgola mobile poiché moltiplicando un intero per un numero decimale si ottiene un numero decimale, in generale 9/11/2004 Laboratorio di Programmazione - Luca Tesei 7 numeriche Nelle costanti numeriche che si possono scrivere nel codice la virgola deve essere indicata come punto decimale Si può usare anche la notazione esponenziale Ad esempio 5,0 10-3 si scrive come 5.0E-3 Cioè si usa il punto decimale e si scrive E seguito dall esponente di 10 9/11/2004 Laboratorio di Programmazione - Luca Tesei 8 Numeri interi Un numero intero è un numero senza decimali che può essere sia positivo che negativo Il tipo base Java corrispondente ai numeri interi è int Una variabile int può contenere i numeri interi da 2147483648 a +2147483647 31 bit + 1 bit per il segno = 32 bit di memoria allocati per ogni variabile int Numeri interi Esistono altri tipi base di interi che possono rappresentare meno o più numeri di int short: 16 bit - Range: da -2 15 a 2 15-1 byte: 8 bit - Range da 2 7 a 2 7-1 long: 64 bit - Range da 2 63 a 2 63 1 9/11/2004 Laboratorio di Programmazione - Luca Tesei 9 9/11/2004 Laboratorio di Programmazione - Luca Tesei 10 Numeri in virgola mobile Possono contenere cifre decimali Contengono un certo numero di cifre significative e la posizione della virgola Es. 250 25 0.25 0.025 hanno tutti le stesse cifre significative (25), ciò che cambia è la posizione della virgola (da qui virgola mobile ) Naturalmente la rappresentazione in realtà è in base 2 In java la virgola è rappresentata dal punto decimale come nella notazione anglo-sassone (come tutte le calcolatrici del resto) Numeri in virgola mobile double può rappresentare circa 15 cifre significative: è il tipo con maggiore precisione ( doppia precisione ) float può rappresentare circa 7 cifre significative: precisione spesso insufficiente, ma calcoli più veloci Per precisione si intende la grandezza degli errori dovuti all arrotondamento che inevitabilmente si commettono con l uso di questi numeri 9/11/2004 Laboratorio di Programmazione - Luca Tesei 11 9/11/2004 Laboratorio di Programmazione - Luca Tesei 12

Precisione public class ProvaPrecisione { public static void main(string [] argv) { double originalprice = 3E14; double discountedprice = originalprice 0.05; double discount = originalprice discountedprice; // dovrebbe essere 0.05 System.out.println(discount); // stampa 0.0625 Errore dovuto //all arrotondamento da rappresentazione 9/11/2004 Laboratorio di Programmazione - Luca Tesei 13 Numeri rappresentabili Il tipo float può rappresentare il range dei numeri, positivi o negativi, con valore assoluto che va da 2-149 a (2-2 -23 ) 2 127 Il tipo double può rappresentare il range dei numeri, positivi o negativi, con valore assoluto che va da 2-1074 a (2-2 -52 ) 2 1023 9/11/2004 Laboratorio di Programmazione - Luca Tesei 14 Numeri a lunghezza e precisione arbitraria Il pacchetto java.math contiene una classe BigInteger i cui oggetti possono rappresentare numeri interi di lunghezza arbitraria Lo stesso pacchetto contiene una classe BigDecimal i cui oggetti possono rappresentare numeri a virgola mobile con precisione arbitraria 9/11/2004 Laboratorio di Programmazione - Luca Tesei 15 Numeri a lunghezza e precisione arbitraria Per questi numeri non si possono usare i normali operatori + * - / = I corrispondenti metodi add, multiply, subtract, divide ed equals sono forniti dalle relative classi: BigInteger a = new BigInteger( 123456789 ); BigInteger b = new BigInteger( 987654321 ); BigInteger c = a.multiply(b); System.out.println(c); // stampa 121932631112635269 Naturalmente i calcoli con questi numeri sono più lenti di quelli fatti con i numeri dei tipi base 9/11/2004 Laboratorio di Programmazione - Luca Tesei 16 Costruttore di Purse Public Purse() { nickels = 0; dimes = 0; quarters = 0; Il costruttore di default farebbe esattamente la stessa cosa, ma lo specifichiamo per chiarezza 9/11/2004 Laboratorio di Programmazione - Luca Tesei 17 Implementazione di addnickels public void addnickels(int count) { nickels = nickels + count; È la tipica istruzione di incremento di un valore L assegnamento prima valuta la parte a sinistra dell = e quindi considera il valore corrente della variabile istanza intera nickels al quale aggiunge il valore di count Il valore così ottenuto sarà assegnato alla variabile istanza nickels, cioè sarà il suo valore dopo l esecuzione dell istruzione (si può pensare che sia il valore che nickels ha dopo il ; finale) 9/11/2004 Laboratorio di Programmazione - Luca Tesei 18

Altre istruzioni di incremento In Java, come in C, esiste una forma abbreviata per l incremento nickels = nickels + count; può essere scritta equivalentemente come nickels += count; La stessa abbreviazione si può usare anche per gli altri operatori (*, /, -): P *= q; // equivalente a p = p * q; Incremento di 1 Un istruzione che ricorre molto frequentemente nei programmi è l incremento o il decremento di una variabile intera di una unità In Java, come in C, esistono abbreviazioni speciali per questi casi: i++; // equivalente a i = i + 1; e a i +=1; i--; // equivalente a i = i 1; e a i -=1; 9/11/2004 Laboratorio di Programmazione - Luca Tesei 19 9/11/2004 Laboratorio di Programmazione - Luca Tesei 20 return nickels * 0.05 + dimes * 0.01 + quarters * 0.25; La maggior parte del codice si documenta da sé, ma in questo caso i numeri 0.05, 0.01 e 0.25 compaiono senza nessuna spiegazione È buona regola evitare di inserire nel codice questi numeri magici Le costanti possono essere pensate come dei nomi a cui è associato un valore Tale associazione rimane valida per tutta la vita della costante e non cambia mai In genere, per convenzione, le costanti sono scritte tutte maiuscole e si usa l underscore come separatore nel caso che il nome sia composto da più parole In Java una costante si dichiara come una variabile (di frame) usando la parola chiave final e inizializzando il valore nella dichiarazione 9/11/2004 Laboratorio di Programmazione - Luca Tesei 21 9/11/2004 Laboratorio di Programmazione - Luca Tesei 22 final double NICKEL_VALUE = 0.05; final double DIME_VALUE = 0.01; final double QUARTER_VALUE = 0.25; return nickels * NICKEL_VALUE + dimes * DIME_VALUE + quarters * QUARTER_VALUE; final In generale in Java la parola chiave final indica un qualcosa che non può essere più modificato (vedremo che esistono, oltre alle variabili, anche classi final, cioè che non possono essere estese) Il compilatore dà errore se si cerca di modificare una variabile final. 9/11/2004 Laboratorio di Programmazione - Luca Tesei 23 9/11/2004 Laboratorio di Programmazione - Luca Tesei 24

La dichiarazione di una variabile con lo specificatore final ha lo stesso effetto di una qualsiasi altra definizione di variabile Viene cioè allocata la nuova variabile sul frame corrente dell attivazione corrente Al momento della chiusura del blocco del frame in cui è stata definita essa scompare E il controllo del compilatore che la rende non modificabile In genere però le costanti sono utili in diversi metodi della stessa classe Per evitare di dover ridefinire le variabili final in ogni metodo che le usa (ed evitare anche errori se il valore viene modificato solo in alcuni metodi, ad esempio in un altra versione del programma) possiamo pensare di associare le costanti direttamente alla classe Per definire costanti che si riferiscono ad una classe si può usare lo specificatore static 9/11/2004 Laboratorio di Programmazione - Luca Tesei 25 9/11/2004 Laboratorio di Programmazione - Luca Tesei 26 static Lo specificatore static deriva dal C e il suo nome può risultare fuorviante In Java se nella definizione di una classe viene inserita una variabile istanza con lo specificatore static quella variabile istanza va considerata come elemento della classe In genere le variabili istanza formano lo stato di ogni oggetto della classe che viene creato Le variabili istanza static invece non vanno a far parte dello stato degli oggetti della classe static Esiste una sola copia di una variabile istanza static di una classe e si riferisce all intera classe Per riferirla e/o modificarla si usa la notazione NomeClasse.nomeVariabileIstanzaStatic Alle variabili istanza static possono essere associati tutti i possibili specificatori di accesso: public, private e protected Inoltre possono essere final, cioè costanti di classe 9/11/2004 Laboratorio di Programmazione - Luca Tesei 27 9/11/2004 Laboratorio di Programmazione - Luca Tesei 28 Esempio Vedremo più avanti degli esempi in cui sono utili variabili static di classe Per adesso useremo questa possibilità solo per specificare costanti Nel nostro caso le costanti che indicano il valore di ogni moneta sembrano essere utili solo nel contesto della classe Purse e quindi le dichiariamo private Molte classi delle API hanno invece delle costanti pubbliche che si possono usare Esempio public class Purse {... private static final double NICKEL_VALUE = 0.05; private static final double DIME_VALUE = 0.01; private static final double QUARTER_VALUE = 0.25;... 9/11/2004 Laboratorio di Programmazione - Luca Tesei 29 9/11/2004 Laboratorio di Programmazione - Luca Tesei 30

Esempio All interno dei metodi della classe si possono riferire le variabili static (sia final che non) semplicemente con il loro nome (nel caso di conflitto va invece specificato il nome completo (cioè NomeClasse.nomeVariabile), ad esempio Purse.NICKEL_VALUE return nickels * NICKEL_VALUE + dimes * DIME_VALUE + quarters * QUARTER_VALUE; 9/11/2004 Laboratorio di Programmazione - Luca Tesei 31