Rappresentazione delle informazioni



Похожие документы
4 3 4 = 4 x x x 10 0 aaa

Informatica. Rappresentazione dei numeri Numerazione binaria

Variabili e tipi di dato

Alessandro Pellegrini

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

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

Le variabili. Olga Scotti

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile

Informazione analogica e digitale

Introduzione alla programmazione in C

Rappresentazione dell informazione Codifica Binaria

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

Logica e codifica binaria dell informazione

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

Informatica Generale 02 - Rappresentazione numeri razionali

2. Codifica dell informazione

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

Rappresentazione di informazioni con un alfabeto finito

Alcune regole di base per scrivere un programma in linguaggio C

Obiettivi dell Analisi Numerica. Avviso. Risoluzione numerica di un modello. Analisi Numerica e Calcolo Scientifico

Rappresentazione delle informazioni

Sistemi di Numerazione Binaria NB.1

Funzioni in C. Violetta Lonati

Elementi di informatica

LE FUNZIONI A DUE VARIABILI

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

LINGUAGGI DI PROGRAMMAZIONE

Esempi ed esercizi Aritmetica degli elaboratori e algebra di commutazione

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

Operazioni Aritmetiche e Codici in Binario Giuseppe Talarico 23/01/2013

Lezione 2 OPERAZIONI ARITMETICHE E LOGICHE ARCHITETTURA DI UN ELABORATORE. Lez2 Informatica Sc. Giuridiche Op. aritmetiche/logiche arch.

SISTEMI DI NUMERAZIONE E CODICI

I sistemi di numerazione

SISTEMI DI NUMERAZIONE DECIMALE E BINARIO

Concetto di Funzione e Procedura METODI in Java

Appunti di informatica. Lezione 2 anno accademico Mario Verdicchio

Sistemi di Numerazione

Lezioni di Matematica 1 - I modulo

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

Elementi di Informatica. ( Lezione II, parte I ) Sistemi di numerazione: binario, ottale ed esadecimale

Esercitazione Informatica I AA Nicola Paoletti

Corso di Informatica

Codifica binaria e algebra di Boole

La codifica delle informazioni

LA RAPPRESENTAZIONE DELLE INFORMAZIONI

Codifica binaria dei numeri

Laboratorio di Informatica

Codifica dei numeri negativi

Informatica. Rappresentazione binaria Per esempio diventa /10/2007. Introduzione ai sistemi informatici 1

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

ESTRAZIONE DI RADICE

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

ESEMPIO 1: eseguire il complemento a 10 di 765

Convertitori numerici in Excel

(71,1), (35,1), (17,1), (8,1), (4,0), (2,0), (1,0), (0,1) 0, = 1, 431 0, = 0, 862 0, = 1, 792 0, = 1, 448 0, = 0, 896

Richiesta pagina PHP (es: index.php)

Architettura degli Elaboratori I Esercitazione 1 - Rappresentazione dei numeri

Parte II Indice. Operazioni aritmetiche tra valori rappresentati in binario puro. Rappresentazione di numeri con segno

Introduzione agli algoritmi e alla programmazione in VisualBasic.Net

Lez. 3 L elaborazione (II parte) Prof. Pasquale De Michele Gruppo 2

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

APPUNTI DI MATEMATICA ALGEBRA \ INSIEMISTICA \ TEORIA DEGLI INSIEMI (1)

Struttura di un programma Java

Fasi di creazione di un programma

Introduzione allo Scilab Parte 1: numeri, variabili ed operatori elementari

Rappresentazione dei numeri in un calcolatore

Codifica binaria dei numeri relativi

CODIFICA BINARIA. ... sono rappresentati ricorrendo a simboli che sintezzano il concetto di numerosità.

3. La sintassi di Java

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

ALGEBRA DELLE PROPOSIZIONI

Dispense di Informatica per l ITG Valadier

I file di dati. Unità didattica D1 1

Aritmetica: operazioni ed espressioni

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

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:

Programmazione in Java Parte I: Fondamenti

Laboratorio di Informatica

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

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

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

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Arduino: Programmazione

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Dati testuali. Caratteri e stringhe. Tipi di dato testuali. Dati testuali. Il sistema dei tipi C. Rappresentazione dei testi

Strutturazione logica dei dati: i file

FORMULE: Operatori matematici

