Il tipo di dati char (capitolo 4)

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Il tipo di dati char (capitolo 4)"

Transcript

1 SETTIMANA 3 Il tipo di dati char (capitolo 4) Caratteri in una stringa Sappiamo già come estrarre sottostringhe da una stringa, con il metodo substring A volte è necessario estrarre ed elaborare sottostringhe di dimensioni minime, cioè di lunghezza unitaria una stringa di lunghezza unitaria contiene un solo carattere, che può essere memorizzato in una variabile di tipo char anziché in una stringa il tipo char in Java è un tipo di dato fondamentale come i tipi di dati numerici ed il tipo boolean, cioè non è una classe 1 2 Caratteri in una stringa Caratteri in una stringa La presenza del tipo di dati char non è strettamente necessaria in Java (ed è anche per questo motivo che non l avevamo ancora studiato) infatti, ogni elaborazione che può essere fatta su variabili di tipo char potrebbe essere fatta su stringhe di lunghezza unitaria L uso del tipo char per memorizzare stringhe di lunghezza unitaria è però importante, perché una variabile di tipo char occupa meno spazio in memoria di una stringa di lunghezza unitaria le elaborazioni su variabili di tipo char sono più veloci 3 Il metodo charat della classe String restituisce il singolo carattere che si trova nella posizione indicata dal parametro ricevuto la convenzione sulla numerazione delle posizioni in una stringa è la stessa usata dal metodo substring String s = "John"; char ch = s.charat(2); // ch contiene 'h' Una struttura di controllo che si usa spesso è l elaborazione di tutti i caratteri di una stringa String s = "John"; for (int i = 0; i < s.length(); i++) { char ch = s.charat(i); // elabora ch 4 Elaborazioni su variabili char Come si può elaborare una variabile di tipo char? Una variabile di tipo char può anche essere confrontata con una costante di tipo carattere una costante di tipo carattere è un singolo carattere racchiuso tra singoli apici ( apostrofo ) char ch = 'x'; Il carattere può anche essere una sequenza di escape char ch = '\u00e9'; // carattere 'è' char nl = '\n'; // carattere di "andata a capo" Una variabile carattere può essere stampata passandola a System.out.print o System.out.println char ch = 'x'; System.out.println(ch); // stampa 'x' e va a capo 5 Caratteri e l'operatore + Un char può essere concatenato ad una stringa con l operatore di concatenazione + (viene convertito in stringa, con le stesse regole della conversione dei tipi numerici) Se invece i due operandi di + sono entrambi caratteri Vengono automaticamente convertiti ( promossi ) in int L'operatore + indica una normale somma tra interi char a = 'a'; char b = 'b'; int intc = a + b; char c = (char)(a + b); System.out.println( intc: + intc); System.out.println( c: + c); intc: 195 c: Ã 6

2 Sequenze di escape Caratteri speciali e sequenze di escape Proviamo a stampare una stringa che contiene delle virgolette Hello, "World"! // NON FUNZIONA! System.out.println("Hello, "World"!"); Il compilatore identifica le seconde virgolette come la fine della prima stringa "Hello, ", ma poi non capisce il significato della parola World Basta inserire una barra rovesciata \ (backslash) prima delle virgolette all interno della stringa System.out.println("Hello, \"World\"!"); 7 8 Sequenze di escape // FUNZIONA! System.out.println("Hello, \"World\"!"); Il carattere backslash all interno di una stringa non rappresenta se stesso, ma si usa per codificare altri caratteri che sarebbe difficile inserire in una stringa, per vari motivi (sequenza di escape) Allora, come si fa ad inserire veramente un carattere backslash in una stringa? si usa la sequenza di escape \\ System.out.println("File C:\\autoexec.bat"); File C:\autoexec.bat Sequenze di escape Un altra sequenza di escape che si usa è \n, che rappresenta il carattere di nuova riga o andare a capo System.out.println("*\n**\n***"); System.out.println("*"); System.out.println("**"); System.out.println("***"); Le sequenze di escape si usano anche per inserire caratteri di lingue straniere o simboli che non si trovano sulla tastiera * ** *** 9 10 Sequenze di escape Ad esempio, per scrivere parole italiane con lettere accentate senza avere a disposizione una tastiera italiana System.out.println("Perch\u00E9?"); Perché? Queste sequenze di escape utilizzano la codifica standard Unicode per rappresentare i caratteri di tutti gli alfabeti del mondo con 4 cifre esadecimali (codifica a 16 bit, simboli diversi) Escape e caratteri di controllo Alcune sequenze di escape possono essere usate per rappresentare dei caratteri di controllo Ovvero caratteri Unicode che non rappresentano simboli scritti Ma che fanno parte integrante di un flusso di testo, come tutti gli altri caratteri SEQ.ESCAPE NOME COD.UNICODE \n newline \u000a \t tab \u0009 \b backspace \u0008 \r return \u000d \f formfeed \u000c 11 12

3 Caratteri di controllo I primi 32 caratteri nella codifica Unicode sono tutti caratteri di controllo Il cosiddetto insieme C0 di ASCII (e Unicode) Per chi e' interessato Vedremo altri importanti caratteri di controllo ETX (End of TeXt), immesso da tastiera con <CTRL>+C usato per interrompere l'esecuzione di un programma EOT (End Of Transmission, <CTRL>+D) e SUB (SUBstitute, <CTRL>+Z) Formattazione di numeri: il metodo printf Usati per segnalare la fine dell'input, ad esempio di un file Formattazione di numeri Non sempre il formato standard per stampare numeri corrisponde ai nostri desideri double total = 3.50; final double TAX_RATE = 8.5; // aliquota d imposta in percentuale double tax = total * TAX_RATE / 100; System.out.println( Total: + total); System.out.println( Tax: + tax); Total: 3.5 Tax: Ci piacerebbe di più visualizzare i numeri Con due cifre decimali Total: 3.50 Incolonnati Tax: Formattazione di numeri Java fornisce il metodo printf, che ha più parametri espliciti Il primo parametro è una stringa di formato che contiene caratteri da stampare e specificatori di formato Ogni specificatore di formato comincia con il carattere % I parametri successivi sono i valori da visualizzare secondo i formati specificati System.out.printf( Total:%5.2f, total) Produce: Total: 3.50 Spazio 16 Formattazione di numeri Tipi di formato e modificatori di formato: Caratteri di fine riga Diversi sistemi operativi capiscono diversi caratteri di fine riga Sistemi Unix usano il carattere newline (o line feed): \n DOS usa la sequenza carriagereturn newline: \r\n Per essere sicuri che la fine della riga sia riconosciuta da qualsiasi sistema operativo possiamo usare il metodo printf con il formato %n System.out.printf( Total:%5.2f%n, total) produce Total: 3.50 Nuova riga 17 18

4 I dati in ingresso ai programmi Ricevere dati in ingresso I programmi visti finora non sono molto utili, visto che eseguono sempre la stessa elaborazione ad ogni esecuzione Il programma Coins1 rappresenta sempre il medesimo borsellino se si vuole che calcoli il valore contenuto in un diverso borsellino, è necessario modificare il codice sorgente (in particolare, le inizializzazioni delle variabili) e compilarlo di nuovo I programmi utili hanno bisogno di ricevere dati in ingresso dall utente L input standard dei programmi Il modo più semplice e immediato per fornire dati in ingresso ad un programma consiste nell utilizzo della tastiera altri metodi fanno uso del mouse, del microfono Abbiamo visto che tutti i programmi Java hanno accesso al proprio output standard, tramite l oggetto System.out di tipo PrintStream Analogamente, l interprete Java mette a disposizione dei programmi in esecuzione il proprio input standard (flusso di input), tramite l oggetto System.in di tipo InputStream La classe Scanner Sfortunatamente, la classe InputStream non possiede metodi comodi per la ricezione di dati numerici e stringhe PrintStream ha invece il comodissimo metodo print Per ovviare a questo inconveniente, Java 5.0 ha introdotto la classe Scanner Un oggetto di tipo Scanner consente di leggere da qualsiasi flusso di ingresso (ad es. un file) Noi cominciamo ad usarlo per leggere dati in ingresso da tastiera ricevuti tramite l'oggetto System.in Leggere l input con la classe Scanner Usare la classe Scanner Sono due oggetti diversi!! Per leggere dallo standar input bisogna creare un oggetto di tipo Scanner, usando la sintassi consueta Scanner in = new Scanner(System.in); Il parametro esplicito del costruttore di Scanner è System.in L'oggetto in di tipo Scanner è agganciato allo standard input Dato che la classe Scanner non fa parte del pacchetto java.lang, ma del pacchetto java.util, è necessario importare esplicitamente la classe all'interno del file java che ne fa uso import java.util.scanner; Quando non si usa piu l oggetto di classe Scanner e bene chiuderlo: in.close(); 23 24

