Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di...

38
Corso di Laboratorio di Informatica Ingegneria Clinica BCLR Unità 2 Char Domenico Daniele Bloisi

Transcript of Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di...

Page 1: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Corso di Laboratorio di Informatica

Ingegneria Clinica – BCLR

Unità 2

Char

Domenico Daniele Bloisi

Page 2: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Docente

Ing. Domenico Daniele Bloisi, PhD

Ricercatore

Dipartimento di Ingegneria Informatica, Automatica

e Gestionale “Antonio Ruberti”

Via Ariosto 25

(adiacente Piazza Dante,

Manzoni

Tram 3 fermata via Labicana)

email: [email protected]

home page:

Laboratorio di Informatica

2014/2015

Char

Unità 2

Pagina 2

http://www.dis.uniroma1.it/~bloisi

Page 3: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Ricevimento

In aula, subito dopo le lezioni

Su appuntamento (tramite invio di una email)

presso:

Dipartimento di Ingegneria Informatica,

Automatica e Gestionale “Antonio Ruberti”,

via Ariosto 25 - II piano, stanza A209

Si invitano gli studenti a controllare regolarmente la

bacheca degli avvisi

http://www.dis.uniroma1.it/~bloisi/didattica/labinf1415.html#Avvisi

Pagina 3Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 4: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Orari

Lunedì 12.00 – 13.30

Aula 4, via del Castro Laurenziano 7A

Martedì 14.00 – 17.15

Aula 15, Laboratorio Didattico via Tiburtina 205

Mercoledì 12.00 – 13.30

Aula 4, via via del Castro Laurenziano 7A

Pagina 4Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 5: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Sommario – Unità 2

• Variabili

• Assegnazione

• Tipi di dato interi

• Lettura e scrittura di interi

• Tipi di dato reali

• Precisione nelle rappresentazioni

• Conversioni di tipo• Tipo di dato primitivo caratteri char

• Insieme dei valori rappresentabili• Clausola unsigned

Pagina 5Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 6: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Precisione nella rappresentazione

Non tutti i numeri compresi tra −3.4028235 · 10+38 e +3.4028235 · 10+38 sono rappresentabili come float

I numeri rappresentabili come float sono tanto più vicini tra loro

quanto più sono vicini allo zero. Inoltre, essi sono tanto più lontani

fra loro quanto più ci si avvicina al massimo valore rappresentabile

(in valore assoluto).

Pagina 6

Considerazioni simili valgono anche per i double

Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 7: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Esempio 1

Il seguente frammento di codice

float x = 1222333444.0f;

printf("x = %f\n", x);

x += 1.0;

printf("x + 1 = %f\n", x);

producex = 1222333440.000000

x + 1 = 1222333440.000000

Pagina 7Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 8: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Esempio 2

Il seguente frammento di codice

int j = 1222333444;

printf("j = %d\n", j);

j += 1;

printf("j + 1 = %d\n", j);

producej = 1222333444

j + 1 = 1222333445

Pagina 8Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 9: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Precisione nelle misure

La precisione del risultato di una operazione

dipende dalla precisione con cui si conoscono i

dati.

Esempi:9.2 * 5.3 = 48.76

(la seconda cifra decimale non è significativa in

questo esempio)

9.25 * 5.35 = 49.48

(qui, invece, lo è)

Pagina 9Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 10: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Conversione di tipi

E’ possibile trasformare un tipo di dato in un altro

attraverso una conversione

Una conversione può essere:

• Implicita (detta anche promozione) quando viene

effettuata dal compilatore per assicurare che gli

operandi siano dello stesso tipo.

• Esplicita quando viene effettuata dal

programmatore tramite l’operatore unario cast

Pagina 10Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 11: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Gerarchia di promozione

long double

double

float

unsigned long

long

unsigned int

int

short

char

perdita di

precisionepromozione

Tipo inferiore

Tipo superiore

Pagina 11Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 12: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Conversione di tipo implicita -

operatori binari (1/2)

Se gli operatori binari vengono utilizzati con due operandi di

tipo diverso, il tipo inferiore viene promosso a quello superiore

e il risultato sarà del tipo superiore.

ESEMPIO di regola (informale)oper1 + oper2: se oper1 è double e oper2 è float,

oper2 promosso a double e l’espressione è double

a = c + b;

float (tipo dell’operando)