razionali Figura 1. Rappresentazione degli insiemi numerici Numeri reali algebrici trascendenti frazionari decimali finiti

Linguaggio C. Fondamenti. Struttura di un programma.

Utilizzo delle formule in Excel

Lezione 1. Gli Insiemi. La nozione di insieme viene spesso utilizzata nella vita di tutti i giorni; si parla dell insieme:

Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

la scienza della rappresentazione e della elaborazione dell informazione

I NUMERI DECIMALI. che cosa sono, come si rappresentano

I PROBLEMI ALGEBRICI

ESAME SCRITTO DI ELEMENTI DI INFORMATICA E PROGRAMMAZIONE. 27 Gennaio 2015

La selezione binaria

Транскрипт:

Rappresentazione delle informazioni Rappresentazione delle informazioni L informatica si occupa di rappresentare ed elaborare informazioni diverse: numeri caratteri audio immagini video I caratteri: ASCII standard Rappresentazione dei caratteri I simboli o caratteri appartenenti ad un alfabeto vengono codificati (cioè rappresentati ) mediante sequenze di bit: una diversa sequenza per ciascun diverso carattere. Uno dei codici più noti e usati è il codice ASCII (American Standard Code for Information Interchange), usa una sequenza di 7 bit per ciascun carattere: ci sono 128 (=2 7 ) sequenze diverse, utilizzate anche per lettere, segni di punteggiatura, cifre decimali, ecc. 1

I caratteri: ASCII esteso Dato che l unità elementare di informazione nei calcolatori è il byte (= 8 bit), si è passati ad usare, quasi sempre, il codice ASCII esteso, che usa una sequenza di 8 bit per ciascun carattere degli alfabeti occidentali: ci sono 256 (=2 8 ) sequenze diverse, utilizzate anche per vocali accentate e altre lettere speciali (es. ß tedesca, ç francese) le sequenze con la prima cifra uguale a zero coincidono con il codice ASCII. (Appendice G) I caratteri: ASCII esteso La codifica è: posizione n il primo carattere 00000000 0 il secondo 00000001 1. l ultimo 11111111 255 La sequenza di simboli Ciao viene codificata in ASCII nel modo seguente: C i a o 01000011 01101001 01100001 01101111 n 67 105 97 111 Le lettere sono rappresentabili in 7 bit. I caratteri: ASCII esteso I primi 32 caratteri del codice ASCII (con codice da 0 a 31) sono caratteri di controllo: 9 tabulatore \t 10 nuova riga \n 13 invio \r I caratteri da 32 a 127 sono caratteri stampabili: 32 spazio da 48 a 57 caratteri numerici, le cifre decimali 0, 1 da 65 a 90, da 97 a 122 caratteri alfabetici (maiuscoli e minuscoli) da 33 a 47, da 58 a 64, da 91 a 96, da 123 a 127 caratteri di interpunzione e simboli speciali. I caratteri: Unicode Per rappresentare i segni grafici utilizzati da tutti gli alfabeti del mondo servono molti più simboli diversi codifica Unicode http://www.unicode.org usa una sequenza di 16 bit per ciascun segno grafico: ci sono 65536 (= 2 16 ) sequenze diverse le sequenze con le prime otto cifre uguali a zero coincidono con il codice ASCII esteso. 2

I caratteri (codice Unicode) Rappresentazione delle informazioni Il linguaggio Java utilizza Unicode come insieme di simboli; in ogni linguaggio di programmazione i simboli servono per costruire le unità lessicali. Ogni informazione che vogliamo rappresentare è caratterizzata da un valore e da un suo tipo (tipo di dato). Non sempre possiamo o vogliamo rappresentare direttamente il valore, ma vogliamo poterci riferire ad esso tramite un nome. Astrazione Astrazione L evoluzione dei linguaggi di programmazione (basso ad alto livello) ha portato all introduzione del concetto di variabile: la locazione di memoria viene nascosta all utente, che vi accede tramite il nome della variabile. Le operazioni che si possono fare sulla variabile dipendono dal suo tipo: l utente non sa come avviene realmente la somma tra due numeri interi (reali) o il loro confronto. Si ha una astrazione sul dato e sul suo tipo. 3