5 I metodi nextint e nextdouble Come si fa ad acquisire valori numerici da standard input? Numero intero: metodo int nextint() int number = in.nextint(); Numero in virgola mobile: metodo double nextdouble() double number = in.nextdouble(); Durante l esecuzione del metodo (nextint o nextdouble) il programma si ferma ed attende l introduzione dell input da tastiera, che termina quando l utente batte il tasto Invio nextint restituisce un valore numerico di tipo int NextDouble restituisce un valore numerico di tipo double cosa succede se l utente non digita un numero intero (o un numero double) sulla tastiera?? Provare!! 25 Esempio import java.util.scanner; public class Coins4 { public static void main(string[] args) { Scanner in = new Scanner(System.in); System.out.println("Quante lire?"); int lit = in.nextint(); System.out.println("Quanti euro?"); double euro = in.nextdouble(); System.out.print("Valore totale in euro "); System.out.println(euro + lit / ); 26 I metodi next e nextline Come si fa ad acquisire stringhe da standard input? Parola ovvero una stringa delimitata dai caratteri di spaziatura space (SP), tab (\t), newline (\n), carriage return (\r) metodo String next() String state = in.next(); Riga (ovvero una stringa delimitata dai caratteri \n o \r): metodo String nextline(): String city = in.nextline(); 27 Esempio import java.util.scanner; public class MakePassword2 { public static void main(string[] args) { Scanner in = new Scanner(System.in); System.out.println("Inserire il nome"); String firstname = in.nextline(); System.out.println("Inserire il cognome"); String lastname = in.nextline(); System.out.println("Inserire l eta "); int age = in.nextint(); String initials = firstname.substring(0, 1) + lastname.substring(0, 1); String pw = initials.tolowercase() + age; System.out.println("La password e " + pw); 28 Scanner e localizzazione La classe Scanner prevede la possibilità di riconoscere numeri formattati secondo diverse usanze locali Nel corso noi useremo la convenzione anglosassone che prevede l uso del carattere di separazione. tra parte intera e parte frazionaria nei numeri in virgola mobile Per definire un oggetto Scanner che rispetta questa convenzione dovremo importare anche la classe Locale e scrivere import java.util.scanner; import java.util.locale; Scanner in = new Scanner(System.in); in.uselocale(locale.us); 29 È tutto chiaro? 1.Perché non si possono leggere dati in ingresso direttamente tramite System.in? 2.Se in è un oggetto di tipo Scanner che legge da System.in e il nostro programma invoca String name = in.next(); Qual è il valore di name se l utente digita la seguente stringa? John Q. Public 30

6 Realizzare classi (Capitolo 3) Scatole nere Per molti guidatori Un automobile è una scatola nera Non sanno come funziona Ma sanno come usarla Un ingegnere meccanico sa progettare una automobile ma non i moduli di controllo elettronico Non ne conosce il funzionamento interno Ma sa come usarli Scatole nere danno luogo ad incapsulamento I dettagli non importanti vengono nascosti Ma va identificato il concetto che meglio rappresenta una scatola nera: questo comporta astrazione Scatole nere Approccio alla programmazione orientato agli oggetti Il software viene incapsulato in scatole nere (oggetti) Diversi livelli di astrazione Un utente di computer usa un programma costruito tramite oggetti senza sapere nulla di programmazione Un programmatore può usare un oggetto senza conoscerne i dettagli di funzionamento Gli oggetti usati da un programmatore sono programmati da altri programmatori Un oggetto contiene altri oggetti Progettare la classe BankAccount Il progetto di una classe: BankAccount Vogliamo progettare la classe BankAccount, che descriva il comportamento di un conto corrente bancario Quali caratteristiche sono essenziali al concetto di conto corrente bancario? Possibilità di versare denaro Possibilità di prelevare denaro Possibilità di conoscere il saldo attuale Queste caratteristiche definiscono l'interfaccia pubblica della classe 35 36

7 Progettare la classe BankAccount Le operazioni consentite dal comportamento di un oggetto si effettuano mediante invocazione di metodi Dobbiamo definire tre metodi public void deposit(double amount); public void withdraw(double amount); public double getbalance(); Tali metodi consentono di depositare denaro nel conto prelevare denaro dal conto conoscere il saldo account.deposit(1000); account.withdraw(500); double balance = account.getbalance(); Definizioni di metodi public void deposit(double amount) public double getbalance() La definizione di un metodo inizia sempre con la sua intestazione (o firma, o signature), composta da uno specificatore di accesso In questo caso public, altre volte vedremo private il tipo di dati restituito dal metodo (double, void) il nome del metodo (deposit, withdraw, getbalance) un elenco di parametri, eventualmente vuoto, racchiuso tra parentesi tonde di ogni parametro si indica il tipo ed il nome più parametri sono separati da una virgola Definizioni di metodi Metodi di accesso e modificatori L'intestazione di un metodo è seguita dal corpo del metodo stesso, composto da un insieme di enunciati che specificano le azioni svolte dal metodo stesso racchiusi tra parentesi graffe Metodo d'accesso: accede ad un oggetto e restituisce informazioni senza modificarlo getbalance è metodo di accesso length della classe String è metodo di accesso getx, gety, getwidth, getheight della classe Rectangle sono metodi di accesso public void deposit(double amount) { //corpo del metodo public double getbalance() { //corpo del metodo 39 Metodo modificatore: altera lo stato di un oggetto deposit e withdraw sono metodi modificatori translate della classe Rectangle è un metodo modificatore 40 Ripasso: costruire oggetti Costruttori Abbiamo detto che per creare un nuovo oggetto di una classe si usa l operatore new seguito dal nome della classe e da una coppia di parentesi tonde new BankAccount(); L operatore new crea un nuovo oggetto e ne restituisce un riferimento, assegnabile ad una variabile oggetto del tipo appropriato BankAccount account = new BankAccount(); account BankAccount 41 42

8 I costruttori Nella realizzazione della classe BankAccount bisogna includere il codice per creare un nuovo conto bancario, ad esempio con saldo iniziale a zero. Per consentire la creazione di un nuovo oggetto di una classe, inizializzandone lo stato, dobbiamo scrivere un nuovo metodo, il costruttore della classe public BankAccount() { //corpo del costruttore I costruttori hanno sempre lo stesso nome della classe 43 I costruttori Sintassi: tipoaccesso NomeClasse(TipoParametro nomeparametro,) { //realizzazione del costruttore Lo scopo principale di un costruttore è quello di inizializzare un oggetto della classe I costruttori, come i metodi, sono solitamente pubblici, per consentire a chiunque di creare oggetti della classe La sintassi utilizzata per definire i costruttori è molto simile a quella dei metodi, ma il nome dei costruttori è sempre uguale a quello della classe i costruttori non restituiscono alcun valore e non bisogna neppure dichiarare che restituiscono void 44 Invocazione di costruttori I costruttori si invocano soltanto con l operatore new new BankAccount(); L operatore new riserva la memoria per l oggetto, mentre il costruttore definisce il suo stato iniziale Il valore restituito dall operatore new è il riferimento all oggetto appena creato e inizializzato quasi sempre il valore dell operatore new viene memorizzato in una variabile oggetto BankAccount account = new BankAccount(); // ora account ha saldo zero Una classe con più costruttori Una classe può avere più di un costruttore Ad esempio, definiamo un costruttore per creare un nuovo conto bancario con un saldo iniziale diverso da zero public BankAccount() { // corpo del costruttore // inizializza il saldo a 0 public BankAccount(double initialbalance) { // corpo del costruttore // inizializza il saldo a initialbalance Una classe con più costruttori Per usare il nuovo costruttore di BankAccount, bisogna fornire il parametro initialbalance BankAccount account = new BankAccount(500); Notiamo che, se esistono più costruttori in una classe, hanno tutti lo stesso nome, perché devono comunque avere lo stesso nome della classe questo fenomeno (più metodi o costruttori con lo stesso nome) è detto sovraccarico del nome (overloading) il compilatore decide quale costruttore invocare basandosi sul numero e sul tipo dei parametri forniti nell invocazione Una classe con più costruttori Il compilatore effettua la risoluzione dell ambiguità nell invocazione di costruttori o metodi sovraccarichi Se non trova un costruttore che corrisponda ai parametri forniti nell invocazione, segnala un errore semantico // NON FUNZIONA! BankAccount a = new BankAccount("tanti soldi"); cannot resolve symbol symbol : constructor BankAccount (java.lang.string) location : class BankAccount 47 48

9 Sovraccarico del nome Se si usa lo stesso nome per metodi diversi, il nome diventa sovraccarico (nel senso di carico di significati diversi ) questo accade spesso con i costruttori, dato che se una classe ha più di un costruttore, essi devono avere lo stesso nome accade più di rado con i metodi, ma c è un motivo ben preciso per farlo (ed è bene farlo in questi casi) usare lo stesso nome per metodi diversi (che richiedono parametri di tipo diverso) sta ad indicare che viene compiuta la stessa elaborazione su tipi di dati diversi Sovraccarico del nome La libreria standard di Java contiene numerosi esempi di metodi sovraccarichi public class PrintStream { public void println(int n) { public void println(double d) { Quando si invoca un metodo sovraccarico, il compilatore risolve l invocazione individuando quale sia il metodo richiesto sulla base dei parametri espliciti che vengono forniti Definizione di classe Sintassi: Definire una classe tipoaccesso class nomeclasse { costruttori (intestazione e corpo) metodi (intestazione e corpo) variabili (campi) di esemplare Le variabili di esemplare memorizzano lo stato di un oggetto La classe BankAccount deve avere un campo di esemplare che permetta di memorizzare il saldo di un oggetto di tipo BankAccount Definire la classe BankAccount public class BankAccount { //Costruttori public BankAccount() { corpo del costruttore public BankAccount(double initialbalance) { corpo del costruttore //Metodi public void deposit(double amount) { realizzazione del metodo public void withdraw(double amount) { realizzazione del metodo È tutto chiaro? 1.Come si può svuotare il conto bancario account usando i metodi dell interfaccia pubblica della classe? 2.Supponete di voler realizzare una più potente astrazione di conto bancario che tenga traccia anche di un numero di conto. Come va modificata l interfaccia pubblica? public double getbalance() { realizzazione del metodo //Campi di esemplare 53 54

10 Variabili di esemplare Lo stato di un oggetto Gli oggetti (quasi tutti ) hanno bisogno di memorizzare il proprio stato attuale, cioè l insieme dei valori che descrivono l oggetto e influenzano (anche se non necessariamente) il risultato dell invocazione dei metodi dell oggetto Gli oggetti della classe BankAccount hanno bisogno di memorizzare il valore del saldo del conto bancario che rappresentano Lo stato di un oggetto viene memorizzato mediante variabili di esemplare (o variabili di istanza, instance variables) Dichiarare variabili di esemplare Sintassi: public class NomeClasse { tipodiaccesso TipoVariabile nomevariabile; Scopo: definire una variabile nomevariabile di tipo TipoVariabile, una cui copia sia presente in ogni oggetto della classe NomeClasse Esempio: public class BankAccount { private double balance; Variabili di esemplare Ciascun oggetto ( esemplare ) della classe ha una propria copia delle variabili di esemplare account1 account2 BankAccount balance tra le quali non esiste nessuna relazione: possono essere modificate indipendentemente l una dall altra BankAccount balance 2000 Variabili di esemplare Così come i metodi sono di solito pubblici (public), le variabili di esemplare sono di solito private (private) Le variabili di esemplare private possono essere lette o modificate soltanto da metodi della classe a cui appartengono le variabili di esemplare private sono nascoste (hidden) al programmatore che utilizza la classe, e possono essere lette o modificate soltanto mediante l invocazione di metodi pubblici della classe questa caratteristica dei linguaggi di programmazione orientati agli oggetti si chiama incapsulamento o information hiding 59 Incapsulamento Poiché la variabile balance di BankAccount è private, non vi si può accedere da metodi che non siano della classe (errore semantico segnalato dal compilatore) /* codice interno ad un metodo che non appartiene a BankAccount */ double b = account.balance; // ERRORE balance has private access in BankAccount Si possono usare solo i metodi pubblici! double b = account.getbalance(); // OK 60

11 Incapsulamento L incapsulamento ha molti vantaggi, soltanto pochi dei quali potranno essere evidenziati in questo corso di base Il vantaggio fondamentale è quello di impedire l accesso incontrollato allo stato di un oggetto, impedendo così anche che l oggetto venga (accidentalmente o deliberatamente) posto in uno stato inconsistente Il progettista della classe BankAccount potrebbe definire (ragionevolmente) che soltanto un saldo non negativo rappresenti uno stato consistente per un conto bancario Incapsulamento Dato che il valore di balance può essere modificato soltanto invocando i metodi deposit o withdraw, il progettista può impedire che diventi negativo, magari segnalando una condizione d errore Se invece fosse possibile assegnare direttamente un valore a balance dall esterno, ogni sforzo del progettista di BankAccount sarebbe vano Si noti che, per lo stesso motivo e anche per realismo, non esiste un metodo setbalance, dato che il saldo di un conto bancario non può essere impostato ad un valore qualsiasi! È tutto chiaro? 1.Si supponga di modificare la classe BankAccount in modo che ogni conto bancario abbia anche un numero di conto. Come si modificano i campi di esemplare? 2.Quali sono i campi di esemplare della classe Rectangle? Realizzare costruttori e metodi I metodi di BankAccount La realizzazione dei costruttori e dei metodi di BankAccount è molto semplice lo stato dell oggetto (il saldo del conto) è memorizzato nella variabile di esemplare balance i costruttori devono inizializzare la variabile balance quando si deposita o si preleva una somma di denaro, il saldo del conto si incrementa o si decrementa della somma specificata il metodo getbalance restituisce il valore del saldo corrente memorizzato nella variabile balance Per semplicità, questa realizzazione non impedisce che un conto assuma saldo negativo I costruttori di BankAccount public class BankAccount { public BankAccount() { balance = 0; public BankAccount(double initialbalance) { balance = initialbalance; 65 66

12 Il costruttore predefinito Cosa succede se non definiamo un costruttore per una classe? il compilatore genera un costruttore predefinito (senza alcuna segnalazione d errore) Il costruttore predefinito di una classe è pubblico e non richiede parametri inizializza tutte le variabili di esemplare a zero le variabili di tipo numerico a false le variabili di tipo boolean al valore speciale null le variabili oggetto, in modo che tali variabili non si riferiscano ad alcun oggetto I metodi di BankAccount public class BankAccount { public void deposit(double amount) { balance = balance + amount; public void withdraw(double amount) { balance = balance - amount; public double getbalance() { return balance; 67 private double balance; 68 L enunciato return Sintassi: return espressione; return; Scopo: terminare l esecuzione di un metodo, ritornando all esecuzione sospesa del metodo invocante se è presente una espressione, questa definisce il valore restituito dal metodo e deve essere del tipo dichiarato nella firma del metodo Al termine di un metodo con valore restituito di tipo void, viene eseguito un return implicito il compilatore segnala un errore se si termina senza un enunciato return un metodo con un diverso tipo di valore restituito La classe BankAccount completa public class BankAccount { public BankAccount() { balance = 0; public BankAccount(double initialbalance) { balance = initialbalance; public void deposit(double amount) { balance = balance + amount; public void withdraw(double amount) { balance = balance - amount; public double getbalance() { return balance; private double balance; È tutto chiaro? 1.Come è stato realizzato il metodo getwidth() della classe Rectangle? 2.Come è stato realizzato il metodo translate della classe Rectangle? Parametri espliciti/impliciti 71 72

13 I parametri dei metodi public void deposit(double amount) { balance = balance + amount; Cosa succede quando invochiamo il metodo? account.deposit(500); L esecuzione del metodo dipende da due valori il riferimento all oggetto account il valore 500 Quando viene eseguito il metodo, il suo parametro esplicito amount assume il valore 500 esplicito perché compare nella firma del metodo A quale variabile balance si riferisce il metodo? si riferisce alla variabile che appartiene all oggetto account con cui viene invocato il metodo account è il parametro implicito del metodo 73 Il riferimento null 74 Il riferimento null Il riferimento null Una variabile di un tipo numerico fondamentale contiene sempre un valore valido (eventualmente casuale, se non è stata inizializzata in alcun modo) Una variabile oggetto può invece contenere esplicitamente un riferimento a nessun oggetto valido assegnando alla variabile il valore null, che è una parola chiave del linguaggio BankAccount account = null; vedremo in seguito applicazioni utili di questa proprietà in questo caso la variabile è comunque inizializzata Diversamente dai valori numerici, che in Java non sono oggetti, le stringhe sono oggetti una variabile oggetto di tipo String può, quindi, contenere un riferimento null String greeting = "Hello"; String emptystring = ""; // stringa vuota String nullstring = null; // riferimento null int x1 = greeting.length(); // vale 5 int x2 = emptystring.length(); // vale 0 // nel caso seguente l esecuzione del programma // termina con un errore int x3 = nullstring.length(); // errore Usare un riferimento null Una variabile oggetto che contiene un riferimento null non si riferisce ad alcun oggetto non può essere usata per invocare metodi Se viene usata per invocare metodi, l interprete termina l esecuzione del programma, segnalando un eccezione di tipo NullPointerException (pointer è un sinonimo di reference, riferimento ) Collaudare una classe 77 78

14 Usare la classe BankAccount Senza sapere come sia stata realizzata la classe BankAccount, siamo in grado di utilizzarla in un programma apriamo un nuovo conto bancario e depositiamo un po di denaro double initialdeposit = 1000; BankAccount account = new BankAccount(); System.out.println("Saldo: " + account.getbalance()); account.deposit(initialdeposit); System.out.println("Saldo: " + account.getbalance()); Usare la classe BankAccount Trasferiamo denaro da un conto ad un altro double amount = 500; account1.withdraw(amount); account2.deposit(amount); Calcoliamo e accreditiamo gli interessi di un conto double rate = 0.05; // interessi del 5% double amount = account.getbalance() * rate; account.deposit(amount); Saldo: 0 Saldo: Classi di collaudo Usiamo la classe BankAccount per risolvere un problema specifico apriamo un conto bancario, saldo iniziale euro sul conto viene accreditato un interesse annuo del 5% del valore del saldo, senza fare prelievi né depositi qual è il saldo del conto dopo due anni? BankAccount non contiene un metodo main Compilando BankAccount.java si ottiene BankAccount.class Ma non possiamo eseguire BankAccount.class Dobbiamo scrivere una classe di collaudo (o di test) che contenga un metodo main nel quale Costruiamo uno o più oggetti della classe da collaudare Invochiamo i metodi della classe per questi oggetti Visualizziamo i valori restituiti Esempio: utilizzo di BankAccount public class BankAccountTester { public static void main(string[] args) { BankAccount acct = new BankAccount(10000); final double RATE = 5; // calcola gli interessi dopo il primo anno double interest = acct.getbalance() * RATE / 100; // somma gli interessi dopo il primo anno acct.deposit(interest); System.out.println("Saldo dopo un anno: " + acct.getbalance() + " euro"); // calcola gli interessi dopo il secondo anno interest = acct.getbalance() * RATE / 100; // somma gli interessi dopo il secondo anno acct.deposit(interest); System.out.println("Saldo dopo due anni: " + acct.getbalance() + " euro"); È tutto chiaro? 1.Quando eseguo BankAccountTester, quanti oggetti di tipo BankAccount vengono costruiti? E quanti di tipo BankAccountTester? 83 Un programma con più classi Per scrivere semplici programmi con più classi, si possono usare due strategie (equivalenti) Scrivere ciascuna classe in un file diverso, ciascuno avente il nome della classe con estensione.java Tutti i file vanno tenuti nella stessa cartella Tutti i file vanno compilati separatamente Solo la classe di collaudo (contenente il metodo main) va eseguita Nel compito Scrivere tutte le classi in un unico file faremo così!! un file.java può contenere una sola classe public la classe contenente il metodo main deve essere public le altre non devono essere public (non serve scrivere private, semplicemente non si indica l attributo public) il file.java deve avere il nome della classe public 84

15 Riassunto: progettare una classe 1. Capire cosa deve fare un oggetto della classe Elenco in linguaggio naturale delle operazioni possibili 2. Specificare l'interfaccia pubblica Ovvero, definire i metodi tramite le loro intestazioni 3. Documentare l'interfaccia pubblica 4. Identificare i campi di esemplare a partire dalle intestazioni dei metodi 5. Realizzare costruttori e metodi Se avete problemi a realizzare un metodo forse dovete riesaminare i passi precedenti 6. Collaudare la classe con un programma di collaudo Materiale di complemento (capitolo 3) Categorie e cicli di vita delle variabili Parametri impliciti e il riferimento this Per ora saltiamo questa sezione (3.7) Ne parliamo più avanti (capitolo 9) Per ora saltiamo questa sezione (3.8) Ne parliamo più avanti (capitolo 9) Commenti di documentazione 89 Commentare l'interfaccia pubblica I commenti ai metodi sono importantissimi per rendere il codice comprensibile a voi ed agli altri! Java ha delimitatori speciali per commenti di documentazione /** Preleva denaro dal amount importo da prelevare */ public void withdraw(double amount) { //corpo del metodo /** Ispeziona saldo saldo attuale */ public double getbalance() { //corpo del nomeparametro per descrivere un parametro per descrivere il valore restituito dal metodo 90

16 Commentare l'interfaccia pubblica Inserire brevi commenti anche alla classe, per illustrarne lo scopo /** Un conto bancario ha un saldo modificabile tramite depositi e prelievi */ public class BankAccount { Usando commenti di documentazione in questo formato si può generare in maniera automatica documentazione in html javadoc NomeClasse.java Genera un documento NomeClasse.html ben formattato e con collegamenti ipertestuali, contenente i commenti a NomeClasse L enunciato if Decisioni (capitolo 5) Il programma precedente consente di prelevare tutto il denaro che si vuole il saldo balance può diventare negativo balance = balance - amount; È una situazione assai poco realistica! Il programma deve controllare il saldo ed agire di conseguenza, consentendo il prelievo oppure no L enunciato if if (amount <= balance) balance = balance - amount; L enunciato if si usa per realizzare una decisione ed è diviso in due parti una verifica un corpo Il corpo viene eseguito se e solo se la verifica ha successo Tipi di enunciato in Java Enunciato semplice balance = balance - amount; Enunciato composto if (x >= 0) x=0; Blocco di enunciati { zero o più enunciati di qualsiasi tipo 95 96

17 Un nuovo problema Proviamo ora ad emettere un messaggio d errore in caso di prelievo non consentito if (amount <= balance) balance = balance - amount; if (amount > balance) System.out.println("Conto scoperto"); Problema: se si modifica la prima verifica, bisogna ricordarsi di modificare anche la seconda (es. viene concesso un fido sul conto, che può andare in rosso ) Problema: se il corpo del primo if viene eseguito, la verifica del secondo if usa il nuovo valore di balance, introducendo un errore logico quando si preleva più della metà del saldo disponibile La clausola Per realizzare un alternativa, si utilizza la clausola dell enunciato if if (amount <= balance) balance = balance - amount; System.out.println("Conto scoperto"); Vantaggio: ora c è una sola verifica se la verifica ha successo, viene eseguito il primo corpo dell enunciato if/ altrimenti, viene eseguito il secondo corpo La clausola if (amount <= balance) balance = balance - amount; { System.out.println("Conto scoperto"); balance = balance OVERDRAFT_PENALTY; 99 L enunciato if Sintassi: if (condizione) enunciato1 if (condizione) enunciato1 enunciato2 Scopo: eseguire enunciato1 se e solo se la condizione è vera; se è presente la clausola, eseguire enunciato2 se e solo se la condizione è falsa Spesso il corpo di un enunciato if è costituito da più enunciati da eseguire in sequenza; racchiudendo tali enunciati tra una coppia di parentesi graffe { si crea un blocco di enunciati, che può essere usato come corpo if (amount <= balance) { balance = balance - amount; System.out.println("Prelievo accordato"); 100 È tutto chiaro? 1.Perché nell esempio precedente abbiamo usato la condizione amount <= balance e non la condizione amount < balance? 2.Qual è l errore logico nell enunciato seguente, e come lo si può correggere? if (amount <= balance) newbalance = balance amount; balance = newbalance; Confrontare valori numerici

18 Confrontare valori Le condizioni dell enunciato if sono molto spesso dei confronti tra due valori if (x >= 0) Gli operatori di confronto si chiamano operatori relazionali > Maggiore Attenzione: >= Maggiore o uguale negli operatori costituiti < Minore da due caratteri non <= Minore o uguale vanno inseriti spazi intermedi == Uguale!= Diverso 103 Operatori relazionali Fare molta attenzione alla differenza tra l operatore relazionale == e l operatore di assegnazione = a = 5; // assegna 5 ad a if (a == 5) // esegue enunciato enunciato // se a è uguale a Confrontare numeri in virgola mobile Confronto di numeri in virgola mobile I numeri in virgola mobile hanno una precisione limitata ed i calcoli possono introdurre errori di arrotondamento e troncamento Tali errori sono inevitabili e bisogna fare molta attenzione nella formulazione di verifiche che coinvolgono numeri in virgola mobile double r = Math.sqrt(2); double x = r * r; if (x == 2) System.out.println("OK"); System.out.println("Non ci credevi?"); Confrontare numeri in virgola mobile Affinché gli errori di arrotondamento non influenzino la logica del programma, i confronti tra numeri in virgola mobile devono prevedere una tolleranza Verifica di uguaglianza tra x ed y (di tipo double): x y < ε con ε = 1E 14 Scelta migliore se x,y sono molto grandi o molto piccoli x y < ε max( x, y ) con ε = 1E 14 (questo valore di ε è ragionevole per numeri double) Il codice per questa verifica è final double EPSILON = 1E-14; if ( Math.abs(x - y) <= EPSILON*Math.max(Math.abs(x),Math.abs(y)) ) 107 Confrontare numeri in virgola mobile Possiamo definire un metodo statico che verifichi l uguaglianza con tolleranza public class Numeric { public static boolean approxequal(double x, double y) { final double EPSILON = 1E-14; double xymax = Math.max(Math.abs(x),Math.abs(y)); return Math.abs(x - y) <= EPSILON * xymax; double r = Math.sqrt(2); if (Numeric.approxEqual(r * r, 2)) System.out.println("Tutto bene"); System.out.println("Questo non succede"); 108

19 Confronto di stringhe 109 Confronto di stringhe Per confrontare stringhe si usa il metodo equals if (s1.equals(s2)) Per confrontare stringhe ignorando la differenza tra maiuscole e minuscole si usa if (s1.equalsignorecase(s2)) Non usare mai l operatore di uguaglianza per confrontare stringhe! Usare sempre equals Se si usa l operatore uguaglianza, il successo del confronto sembra essere deciso in maniera casuale In realtà dipende da come è stata progettata la Java Virtual Machine e da come sono state costruite le due stringhe Attenzione perché NON è un errore di sintassi 110 Confronto di stringhe Confrontando con l operatore di uguaglianza due riferimenti a stringhe si verifica se i riferimenti puntano allo stesso oggetto stringa String s1 = "Stringa"; String s2 = s1; String s3 = "String"; s3 = s3 + "a"; // s3 contiene "Stringa" Il confronto s1 == s2 è vero, perché puntano allo stesso oggetto stringa Il confronto s1 == s3 è falso, perché puntano ad oggetti diversi, anche se tali oggetti hanno lo stesso contenuto (sono identici ) Confronto di stringhe s1 s2 s3 String s1 = "Stringa"; String s2 = s1; String s3 = "String"; s3 = s3 + "a"; String Stringa String Stringa Confronto di stringhe Confrontando invece con il metodo equals due riferimenti, si verifica se i riferimenti puntano ad stringhe con lo stesso contenuto String s1 = "Stringa"; String s2 = s1; String s3 = "String"; s3 = s3 + "a"; // s3 contiene "Stringa" Il confronto s1.equals(s3) è vero, perché puntano a due oggetti String identici Nota: per verificare se un riferimento si riferisce a null, bisogna usare invece l operatore di uguaglianza e non il metodo equals if (s == null) 113 Ordinamento lessicografico Se due stringhe sono diverse, è possibile conoscere la relazione che intercorre tra loro secondo l ordinamento lessicografico, simile al comune ordinamento alfabetico Il confronto lessicografico tra stringhe si esegue con il metodo compareto if (s1.compareto(s2) < 0) Il metodo compareto restituisce un valore int negativo se s1 precede s2 nell ordinamento positivo se s1 segue s2 nell ordinamento zero se s1 e s2 sono identiche 114

20 Confronto lessicografico Partendo dall inizio delle stringhe, si confrontano i caratteri in posizioni corrispondenti, finché una delle stringhe termina oppure due caratteri sono diversi se una stringa termina, essa precede l altra se terminano entrambe, sono uguali altrimenti, l ordinamento tra le due stringhe è uguale all ordinamento alfabetico tra i due caratteri diversi c a c a r s t t a a n o Confronto lessicografico Il confronto lessicografico genera un ordinamento simile a quello di un comune dizionario con qualche differenza Tra i caratteri non ci sono solo le lettere i numeri precedono le lettere tutte le lettere maiuscole precedono tutte le lettere minuscole il carattere di spazio bianco precede tutti gli altri caratteri L ordinamento lessicografico è definito dallo standard Unicode, lettere uguali r precede s carta precede castano Confrontare oggetti 117 Confronto di oggetti Come per le stringhe, l operatore == tra due variabili oggetto verifica se i due riferimenti puntano allo stesso oggetto, e non verifica l'uguaglianza tra oggetti Il metodo equals può essere applicato a qualsiasi oggetto, perché è definito nella classe Object, da cui derivano tutte le classi È compito di ciascuna classe ridefinire il metodo equals, come fa la classe String altrimenti il metodo equals di Object usa semplicemente l operatore di uguaglianza Il metodo equals di ciascuna classe deve effettuare il confronto delle caratteristiche (variabili di esemplare) degli oggetti di tale classe Per ora usiamo equals solo per classi della libreria standard non facciamo confronti tra oggetti di classi definite da noi 118 Ordinamento di oggetti Il metodo compareto visto per le stringhe può essere applicato a molti altri oggetti, (ma non tutti perché non è definito nella classe Object) È compito di ciascuna classe definire in maniera opportuna il metodo compareto, come fa la classe String, secondo una opportuna nozione di ordinamento Il metodo compareto di una classe restituirà sempre un valore int negativo se obj1 precede obj2 nell ordinamento positivo se obj1 segue obj2 nell ordinamento zero se obj1 e obj2 sono identici if (obj1.compareto(obj2) < 0) 119 È tutto chiaro? 1. Qual è il valore di s.length() se s contiene (a) un riferimento alla stringa vuota (b) un riferimento alla stringa contenente solo uno spazio (c) il valore null? 2. Quali di questi confronti hanno errori di sintassi? Quali hanno poca utilità dal punto di vista logico? String a = 1 ; String b = one ; double x = 1; double y = 3 * (1.0 / 3); (a) a == 1 ; (b) a == null; (c) a.equals( ); (d) a == b; (e) a == x; (f) x == y; (g) x y == null; (h) x.equals(y); 120

21 Sequenza di confronti Se si hanno più di due alternative, si usa una sequenza di confronti Alternative multiple if (richter >= 8) System.out.println("Terremoto molto forte"); if (richter >= 6) System.out.println("Terremoto forte"); if (richter >= 4) System.out.println("Terremoto medio"); if (richter >= 2) System.out.println("Terremoto debole"); if (richter >= 0) System.out.println("Terremoto molto debole"); System.out.println( Numeri negativi non validi"); Sequenza di confronti Il codice seguente non funziona, perché stampa Terremoto molto debole per qualsiasi valore di richter Se si fanno confronti di tipo maggiore di si devono scrivere prima i valori più alti, e viceversa if (richter >= 0) // NON FUNZIONA! System.out.println("Terremoto molto debole"); if (richter >= 2) System.out.println("Terremoto debole"); if (richter >= 4) System.out.println("Terremoto medio"); if (richter >= 6) System.out.println("Terremoto forte"); System.out.println("Terremoto molto forte"); 123 Sequenza di confronti Se non si rendono mutuamente esclusive le alternative, usando le clausole, non funziona se richter vale 3, stampa sia Terremoto debole sia Terremoto molto debole if (richter >= 8) // NON FUNZIONA! System.out.println("Terremoto molto forte"); if (richter >= 6) System.out.println("Terremoto forte"); if (richter >= 4) System.out.println("Terremoto medio"); if (richter >= 2) System.out.println("Terremoto debole"); if (richter >= 0) System.out.println("Terremoto molto debole"); 124 Diramazioni annidate Diramazioni annidate Aliquote per categorie d imposta federali (1992) Per semplicità usiamo il sistema fiscale americano e non quello italiano Ci sono due livelli nel processo decisionale Prima dobbiamo scegliere lo stato civile Poi, per ciascuno stato civile, dobbiamo scegliere lo scaglione di reddito

22 Diramazioni annidate Usiamo due diramazioni annidate un enunciato if all interno del corpo di un altro enunciato if if (status == SINGLE) { if (income <= SINGLE_BRACKET1) if (income <= SINGLE_BRACKET2) { if (income <= MARRIED_BRACKET1) if (income <= MARRIED_BRACKET2) 127 Diramazioni annidate 128 È tutto chiaro? 1.L enunciato if// per la scala Richter verifica prima i valori più elevati. Si può invertire l ordine delle verifiche? 2.Alcuni contestano l applicazione di aliquote più elevate ai redditi più elevati perché dopo aver pagato le tasse si potrebbe rimanere con meno soldi pur avendo guadagnato di più. Dove è l errore in questo ragionamento? Il problema dell sospeso Il problema dell sospeso Nell esempio seguente i livelli di rientro suggeriscono che la clausola si riferisca al primo enunciato if ma il compilatore ignora i rientri! La regola sintattica è che una clausola appartiene sempre all enunciato if più vicino double cost = 5; // prezzo per USA if (country.equals("usa")) if (state.equals("hi")) cost = 10; // Hawaii più costoso // NON FUNZIONA! cost = 20; // estero ancora più costoso Il problema dell sospeso L esempio precedente svolge in realtà la funzione evidenziata dai rientri seguenti double cost = 5; // prezzo per estero if (country.equals("usa")) if (state.equals("hi")) cost = 10; // Hawaii più costoso cost = 20; // USA ancora più costoso Il risultato è che gli stati esteri ottengono il prezzo più basso, e gli USA continentali il più alto! Il contrario di ciò che si voleva

23 Il problema dell sospeso Per ottenere il risultato voluto, bisogna nascondere il secondo enunciato if all interno di un blocco di enunciati, inserendo una coppia di parentesi graffe per evitare problemi con l sospeso, è meglio racchiudere sempre il corpo di un enunciato if tra parentesi graffe, anche quando sono inutili Espressioni booleane double cost = 5; // prezzo per USA if (country.equals("usa")) { if (state.equals("hi")) cost = 10; // Hawaii più costoso cost = 20; // estero ancora più costoso Il tipo di dati booleano Ogni espressione in Java ha un valore x + 10 espressione aritmetica, valore numerico x < 10 espressione relazionale, valore booleano Un espressione relazionale può avere solo due valori: vero o falso (true o false) I valori true e false non sono numeri, né oggetti, né classi: appartengono ad un tipo di dati diverso, detto booleano è un tipo fondamentale in Java, come quelli numerici Il nome deriva da quello del matematico George Boole ( ), pioniere della logica Le variabili booleane Il tipo di dati boolean, come tutti gli altri tipi di dati, consente la definizione di variabili A volte è comodo utilizzare variabili booleane per memorizzare valori di passaggi intermedi in cui è opportuno scomporre verifiche troppo complesse Altre volte l uso di una variabile booleana rende più leggibile il codice Spesso le variabili booleane vengono chiamate flags (bandiere), perché possono assumere soltanto due valori, cioè trovarsi in due soli stati possibili: su e giù, come una bandiera Metodi predicativi Così vengono chiamati metodi che restituiscono valori di tipo booleano Solitamente verificano una condizione sullo stato di un oggetto Solitamente iniziano con is oppure has La classe Character contiene metodi predicativi statici isdigit, isletter, isuppercase, islowercase La classe Scanner contiene metodi predicativi per verificare il contenuto dell input: hasnextint, hasnextdouble, Metodi predicativi possono essere usati come condizioni di enunciati if if (Character.isUpperCase(ch)) // esegue se il carattere ch è maiuscolo 137 Operatori booleani 138

24 Gli operatori booleani o logici Gli operatori booleani o logici servono a svolgere operazioni su valori booleani if (x > 10 && x < 20) // esegue se x è maggiore di 10 e minore di 20 L operatore && (and, e) combina due o più condizioni in una sola, che risulta vera se e solo se sono tutte vere L operatore (or, oppure) combina due o più condizioni in una sola, che risulta vera se e solo se almeno una è vera L operatore! (not, non) inverte il valore di un espressione booleana Gli operatori booleani o logici Più operatori booleani possono essere usati in un unica espressione if ((x > 10 && x < 20) x > 30) La valutazione di un espressione con operatori booleani viene effettuata con una strategia detta cortocircuito (o valutazione pigra) la valutazione dell espressione termina appena è possibile decidere il risultato nel caso precedente, se x vale 15, l ultima condizione non viene valutata, perché sicuramente l intera espressione è vera Gli operatori booleani o logici A B A && B true true true true false false false qualsiasi false A B A B true qualsiasi true false true true false false false A!A true false Gli operatori booleani o logici In un espressione booleana con più operatori, la valutazione viene fatta da sinistra a destra, dando la precedenza all operatore not, poi all operatore and, infine all operatore or L ordine di valutazione può comunque essere alterato dalle parentesi tonde if (!(x < 0 x > 10)) // esegue se x è compreso tra 0 e 10, // estremi inclusi if (!x < 0 x > 10) // esegue se x è maggiore o uguale a 0 false true È tutto chiaro? 1.In quali condizioni il seguente enunciato visualizza false? System.out.println(x > 0 x < 0); 2.Riscrivere l espressione seguente evitando di effettuare il confronto con il valore false if (Character.isDigit(ch) == false) Leggi di De Morgan Stabiliscono un criterio per convertire un espressione negata in una espressione affermata Gli operatori not vengono spostati su ciascuna delle espressioni coinvolte Gli operatori and e gli operatori or vengono scambiati 143 Queste due espressioni sono equivalenti (abbiamo usato la seconda legge di De Morgan) if (!(x < 0 x > 10)) if ( x >0 && x <= 10 ) 144

25 Materiale di complemento (Capitolo 6) L enunciato switch L enunciato switch Una sequenza che confronti un unica variabile intera con diverse alternative costanti può essere realizzata con un enunciato switch int x; int y; if (x == 1) y = 1; if (x == 2) y = 4; if (x == 4) y = 16; y = 0; int x; int y; switch (x) { case 1: y = 1; break; case 2: y = 4; break; case 4: y = 16; break; default: y = 0; break; L enunciato switch Vantaggio: non bisogna ripetere il nome della variabile da confrontare Svantaggio: non si può usare se la variabile da confrontare non è intera Svantaggio: non si può usare se uno dei valori da confrontare non è costante Svantaggio: ogni case deve terminare con un enunciato break, altrimenti viene eseguito anche il corpo del case successivo! Questo è fonte di molti errori Consigli utili

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.

Dettagli

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 3 - Variabili Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di

Dettagli

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015 Java:Struttura di Programma Fabio Scanu a.s. 2014/2015 Altre Attenzioni da riservare Java è Case Sensitive: La variabile «a» e la variabile «A» sono diverse Java ha alcune regole di scrittura: I nomi delle

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

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

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

Esercizio 6 Realizzare una classe astratta per le Figure piane e due sottoclassi, la sottoclasse Quadrato e la sottoclasse Rettangolo.

Esercizio 6 Realizzare una classe astratta per le Figure piane e due sottoclassi, la sottoclasse Quadrato e la sottoclasse Rettangolo. Esercizio 6 Realizzare una classe astratta per le Figure piane e due sottoclassi, la sottoclasse Quadrato e la sottoclasse Rettangolo. public abstract class FiguraPiana2{ private double base; public FiguraPiana2(double

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

Introduzione a Classi e Oggetti

Introduzione a Classi e Oggetti Introduzione a Classi e Oggetti Oggetto: concetto astratto Entità di un programma dotata di tre proprietà caratteristiche stato informazioni conservate nell oggetto condizionano il comportamento dell oggetto

Dettagli

Java: Compilatore e Interprete

Java: Compilatore e Interprete Java: Compilatore e Interprete Java Virtual Machine Il bytecode non è Linguaggio Macchina. Per diventarlo, deve subire un ulteriore trasformazione che viene operata dall interprete Java in modalità JIT

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

Variabili e tipi di dato

Variabili e tipi di dato Variabili e tipi di dato Tutte le variabili devono essere dichiarate, specificandone il tipo La dichiarazione deve precedere l uso Il tipo è un concetto astratto che esprime: L allocazione di spazio per

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

Dettagli

Parola chiave extends

Parola chiave extends Il Linguaggio Java Ereditarietà Ereditarietà L'ereditarietà permette di creare nuove classi sulla base di classi esistenti In particolare, permette di riusare il codice (metodi e campi); aggiungere nuovi

Dettagli

Convertitori numerici in Excel

Convertitori numerici in Excel ISTITUTO DI ISTRUZIONE SUPERIORE G. M. ANGIOY CARBONIA Convertitori numerici in Excel Prof. G. Ciaschetti Come attività di laboratorio, vogliamo realizzare dei convertitori numerici con Microsoft Excel

Dettagli

http://www.programmiamo.altervista.org/c/oop/o...

http://www.programmiamo.altervista.org/c/oop/o... PROGRAMMIAMO Programma per la gestione di un conto corrente C++ - Costruttore e distruttore C++ Home Contatti Supponiamo ora di voler scrivere un programma a menu per la gestione di un conto corrente bancario.

Dettagli

10 - Programmare con gli Array

10 - Programmare con gli Array 10 - Programmare con gli Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

Uso di base delle funzioni in Microsoft Excel

Uso di base delle funzioni in Microsoft Excel Uso di base delle funzioni in Microsoft Excel Le funzioni Una funzione è un operatore che applicato a uno o più argomenti (valori, siano essi numeri con virgola, numeri interi, stringhe di caratteri) restituisce

Dettagli

Inizializzazione, Assegnamento e Distruzione di Classi

Inizializzazione, Assegnamento e Distruzione di Classi Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della

Dettagli

LINGUAGGI DI PROGRAMMAZIONE

LINGUAGGI DI PROGRAMMAZIONE LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E01 Esempi di programmi A. Miola Ottobre 2011 1 Contenuti Vediamo in questa lezione alcuni primi semplici esempi di applicazioni

Dettagli

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

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012 Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono

Dettagli

Strutturazione logica dei dati: i file

Strutturazione logica dei dati: i file Strutturazione logica dei dati: i file Informazioni più complesse possono essere composte a partire da informazioni elementari Esempio di una banca: supponiamo di voler mantenere all'interno di un computer

Dettagli

Struttura di un programma Java

Struttura di un programma Java Struttura di un programma Java Un programma in Java è un insieme di dichiarazioni di classi. Una classe non può contenere direttamente delle istruzioni, ma può contenere la dichiarazione di metodi, che

Dettagli

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo. DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti

Dettagli

Modulo 2: Strutture fondamentali della programmazione Java

Modulo 2: Strutture fondamentali della programmazione Java Modulo 2: Strutture fondamentali della programmazione Java Argomenti Trattati: Input e Output da Console Leggere valori in input (Scanner); Stampare valori di output (System.out.print); Modulo 2: Strutture

Dettagli

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down

Dettagli

Esercizio: la classe CashRegister

Esercizio: la classe CashRegister Esercizio: la classe CashRegister Si veda anche il libro di testo: Consigli pratici 3.1 Sezione 4.2 Sezione 8.2 Esercizi 8.1 e 8.2 1 Problema Si chiede di realizzare una classe CashRegister che simuli

Dettagli

Codifica: dal diagramma a blocchi al linguaggio C++

Codifica: dal diagramma a blocchi al linguaggio C++ Codifica: dal diagramma a blocchi al linguaggio C++ E necessario chiarire inizialmente alcuni concetti. La compilazione Il dispositivo del computer addetto all esecuzione dei programmi è la CPU La CPU

Dettagli

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse Prova Finale a.a. 2011/2012 Laboratorio 1: Introduzione a Java e Eclipse 1 Java 6 Standard Edition Linguaggio Java (... (javac, Tool di sviluppo Librerie per l'interfaccia grafica Librerie di base Macchina

Dettagli

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Lezione 3. aspetti generali e definizione di classi I Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione

Dettagli

Un oggetto per la lettura dalla tastiera

Un oggetto per la lettura dalla tastiera Fondamenti di informatica Oggetti e Java ottobre 2012 1 Un oggetto per la lettura dalla tastiera Le API di Java hanno un oggetto System.in che rappresenta la tastiera del calcolatore, ma che non è semplice

Dettagli

Le variabili. Olga Scotti

Le variabili. Olga Scotti Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.

Dettagli

Livelli di astrazione

Livelli di astrazione Realizzare Classi Astrazione Perdita di dettaglio Utile nella descrizione, progettazione, implementazione e utilizzo di sistemi complessi Dettagli trascurabili vengono incapsulati in sottosistemi più semplici

Dettagli

La selezione binaria

La selezione binaria Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Introduzione L esecuzione di tutte le istruzioni in sequenza può non è sufficiente per

Dettagli

Alessandro Pellegrini

Alessandro Pellegrini Esercitazione sulle Rappresentazioni Numeriche Esistono 1 tipi di persone al mondo: quelli che conoscono il codice binario e quelli che non lo conoscono Alessandro Pellegrini Cosa studiare prima Conversione

Dettagli

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti Nascita di Java L uscita di Java, verso la metà degli anni novanta, fu accolta con molto entusiasmo dalla comunità dei programmatori e dei provider di servizi internet perché permetteva agli utenti del

Dettagli

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete La prima applicazione Java Programma MyFirstApplication Il programma visualizza una finestra vuota sullo schermo. Importo il package delle classi usate nel seguito. Dichiaro la classe MyFirstApplication

Dettagli

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Dall Algoritmo al Programma Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni IL PROGRAMMA Gli algoritmi sono modelli di descrizione astratti e per controllarne il funzionamento devono essere

Dettagli

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware COS È UN LINGUAGGIO? Un linguaggio è un insieme di parole e di metodi di combinazione delle

Dettagli

Richiesta pagina PHP (es: index.php)

Richiesta pagina PHP (es: index.php) PHP PHP = personal home page SERVER Richiesta pagina PHP (es: index.php) Server Web (Apache) in ascolto sulla porta 80, si accorge che la pagina richiesta è una pagina PHP in base all'estensione o con

Dettagli

Programmare in Java. Olga Scotti

Programmare in Java. Olga Scotti Programmare in Java Olga Scotti Linguaggi di programmazione linguaggio macchina assembler linguaggi ad alto livello Linguaggi ad alto livello istruzioni comprensibili linguaggio simile a quello naturale

Dettagli

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it Excel A cura di Luigi Labonia e-mail: luigi.lab@libero.it Introduzione Un foglio elettronico è un applicazione comunemente usata per bilanci, previsioni ed altri compiti tipici del campo amministrativo

Dettagli

Esercizi su. Funzioni

Esercizi su. Funzioni Esercizi su Funzioni ๒ Varie Tracce extra Sul sito del corso ๓ Esercizi funz_max.cc funz_fattoriale.cc ๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità

Dettagli

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI Indice 1 Le frazioni algebriche 1.1 Il minimo comune multiplo e il Massimo Comun Divisore fra polinomi........ 1. Le frazioni algebriche....................................

Dettagli

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti 13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/

Dettagli

LABORATORIO DI MATEMATICA RENDITE, AMMORTAMENTI, LEASING CON EXCEL

LABORATORIO DI MATEMATICA RENDITE, AMMORTAMENTI, LEASING CON EXCEL LABORATORIO DI MATEMATICA RENDITE, AMMORTAMENTI, LEASING CON EXCEL ESERCITAZIONE GUIDATA: LE RENDITE 1. Il montante di una rendita immediata posticipata Utilizzando Excel, calcoliamo il montante di una

Dettagli

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso Obiettivi formativi Introdurre i principi del funzionamento di un elaboratore e della programmazione. Presentare gli approcci elementari alla soluzione di problemi (algoritmi)e al progetto di strutture

Dettagli

Modulo 4: Ereditarietà, interfacce e clonazione

Modulo 4: Ereditarietà, interfacce e clonazione Modulo 4: Ereditarietà, interfacce e clonazione Argomenti Trattati: Classi, Superclassi e Sottoclassi Ereditarietà Ereditarietà ed Attributi Privati Override super Ereditarietà e Costruttori Polimorfismo

Dettagli

Programmazione in Java (I modulo) Lezione 3: Prime nozioni

Programmazione in Java (I modulo) Lezione 3: Prime nozioni Programmazione in Java (I modulo) Lezione 3: Prime nozioni La volta scorsa Abbiamo avuto un primo assaggio! Abbiamo visto come usare l editor per scrivere un programma Java. Abbiamo analizzato riga per

Dettagli

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione Automatizzare i compiti ripetitivi I file batch Anno accademico 2000-01 1 Spesso capita di dover eseguire ripetutatmente una data sequenza di comandi Introdurli uno a uno da tastiera è un processo lento

Dettagli

Matematica in laboratorio

Matematica in laboratorio Unità 1 Attività guidate Attività 1 Foglio elettronico Divisibilità tra numeri naturali Costruisci un foglio di lavoro per determinare se a è divisibile per b, essendo a e b due numeri naturali, con a

Dettagli

ALGEBRA DELLE PROPOSIZIONI

ALGEBRA DELLE PROPOSIZIONI Università di Salerno Fondamenti di Informatica Corso di Laurea Ingegneria Corso B Docente: Ing. Giovanni Secondulfo Anno Accademico 2010-2011 ALGEBRA DELLE PROPOSIZIONI Fondamenti di Informatica Algebra

Dettagli

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione basata sul campo d utilizzo. I principali package sono:

Dettagli

Lezione 8. La macchina universale

Lezione 8. La macchina universale Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione

Dettagli

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI Prima di riuscire a scrivere un programma, abbiamo bisogno di conoscere un metodo risolutivo, cioè un metodo che a partire dai dati di ingresso fornisce i risultati attesi.

Dettagli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Elettrica, e Meccanica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011

Dettagli

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara LICEO SCIENTIFICO STATALE "FILIPPO LUSSANA" V i a A n g e l o Ma j, 1 2 4 1 2 1 B E R G A M O 035 237502 Fax: 035 236331 Sito e contatti: www.liceolussana.com Codice fiscale: 80026450165 PROGRAMMA SVOLTO

Dettagli

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti Capitolo 3 L applicazione Java Diagrammi ER Dopo le fasi di analisi, progettazione ed implementazione il software è stato compilato ed ora è pronto all uso; in questo capitolo mostreremo passo passo tutta

Dettagli

Le stringhe. Le stringhe

Le stringhe. Le stringhe Informatica: C++ Gerboni Roberta Stringhe di caratteri (esempi di utilizzo dei vettori) Nel linguaggio C++ una stringa è semplicemente un vettore di caratteri Vettori di caratteri La stringa "hello" è

Dettagli

Gestione ed analisi di base dati nell epidemiologia. delle malattie infettive

Gestione ed analisi di base dati nell epidemiologia. delle malattie infettive Università degli Studi di Torino - Facoltà di Medicina Veterinaria Laboratorio di epidemiologia delle malattie infettive Scuola Specializzazione in Sanità Animale, Allevamento e Produzioni Zootecniche

Dettagli

Esempi di algoritmi. Lezione III

Esempi di algoritmi. Lezione III Esempi di algoritmi Lezione III Scopo della lezione Implementare da zero algoritmi di media complessità. Verificare la correttezza di un algoritmo eseguendolo a mano. Imparare a valutare le prestazioni

Dettagli

WORD 97 SCRIVERE UNA TESI DI LAUREA

WORD 97 SCRIVERE UNA TESI DI LAUREA WORD 97 SCRIVERE UNA TESI DI LAUREA PASSO 1 Per prima cosa pensiamo al formato generale della pagina: i margini richiesti da una tesi sono quasi sempre più ampi di quelli di un testo normale. Apriamo ora

Dettagli

EXCEL FUNZIONI PRINCIPALI

EXCEL FUNZIONI PRINCIPALI EXCEL FUNZIONI PRINCIPALI Funzione SE() Sintassi: SE(VERIFICA, VALORE SE VERO, VALORE SE FALSO): verifica un valore e ritorna una risposta in base al risultato vero/falso Esempio: =SE(A2=15; "OK"; "NO")

Dettagli

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter Informatica B a.a 2005/06 (Meccanici 4 squadra) Scaglione: da PO a ZZZZ PhD. Ing. Michele Folgheraiter Architettura del Calcolatore Macchina di von Neumann Il calcolatore moderno è basato su un architettura

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

Dettagli

FORMULE: Operatori matematici

FORMULE: Operatori matematici Formule e funzioni FORMULE Le formule sono necessarie per eseguire calcoli utilizzando i valori presenti nelle celle di un foglio di lavoro. Una formula inizia col segno uguale (=). La formula deve essere

Dettagli

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database Microsoft Access Introduzione alle basi di dati Access E un programma di gestione di database (DBMS) Access offre: un supporto transazionale limitato Meccanismi di sicurezza, protezione di dati e gestione

Dettagli

Guida all uso di Java Diagrammi ER

Guida all uso di Java Diagrammi ER Guida all uso di Java Diagrammi ER Ver. 1.1 Alessandro Ballini 16/5/2004 Questa guida ha lo scopo di mostrare gli aspetti fondamentali dell utilizzo dell applicazione Java Diagrammi ER. Inizieremo con

Dettagli

Linguaggi e Paradigmi di Programmazione

Linguaggi e Paradigmi di Programmazione Linguaggi e Paradigmi di Programmazione Cos è un linguaggio Definizione 1 Un linguaggio è un insieme di parole e di metodi di combinazione delle parole usati e compresi da una comunità di persone. È una

Dettagli

LABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B

LABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B LABORATORIO DI PROGRAMMAZIONE 2012 2013 EDIZIONE 1, TURNO B 23.XI.2012 VINCENZO MARRA Indice Esercizio 1 1 Menu 1 Tempo: 35 min. 2 Commento 1 2 Esercizio 2 2 Ordinamento e ricerca binaria con la classe

Dettagli

4. Un ambiente di sviluppo per Java

4. Un ambiente di sviluppo per Java pag.15 4. Un ambiente di sviluppo per Java Esistono in commercio molti ambienti di sviluppo utilizzati dai programmatori Java, in particolare si tratta di editor complessi che mettono a disposizione tools

Dettagli

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto Università degli studi di Camerino Scuola di scienze e tecnologia - Sezione Informatica Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto LEZIONE

Dettagli

esercizi Esercizi / problemi

esercizi Esercizi / problemi Sistemi informativi applicati (reti di calcolatori): esercizi 1 Esercizi / problemi 1. Creare un applicazione che calcoli la media aritmetica dei seguenti valori interi: 35, 117, 23 e ne visualizzi il

Dettagli

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 10 Correttezza A. Miola Novembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Correttezza 1 Contenuti Introduzione alla correttezza

Dettagli

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; ESERCIZI 2 LABORATORIO Problema 1 Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; Chiede all'utente un numero e, tramite ricerca

Dettagli

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Algoritmi Algoritmi Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Il procedimento (chiamato algoritmo) è composto da passi elementari

Dettagli

Logica e codifica binaria dell informazione

Logica e codifica binaria dell informazione Politecnico di Milano Corsi di Laurea in Ingegneria Matematica e Ingegneria Fisica Dipartimento di Elettronica ed Informazione Logica e codifica binaria dell informazione Anno Accademico 2002 2003 L. Muttoni

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Laboratorio di Informatica Introduzione a Python Dottore Paolo Parisen Toldin - parisent@cs.unibo.it Argomenti trattati Che cosa è python Variabili Assegnazione Condizionale Iterazione in una lista di

Dettagli

Alcune regole di base per scrivere un programma in linguaggio C

Alcune regole di base per scrivere un programma in linguaggio C Alcune regole di base per scrivere un programma in linguaggio C Un programma il linguaggio C (listato) viene scritto in formato testo ed archiviato in un file: *.c Per scrivere un listato C si utilizza

Dettagli

www.filoweb.it STAMPA UNIONE DI WORD

www.filoweb.it STAMPA UNIONE DI WORD STAMPA UNIONE DI WORD Molte volte abbiamo bisogno di stampare più volte lo stesso documento cambiando solo alcuni dati. Potremmo farlo manualmente e perdere un sacco di tempo, oppure possiamo ricorrere

Dettagli

Nell esempio verrà mostrato come creare un semplice documento in Excel per calcolare in modo automatico la rata di un mutuo a tasso fisso conoscendo

Nell esempio verrà mostrato come creare un semplice documento in Excel per calcolare in modo automatico la rata di un mutuo a tasso fisso conoscendo Nell esempio verrà mostrato come creare un semplice documento in Excel per calcolare in modo automatico la rata di un mutuo a tasso fisso conoscendo - la durata del mutuo in anni - l importo del mutuo

Dettagli

Soluzione dell esercizio del 2 Febbraio 2004

Soluzione dell esercizio del 2 Febbraio 2004 Soluzione dell esercizio del 2 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. E evidenziato un sotto caso di uso. 2. Modello concettuale Osserviamo

Dettagli

Cosa è un foglio elettronico

Cosa è un foglio elettronico Cosa è un foglio elettronico Versione informatica del foglio contabile Strumento per l elaborazione di numeri (ma non solo...) I valori inseriti possono essere modificati, analizzati, elaborati, ripetuti

Dettagli

TRASMISSIONE RAPPORTO ARBITRALE IN FORMATO PDF

TRASMISSIONE RAPPORTO ARBITRALE IN FORMATO PDF TRASMISSIONE RAPPORTO ARBITRALE IN FORMATO PDF Come da disposizioni di inizio stagione, alcune Delegazioni provinciali hanno richiesto la trasmissione dei referti arbitrali solo tramite fax o tramite mail.

Dettagli

Breve riepilogo della puntata precedente:

Breve riepilogo della puntata precedente: Breve riepilogo della puntata precedente: 1. In C, il passaggio dei parametri alle funzioni avviene sempre per copia, ovvero il valore del parametro viene copiato all'interno della variabile che rappresenta

Dettagli

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c Caratteristiche MATLAB Linguaggio di programmazione orientato all elaborazione di matrici (MATLAB=MATrix LABoratory) Le variabili sono matrici (una variabile scalare equivale ad una matrice di dimensione

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

Appunti sulla Macchina di Turing. Macchina di Turing

Appunti sulla Macchina di Turing. Macchina di Turing Macchina di Turing Una macchina di Turing è costituita dai seguenti elementi (vedi fig. 1): a) una unità di memoria, detta memoria esterna, consistente in un nastro illimitato in entrambi i sensi e suddiviso

Dettagli

SISTEMI DI NUMERAZIONE E CODICI

SISTEMI DI NUMERAZIONE E CODICI SISTEMI DI NUMERAZIONE E CODICI Il Sistema di Numerazione Decimale Il sistema decimale o sistema di numerazione a base dieci usa dieci cifre, dette cifre decimali, da O a 9. Il sistema decimale è un sistema

Dettagli

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS CONTENUTI: CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS Creazione database vuoto Creazione tabella Inserimento dati A) Creazione di un database vuoto Avviamo il programma Microsoft Access. Dal menu

Dettagli

Interesse, sconto, ratei e risconti

Interesse, sconto, ratei e risconti TXT HTM PDF pdf P1 P2 P3 P4 293 Interesse, sconto, ratei e risconti Capitolo 129 129.1 Interesse semplice....................................................... 293 129.1.1 Esercizio per il calcolo dell

Dettagli

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini. Algoritmi di routing dinamici (pag.89) UdA2_L5 Nelle moderne reti si usano algoritmi dinamici, che si adattano automaticamente ai cambiamenti della rete. Questi algoritmi non sono eseguiti solo all'avvio

Dettagli

Capitolo 13: L offerta dell impresa e il surplus del produttore

Capitolo 13: L offerta dell impresa e il surplus del produttore Capitolo 13: L offerta dell impresa e il surplus del produttore 13.1: Introduzione L analisi dei due capitoli precedenti ha fornito tutti i concetti necessari per affrontare l argomento di questo capitolo:

Dettagli

Prova di Laboratorio di Programmazione

Prova di Laboratorio di Programmazione Prova di Laboratorio di Programmazione 6 febbraio 015 ATTENZIONE: Non è possibile usare le classi del package prog.io del libro di testo. Oltre ai metodi richiesti in ciascuna classe, è opportuno implementare

Dettagli

I sistemi di numerazione

I sistemi di numerazione I sistemi di numerazione 01-INFORMAZIONE E SUA RAPPRESENTAZIONE Sia dato un insieme finito di caratteri distinti, che chiameremo alfabeto. Utilizzando anche ripetutamente caratteri di un alfabeto, si possono

Dettagli