double (tipo dell’operando)

double (tipo dell’espressione)

Pagina 12Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 13: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Conversione di tipo implicita -

operatori binari (2/2)

Attenzione!!!Se a e b sono di tipo float, mentre c di tipo double, allora

a = b + c;

assegnerà il valore double risultato della somma a una

variabile float, con il potenziale effetto di avere una perdita di

informazione.

In un assegnamento, il tipo della variabile destinazione

definisce il tipo finale.

Pagina 13Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 14: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Conversione di tipo implicita -

chiamata di funzione . . .

int f(float, int);

int main() {

int a; float b;

f(a, b);

. . .

}

int f(float p1, int p2) {

. . .

}

Possibile perdita

di informazione:

tipi in chiamata

diversi dai tipi definiti

nel prototipo

Pagina 14Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 15: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Conversione di tipo implicita -return

int f() {

float b;

int c;

. . .

return b * c;

}

Possibile perdita

di informazione:

valore restituito

diverso dal tipo di

ritorno definito

Pagina 15Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 16: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Conversione di tipo esplicita (cast)

Per convertire esplicitamente un dato da un tipo ad un altro si

deve effettuare un’operazione di cast.

Sintassi

(tipo) espressione;

• tipo è il nome di un tipo

• espressione è un’espressione il cui tipo verrà forzato a

tipo

Semantica

Converte il tipo di un’espressione a un altro tipo, in modo da

rendere possibili operazioni che coinvolgano tipi altrimenti

incompatibili.

Pagina 16Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 17: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Esempio cast

int a = (int) 3.75; // cast a int

// dell’espressione 3.75

// (di tipo double)

printf("%d", a); // stampa 3

Nell’esempio il valore 3.75 viene troncato a 3.

Esempio:

Pagina 17Laboratorio di Informatica

2014/2015

Char

Unità 2

ATTENZIONE: Il risultato di una operazione di cast

potrebbe essere affetto da perdita di precisione.

Page 18: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Assegnazioni fra tipi di dato primitivi

numerici diversiUn valore di un tipo di dato non va assegnato ad una variabile

di un tipo di dato inferiore, altrimenti si rischia perdita di

precisione.

Esempio:int a; long b; a = b;

un valore long non va assegnato ad una variabile int

int a; float b; a = b;

un valore float non va assegnato ad una variabile int

Nota: il compilatore gcc non segnala alcun errore

Pagina 18Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 19: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Esempio

#include <stdio.h>

int main () {

long b = 90000L;

short a = (short) 3.75; // cast a short

// dell’espressione 3.75

// (di tipo double)

printf("%hd\n", a);

a = b; //si assegna long a short

printf("%hd\n", a);

printf("%ld\n", b);

return 0;

}

Pagina 19Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 20: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Compilazione ed esecuzione

Pagina 20Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 21: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Tipo char

Pagina 21Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 22: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Dominio ASCII

Una variabile di tipo char può contenere un carattere

alfanumerico o un simbolo.

Lo standard ASCII stabilisce una corrispondenza tra numeri e

simboli alfabetici, numerici o simboli speciali in varie lingue.Ad esempio, il carattere 'A' corrisponde al codice numerico

65, il carattere 'B' al codice numerico 66, ecc.

Per maggiori dettagli sullo standard ASCII

si veda, ad esempio, il sito web: www.asciitable.com

Pagina 22Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 23: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Tavola ASCII

Page 24: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Esempio char

Una variabile di tipo char può contenere un

carattere alfanumerico o un simbolo.

I letterali del tipo char possono essere denotati

tramite gli apici''.

Esempio:char c = 'A'; char c = '0';

char c = 67; //corrisponde alla C in ASCII

Non si tratta del numero zero, ma

del carattere zero (48 ASCII)

Pagina 24Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 25: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Operazioni sui char

Conversione da char a int

corrisponde a calcolare il codice ASCII di un carattere

char c = 'A';

int i = (int)c; // i contiene il codice ASCII

// del carattere 'A'

printf("%d\n", i); // stampa 65

Domanda: cosa stampa printf("%c\n", i); ?

Pagina 25Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 26: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Operazioni sui char

Conversione da char a int

conversione da carattere a intero corrispondente tramite il

carattere '0'char c = '5';

int i = (int)c - (int)'0'; // i = 53 - 48

printf("%d\n", i); // stampa 5