Astrazione L evoluzione successiva dei linguaggi permetterà all utente di inventare dei nuovi tipi di dati, dei nuovi concetti. Tipo di Dato Astratto 1. è un insieme di elementi chiamato dominio 2. ha un nome 3. possiede delle funzioni che operano sul dominio 4. possono esserci costanti che lo caratterizzano. Variabile e Tipi base Variabile e Tipi base Nei corsi di matematica quando scriviamo x R e diciamo x è una variabile reale intendiamo dire che x è un nome che indica un elemento generico dell insieme R dei numeri reali. Nei corsi di informatica con x è una variabile reale intendiamo dire che x è un nome che indica una posizione di memoria che conterrà un elemento generico di R (con R R R). Variabile e Tipi base R insieme dei numeri reali (infinito e continuo). R insieme dei numeri reali rappresentabili nel calcolatore (finito e discreto). La posizione di memoria è caratterizzata dal tipo, che è l insieme da cui la variabile può estrarre i suoi valori 3 reale è diverso da 3 intero 4

Variabile e Tipi base Ogni linguaggio ha dei tipi base per rappresentare informazione numerica e non numerica (caratteri, valori logici). Anche il linguaggio Java possiede dei tipi base che non sono tipi di dato astratto, dal momento che sono predefiniti: non sono concetti nuovi, ma sono concetti fondamentali sui quali i concetti nuovi si baseranno. Variabile e Tipi base Tipi base o primitivi (par. 2.1, 2.5) numeri interi byte, short, int, long numeri reali float, double caratteri char logici boolean Definizione di una variabile Sintassi: nometipo nomevariabile; nometipo nomevar1, nomevar2; Esempi. Variabile e Tipi base int n, numeroanni; int dimensione; double area, saldo; boolean errore; char lettera; Variabile e Tipi base Le operazioni che possiamo fare su una variabile sono: accesso : individuare la posizione di memoria ed estrarre il valore (lettura) assegnamento : individuare la posizione di memoria e introdurre il valore (scrittura) 5

Variabile e Tipi base Nelle istruzioni di un programma, si ha: accesso: quando la variabile compare in una istruzione e se ne utilizza il valore assegnamento: quando il valore le viene attribuito: lettura del valore in una acquisizione di dati dall esterno in una istruzione di assegnazione (par. 2.2) Assegnazione Assegnazione Sintassi: (par. 2.2) nomevariabile = espressione; Esempi. //con riferimento alle dichiarazioni precedenti n = 3+5; area = 25.67; saldo = 20000; lettera = 'x'; lettera = x ; //Errore Assegnazione Quando una variabile viene definita le viene associata un area di memoria del tipo attribuito con la definizione: int a; double b; a b Non si possono ridefinire le variabili. 6

Assegnazione Quando si esegue l assegnazione, il valore viene inserito nell area corrispondente a=3; b=3; 3 3 a Le due aree di memoria sono di tipo diverso e la sequenza di bit contenuta è diversa, anche con uguale numero di bit. b Assegnazione Il simbolo per l istruzione di assegnazione è = NON lo si deve confondere con un simbolo matematico di uguaglianza o di confronto. Il suo significato è: il valore dell espressione a destra del simbolo = viene inserito nella locazione corrispondente alla variabile che sta a sinistra. Nel Pascal, il simbolo è := proprio per distinguerlo dal simbolo di uguaglianza Assegnazione Definizione e assegnazione in un unica istruzione: si può eseguire una assegnazione anche in fase di definizione: int k=25; La definizione di una variabile può essere fatta in un qualunque punto del programma ma deve essere sempre prima del suo uso. Assegnazione Osserviamo queste due assegnazioni e osserviamo che la variabile a è a destra o a sinistra del simbolo di assegnazione: ciò implica un diverso significato per l utilizzo di a: a=5; //assegnamento su a (scrittura) //a è a sinistra k=a; //accesso per a //a è a destra (lettura) 7

Assegnazione Osserviamo queste assegnazioni: a = 5; //assegnamento a = a + 1; /*accesso e assegnamento*/ Quanto valea? 5 a = a + 1; 6 In alcuni linguaggi di pseudocodifica, il simbolo per l assegnazione è Assegnazione Nei primi linguaggi le variabili avevano per il tipo una definizione di default. In Java una variabile può essere usata solo se è stata precedentemente definita, ossia se è stata dichiarata con il suo tipo. Esempio. int c=7; c1=c; //Errore: c1 non è definita Il compilatore segnala: cannot find symbol Assegnazione Diversamente da altri linguaggi, in Java una variabile definita in un metodo può essere usata (accesso) solo se è stata precedentemente inizializzata, ossia se ha un valore. Esempio. int c2; a=c2; //Errore: c2 non ha valore Il compilatore segnala: variable c2 might not have been initialized Assegnazione Nell assegnazione si deve rispettare il tipo di dato. Esempio. int m; double y = 23.75; m = y; //Errore: m è intero Il compilatore segnala: possible loss of precision 8

Tipo Intero Tipi base Si rappresenta un intervallo limitato, quindi finito, dei numeri interi (par. 4.1) Dominio: Z Z Il nome del dominio varia a seconda del numero di bit destinati alla rappresentazione: si hanno nomi diversi e anche insiemi diversi bit byte byte 8 1 short 16 2 int 32 4 long 64 8 Tipo Intero Il tipo di rappresentazione su n bit è 1 n-1 il primo è il bit del segno, i successivi n-1 sono per il numero. Dal momento che ogni bit assume due valori (0,1), avendo a disposizione n-1 bit si possono rappresentare 2 n-1 valori diversi. Tipo Intero Per il segno del numero si assume: 0 per il positivo 1 per il negativo Il numero 0, che non ha segno, viene scritto con il bit del segno 0 ed è rappresentato da una sequenza di bit tutti nulli. In tale modo, lo zero occupa un posto nell intervallo dei numeri positivi. 9

Tipo Intero Si vuole rappresentare la struttura algebrica dell insieme Z dei numeri interi: (Z, +) Z insieme + operazione esiste un elemento neutro, lo zero ogni numero ha un inverso, chiamato opposto L insieme Z è dato dall intervallo [-2 n-1, 2 n-1-1] Tipo Intero I vari domini per gli interi sono: (Cap.4 Tabella 1) byte n=8 [-2 7, 2 7-1] = [-128, 127] short n=16 [-2 15, 2 15-1] = [-32768, 32767] int n=32 [-2 31, 2 31-1] long n=64 [-2 63, 2 63-1] Tipo Intero Le costanti che caratterizzano il dominio sono gli estremi dell intervallo: -2 n-1 e 2 n-1-1. In Java esistono dei nomi che rappresentano questi estremi dell intervallo, e sono legati al nome del tipo: Byte.MIN_VALUE Byte.MAX_VALUE Short.MIN_VALUE Short. MAX_VALUE Integer.MIN_VALUE Integer. MAX_VALUE Long.MIN_VALUE Long. MAX_VALUE Tipo Intero Le operazioni che possiamo fare sono: + somma sottrazione prodotto / divisione (troncata) % resto della divisione Operatori di confronto: < > <= >= ==!= 10

Tipo Intero La divisione tra interi è troncata. Esempi. 32 /64 e 1 /2 in aritmetica sono frazioni equivalenti 32 / 64 è 0 nell aritmetica del calcolatore, perché il risultato deve essere intero Se si vuole ottenere il valore corretto, si devono usare costanti reali, indicate dal punto decimale : 32. /64 0.5 Tipo Intero Analogamente con le variabili: int a,b; a/b è troncata double c,d; c/d è reale, con gli eventuali decimali Si può volere una divisione troncata e avere quoziente e resto: 7 /4 1 7 %4 3 Tipo reale Tipo Reale Si rappresenta un intervallo limitato e finito dei numeri reali Dominio: R R Il nome del dominio varia a seconda del numero di bit destinati alla rappresentazione: si hanno nomi diversi e anche insiemi diversi bit byte float 32 4 semplice precisione double 64 8 doppia precisione 11