printf("%c\n", i); // stampa ♣ (ENQUIRY)

Pagina 26Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 27: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Operazioni sui char

Conversione da int a char

corrisponde a creare un carattere a partire dal suo codice

ASCII

int i = 65; // codice ASCII del carattere 'A'

char c = (char)i;

printf("%c\n", c); // stampa 'A'

Domanda: cosa stampaint i = 1065;

char c = (char)i;

printf("%c\n", c);

?

Pagina 27Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 28: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Operazioni sui char

Conversione da int a char

conversione da intero a carattere corrispondente tramite il

codice ASCII del carattere '0'

int i = 5;

char c = (char)(i + (int)'0'); // c = 5 + 48

printf("%c\n", c); // stampa 5 (53 ASCII)

printf("%d\n", c); // stampa 53

Pagina 28Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 29: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Operazioni sui char

Conversione da char a int

char c = '5';

int i = (int)c - (int)'0'; // i = 53 - 48

printf("%d\n", i); // stampa 5

Conversione da int a char

int i = 5;

char c = (char)(i + (int)'0'); // c = 5 + 48

printf("%c\n", c); // stampa 5 (53 ASCII)

Pagina 29Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 30: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Esercizio

Esercizio 2.8

Si scriva un programma C in grado di visualizzare

tutte le cifre del codice ASCII corrispondenti alle

lettere del proprio nome.

Pagina 30Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 31: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Soluzione Erika

#include <stdio.h>

int main()

{

char c = 'E';

printf("%c corrisponde a %d\n", c, c);

c = 'r';

printf("%c corrisponde a %d\n", c, c);

c = 'i';

printf("%c corrisponde a %d\n", c, c);

c = 'k';

printf("%c corrisponde a %d\n", c, c);

c = 'a';

printf("%c corrisponde a %d\n", c, c);

return 0;

}

Pagina 31Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 32: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Il tipo char usato come tipo numerico

Poiché i valori char vengono convertiti

automaticamente in valori interi, essi sono spesso

usati per rappresentare interi a 8 bit, con

dominio [-128,+127]

Con le dovute attenzioni, è possibile utilizzare char come tipo intero ad 8 bit.

Pagina 32Laboratorio di Informatica

2014/2015

Char

Unità 2

Esempio:

Nell’elaborazione delle immagini il dominio per rappresentare

le intensità di colore è [0,255]

Page 33: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

La clausola unsigned

I tipi numerici interi char, short, int, long

possono essere dichiarati con la clausolaunsigned.

Sintassi

unsigned <tipo> <variabile>;

Semantica

I dati contenuti nelle relative variabili saranno

interpretati come valori senza segno (ovvero valori

non negativi).

Pagina 33Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 34: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

La clausola unsigned

Sintassi ammessa[ signed | unsigned ] int

[ signed | unsigned ] short [ int ]

[ signed | unsigned ] long [ int ]

Pagina 34Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 35: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Tabella di confronto signed/unsigned

Pagina 35Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 36: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Esempio

stampa2147483647 2147483647

-2147483648 2147483648

#include <stdio.h>

int main() {

int x; unsigned int u;

x = 2147483647; u = x;

printf("%d %u\n", x, u);

x = 2147483647+1; u = x;

printf("%d %u\n", x, u);

return 0;

}

Pagina 36Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 37: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Definizione di nuovi tipi

In C è possibile definire nuovi tipi mediante l’istruzione typedef

Esempio:typedef int TipoA;

typedef int TipoB;

TipoA a = ...;

TipoB b = ...;

Pagina 37Laboratorio di Informatica

2014/2015

Char

Unità 2

Page 38: Presentazione di PowerPoint - uniroma1.itbloisi/didattica/ingegneriaClinica...Laboratorio di Informatica Pagina 32 2014/2015 Char Unità 2 Esempio: Nell’elaborazione delle immagini

Esercizi

Esercizio 2.9

Scrivere un programma in linguaggio C che legga un importo in Euro x e restituisca il corrispondente importo in Dollari.

Esercizio 2.10

Scrivere un programma in linguaggio C che legga da tastiera

due numeri interi e stampi su schermo:

• media aritmetica (la loro somma diviso 2)

• media geometrica (la radice quadrata del loro

prodotto)

Pagina 38Laboratorio di Informatica

2014/2015

Char

Unità 2