Tipo reale I numeri reali vengono chiamati numeri in virgola mobile, floating point. Secondo la notazione anglosassone la separazione tra parte intera e parte decimale è il punto (nella notazione italiana è la virgola). Quando si moltiplica o si divide un numero per la base 10, la posizione del punto si sposta: 224.35 = 0.22435 10 3 = 2243.5 10-1 virgola fissa Tipo reale La notazione scientifica viene scritta in Java utilizzando la lettera E (esponente), che rappresenta il prodotto per la base 10, seguita da un numero intero 0.22435 10 3 0.22435E3 2243.5 10-1 2243.5E-1 Per la parte intera non si usa la separazione con il punto (in alto) per gruppi di cifre: non 12 354 ma 12354 Tipo reale I numeri reali sono rappresentati in modulo e segno: significa che un numero a e il suo opposto a hanno di diverso solo il bit del segno. Il primo bit è il bit del segno ed è: 0 per i positivi 1 per i negativi I rimanenti bit rappresentano la mantissa e l esponente: 3.25 = 0.325 10 1 0.325 mantissa 1 esponente riferito alla base 10 Tipo Reale Il tipo di rappresentazione per i float è con n = 32 bit 1 8 23 il primo è il bit del segno, i successivi 8 sono per l esponente, i successivi 23 per la mantissa. Per i double, n = 64, la ripartizione è: 1(segno) 11(esponente) 52(mantissa) 12

Tipo Reale Si vuole rappresentare la struttura algebrica dell insieme R dei numeri reali: (R, +, ) R insieme + operazioni esiste un elemento neutro per la somma, lo zero 0 l inverso di a per la somma, opposto -a esiste un elemento neutro per il prodotto, l uno 1 l inverso di a 0 per il prodotto, reciproco 1/a Tipo Reale Oltre agli estremi dell intervallo di rappresentazione (il massimo reale e il suo opposto), dobbiamo conoscere quale è il più piccolo reale positivo: il più piccolo reale distinguibile dallo 0. Avendo a disposizione un numero finito di cifre i numeri reali minori del minimo positivo, sono rappresentati dallo 0. Le cifre decimali a disposizione: float: 6 cifre semplice precisione double: 15 cifre doppia precisione Tipo Reale Le costanti che caratterizzano il dominio sono il minimo positivo e il massimo reale. Anche per i reali le costanti significative sono rappresentate da dei nomi: Float.MIN_VALUE Double.MIN_VALUE Float.MAX_VALUE Double.MAX_VALUE Tipo Reale I numeri reali della macchina rappresentano esattamente se stessi e rappresentano in maniera approssimata un intervallo di numeri reali. I numeri reali della macchina hanno tutti un numero finito di cifre decimali (6, 15), pertanto tutti i numeri con un numero maggiore di cifre non possono essere rappresentati esattamente. 13

Tipo Reale Esempio. x = 0.123456 y = 0.123457 x, y R Se abbiamo a disposizione 6 cifre decimali, x e y sono rappresentati esattamente, mentre α = 0.123456 12345872 β = 0.123457 24672178 saranno approssimati con x e y rispettivamente. Tipo Reale I numeri reali sono approssimati per arrotondamento. Se la cifra che si trascura è 0 1 2 3 4 allora il numero viene approssimato al reale macchina più piccolo (per difetto); se la cifra è 5 6 7 8 9 il numero è approssimato al reale macchina più grande (per eccesso): α = 0.123456 82345872 è approssimato da y. Tipo Reale I numeri reali della macchina non sono distribuiti in maniera uniforme sulla retta reale: sono più fitti verso il minimo reale e più radi verso il massimo reale. Esempio. a = 0.00123456 140212 b = 123456 140212. a = 0.123456 140212 10-2 b = 0.123456 140212 10 12 Tipo Reale I numeri a e b vengono approssimati con a 1 = 0.123456 * 10-2 b 1 = 0.123456 * 10 12 La settima cifra di a e b (1) che si trascura ha una grandezza diversa: 10-9 in a e 10 5 in b. Il rappresentante a 1 è vicino ad a mentre il rappresentante b 1 è lontano da b. 14

Tipo Reale I numeri reali della macchina sono pertanto dei rappresentanti di intervalli, perché approssimano (per eccesso e per difetto) infiniti numeri reali (che non ci stanno ): y è il rappresentante di α α < y : eccesso β β > y : difetto E se ci servissero tutte le cifre di α e di β? Tipo Reale Nell esempio visto abbiamo utilizzato 6 cifre decimali e quindi la semplice precisione; se abbiamo bisogno di più cifre utilizziamo la doppia precisione: definiamo le variabili con il tipo double, con il quale si rappresentano 15 decimali. In Java useremo sempre il tipo double per i reali e il tipo int per gli interi. Tipo Reale L insieme dei numeri del tipo double contiene l insieme dei numeri di tipo float: I double rappresentano un insieme più grande: maxfloat~10 38 maxdouble~10 308 i rappresentanti sono più fitti tra due rappresentanti x e y (float) ci sono molti, ma in quantità finita, numeri esatti (rappresentanti) in doppia precisione Tipo Reale Le operazioni che possiamo fare sono: prodotto / divisione + somma sottrazione Operatori di confronto: < > <= >= ==!= 15

Operatori e precedenza Il simbolo della divisione è / (par. 4.4) a + b 2 no, invece (a+b) / 2 Priorità degli operatori aritmetici: (Appendice E) come nell algebra, moltiplicazione e divisione hanno più alta priorità rispetto alla addizione e sottrazione: nell esempio precedente le parentesi sono obbligatorie. Operatori e precedenza Le due scritture producono diversi risultati: 1. (a+b) / 2 2. a+b / 2 1. prima si effettua la somma (a+b) e poi la divisione 2. prima si effettua la divisione b/2 e poi la somma A parità di priorità le operazioni vengono effettuate da sinistra verso destra: 3. a b/c = (a b)/c Interi o reali? Perché ci sono due tipi di numeri: interi e i reali? I reali sono necessari per rappresentare valori con i decimali: lira (intero), euro (reale). Se vogliamo avere una divisione non troncata dobbiamo usare i numeri reali. Gli interi sono più efficienti : occupano meno spazio di memoria, le operazioni tra interi sono più veloci, e non producono errori di arrotondamento (maxint ha 10 cifre). Tipo Carattere 16

Tipo Carattere Il nome del tipo è char 2 byte 16 bit L insieme dei caratteri è UNICODE Esempi. char s = '0'; char x = 'a'; Operatori di confronto: < > <= >= ==!= Tipo Logico Il nome del tipo è boolean L insieme è Tipo Logico 1 bit B = {false, true} false 0 true 1 Operatori logici && (and) (or)! (not) Esercizio Problema. Calcolare la somma dei reciproci dei primi 10 numeri naturali. Soluzione. Dobbiamo calcolare la somma 1 + 1 /2 + 1/3 +.. + 1/10 Ricopiando questa somma in una istruzione, otterremo un risultato corretto? Attenzione: 1 /2 = 0 mentre 1. /2 = 0.5 17

Tipo di Dato Astratto Tipo di Dato Astratto I tipi base non sono TDA: sono tipi predefinti che l utente può usare ma non modificare e non può aggiungerne altri. Un TDA deve poter rappresentare un nuovo concetto e si basa su concetti già esistenti. Nei linguaggi orientati agli oggetti si possono definire e realizzare dei nuovi concetti. Insiemi numerici L invenzione dei numeri risale a molti secoli fa: Naturali N = {1, 2, 3, } Interi Z = {., -3, -2, -1, 0, 1, 2, 3.} Razionali Q ={ a/b a,b interi e b 0} Irrazionali es. π, e, Reali R visualizzati sulla retta Complessi C visualizzati sul piano x 2 +1 = 0 ha soluzione? Java non possiede il tipo di dato complex. Tipo di Dato Astratto Vogliamo definire un nuovo concetto: Numero Complesso. Definizione. Indichiamo con C l insieme dei numeri complessi: C = {(a,b) a, b R } Si vuole rappresentare la struttura algebrica dell insieme C dei numeri complessi: (C, +, ) C insieme + operazioni 18

Tipo di Dato Astratto Un numero complesso è definito come coppia di reali (i numeri reali sono un concetto già esistente): z = (a, b) La forma algebrica di z C è z = a + i b a parte reale b parte immaginaria i = (0, 1) unità immaginaria Tipo di Dato Astratto Per costruire il nuovo concetto dobbiamo descrivere: la sua forma: quali sono i dati (campi) le sue proprietà: quali operazioni possiamo fare (metodi) Il nuovo concetto viene descritto all interno di una classe: class NuovoConcetto { <descrizione della sua forma> <descrizione delle sue proprietà> } //fine classe Tipo di Dato Astratto Per il TDA NumeroComplesso avremo: class NumeroComplesso{ //forma o campi double partere; double parteim; //proprietà o metodi /* somma, prodotto, sottrazione, divisione,.*/ }//fine classe NumeroComplesso Tipo di Dato Astratto La classe NumeroComplesso dovrà sviluppare gli algoritmi (metodi) che rappresentano le operazioni con le quali si possono usare oggetti di tipo NumeroComplesso: somma, prodotto, Ogni oggetto di tipo NumeroComplesso sarà una realizzazione del nuovo concetto e potrà essere utilizzato tramite i suoi metodi. Un utente della nostra classe NumeroComplesso potrà utilizzare il metodo somma senza conoscere i dettagli descritti nella classe, così come noi eseguiamo la somma di due numeri interi senza sapere come ciò avviene realmente. 19

Oggetti, classi, metodi Oggetti, classi, metodi Un oggetto è un entità che si può usare invocando (chiamando) i metodi della sua classe. (par. 2.3) Un metodo è una sequenza di istruzioni che può accedere ai dati dell oggetto. I metodi della classe esprimono la funzionalità dell oggetto e la loro realizzazione è nascosta all utente. Oggetti, classi, metodi Il concetto NuovoConcetto che si va a descrivere nella classe è solo un prototipo : ossia non è funzionante. Per sapere se il nostro concetto è realizzato correttamente è necessario provarlo. Si dovrà pertanto costruire un programma, con un metodo main, che costruisce l oggetto e verifica la correttezza dei suoi metodi. Oggetti, classi, metodi Pertanto per ogni TDA costruiremo una classe di collaudo class ProvaNuovoConcetto{//classe di prova //per la classe NuovoConcetto //metodomain{ /* istruzioni per creare e utilizzare un oggetto di tipo NuovoConcetto */ }//fine main }//fine classe ProvaNuovoConcetto 20

Tipo di dati String Tipo di dati String Una stringa è una sequenza di caratteri. Diversamente dai numeri, in Java le stringhe sono oggetti. (par. 4.6) Una costante (letterale) stringa si scrive racchiusa tra virgolette: "benvenuto" e le virgolette non fanno parte della stringa. Letterale o costante letterale: sequenza di simboli che rappresenta un valore di un certo tipo di dato. Tipo di dati String Analogamente agli altri tipi di dato definiamo una stringa e le assegniamo un valore. Il tipo di dato è rappresentato dalla classe String: String nome; //definizione nome = "Maria"; //assegnazione Le stringhe hanno una sintassi diversa dagli altri oggetti. Tipo di dati String String è il nome di una classe: inizia con la maiuscola. Una variabile di tipo String può quindi essere utilizzata richiamando i metodi della sua classe. La lunghezza di una stringa è il numero di caratteri presenti in essa (senza contare le virgolette). Ogni carattere ha una sua posizione, o indice, all interno della stringa. 21

Tipo di dati String La posizione dei caratteri nelle stringhe viene numerata a partire da 0 (deriva da C e C++). F i l i p p o 0 1 2 3 4 5 6 La posizione dell ultimo carattere di una stringa corrisponde alla lunghezza della stringa meno 1. la lettera o di Filippo è in posizione 6 = 7-1 Tipo di dati String Per sapere di quanti caratteri è composta una stringa, utilizziamo il metodo length. (par. 2.3) Come si invoca un metodo (che agisce su oggetti)? nomeoggetto.nomemetodo(parametri); String saluto = "Ciao"; nome = "Filippo"; Tipo di dati String Il metodo length non ha parametri e restituisce un valore di tipo int. Pertanto memorizziamo questo valore in una variabile di tipo int: int n1 = saluto.length(); //n1=4 int n2 = nome.length(); //n2=7 //visualizziamo i valori di n1 e n2 System.out.println("n1= " + n1 + " n2= " + n2); Tipo di dati String Concatenazione tra stringhe. Le stringhe si possono concatenare utilizzando l operatore + String s1 = "Ciao"; String s2 = "mondo"; String s3 = s1 + s2; Il valore memorizzato in s3 è "Ciaomondo" Se si voglio gli spazi, questi devono essere inseriti esplicitamente: String s4 = s1 + " " + s2 22

Tipo di dati String Se una delle espressioni a destra o sinistra dell operatore + è una stringa, l altra espressione viene convertita a stringa e si ha la concatenazione. Questa concatenazione è utile nelle stampe: System.out.print("area = "); System.out.println(25.6); System.out.println("area = " + 25.6); Tipo di dati String Una stringa di lunghezza zero, che non contiene caratteri, si chiama stringa vuota e si indica con due caratteri virgolette consecutivi, senza spazi interposti: String vuota = ""; Poiché il metodo length restituisce un valore numerico, tale valore di ritorno può essere passato come parametro al metodoprintln: System.out.println(vuota.length()); //stampa 0 Tipo di dati String Vogliamo estrarre una sottostringa da una stringa data, utilizziamo il metodo substring: oggettostringa.substring(n1, n2); il primo parametro di substring è la posizione del primo carattere che si vuole estrarre; il secondo parametro è la posizione successiva all ultimo carattere che si vuole estrarre (il primo che non si vuole). Esempio. Tipo di dati String String saluto1 = "Ciao mondo!"; String subs1 = saluto1.substring(0,4); // subs1 contiene "Ciao" Il metodo restituisce una nuova stringa. La differenza tra i due parametri di substring corrisponde alla lunghezza della sottostringa estratta: la lunghezza disubs1 è 4 = 4-0 23

Tipo di dati String String subs2 = saluto1.substring(5,6); // subs2 contiene "m" di lunghezza 1 Attenzione: "m" è una stringa non un carattere. Il metodo substring può essere anche invocato con un solo parametro che indica il primo da estrarre; si estraggono i rimanenti fino alla fine: String subs3 = saluto1.substring(7); // subs3 contiene "ndo!" Tipo di dati String Metodo replace: ha due parametri di tipo stringa e restituisce una stringa dove è stato sostituito il primo con il secondo. String nome1 = "Maria"; String nome2 = nome1.replace("i","t"); //nome2 è "Marta" Metodi touppercase e tolowercase: convertono tutto in maiuscolo e in minuscolo rispettivamente. Tipo di dati String I metodi visti non modificano la stringa con la quale si invoca il metodo, ma restituiscono una nuova stringa (parametro di ritorno). Nessun metodo della classe String modifica l oggetto con cui viene invocato. Per tale motivo si dice che gli oggetti di tipo String sono oggetti immutabili. Tipo di dati String Se si fornisce un parametro errato a substring, il programma viene compilato correttamente, ma viene generato un errore in esecuzione. Esempio. public class Errore{ public static void main (String[] arg){ String nome = "Filippo"; String nome1 = nome.substring(5,10); System.out.println(nome1);} } 24

Tipo di dati String Questo errore non viene segnalato dal compilatore, ma si ha un errore durante l esecuzione del programma, che si interrompe segnalando: StringIndexOutOfBoundsException Si tratta di un errore logico, di cui però ci si accorge dato che l esecuzione viene interrotta. Sequenze di escape Come possiamo stampare una stringa che contiene delle virgolette? Ciao, "Mondo"! System.out.println("Ciao, "Mondo"!"); //ERRATO Il compilatore identifica le seconde virgolette come la fine della prima stringa "Ciao, ", ma poi non capisce il significato della parola Mondo. Si deve inserire una barra rovesciata \ (backslash) prima delle virgolette all interno della stringa System.out.println ("Ciao, \"Mondo\"!"); Sequenze di escape Il carattere backslash all interno di una stringa non rappresenta se stesso, ma si usa per codificare altri caratteri: sequenza di escape (di uscita). Per inserire veramente un carattere backslash in una stringa, si usa la sequenza di escape \\ Per scrivere parole italiane con lettere accentate senza avere a disposizione una tastiera italiana, si inserisce \u seguito dalla codifica Unicode del carattere. Esempio. Stampare la parola Perché System.out.println("Perch\u00E9"); Esercizio Dato un gruppo di tre parole, utilizzando i metodi visiti, costruirne l acronimo. Esempio. Date le parole random access memory, costruire l acronimo RAM. Soluzione. Dobbiamo estrarre da ogni parola la sottostringa iniziale di lunghezza 1, concatenarle tra loro e trasformarle poi in maiuscolo. 25

Esercizio public class Acronimo{//costruzione acronimo public static void main(string[] arg){ String parola1 = "random"; String parola2 = "access"; String parola3 = "memory"; // estrai le iniziali String tmp = parola1.substring(0, 1) + parola2.substring(0, 1) + parola3.substring(0, 1); // converti in maiuscolo String acro = tmp.touppercase(); System.out.println("L'acronimo e' " + acro); }//fine main }//fine main 26