Corso di Fondamenti di Programmazione canale E-O. Tipi di dato. Un esempio

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

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

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

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

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

Programmare in C. Maurizio Palesi Salvatore Serrano. Valori. Operazioni. Un insieme di valori del tipo. Per operare su tali valori Tipi

Tipi di dato, Alessandra Giordani Lunedì 7 maggio 2011

Sintassi: Per la dichiarazione di variabili dei tipi fondamentali:

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

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

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

Laboratorio di programmazione

Laboratorio di informatica Ingegneria meccanica

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

IL LINGUAGGIO C TIPI DI DATO

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

Tipi di dato semplici

Il linguaggio C. Notate che...

Un elaboratore è un manipolatore di simboli (segni) intrinsecamente capace di trattare vari. caratteri char caratteri ASCII unsigned char

Tipi e Valori. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna

Il potere espressivo di un linguaggio è caratterizzato da: PROGRAMMA = DATI + CONTROLLO

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

Puntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a

Programmazione in Java (I modulo)

LINGUAGGI DI PROGRAMMAZIONE!

Conversioni fra Tipi di Dati. Luca Abeni

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

Laboratorio di Informatica

Input/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari

Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:

Corso sul linguaggio C Modulo Tipi di dato

LIBRERIE STANDARD in C. LIBRERIE STANDARD in C

Tipi di dato primitivi

Tipo carattere. Campo di variabilità. Intervallo finito. Tipo. Dimensione (byte) char

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Tipi interi lo standard (1)

Verso i puntatori: Cosa è una variabile?

Tipi di dato in C. Ogni variabile in C ha associato un tipo, questo permette di:

Fondamenti di Informatica T-1 Modulo 2

Lab 02 Tipi semplici in C

Linguaggio C - sezione dichiarativa: costanti e variabili

Variabili, tipi, espressioni in C. Emilio Di Giacomo

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

Cap. 7: Tipi di base. Tipi di base

Variabili. Tipi di dati di base. Variabili. Variabili

Espressioni ed operatori in C

Programmazione I - Laboratorio

Codifica dei Tipi di Dati in Linguaggio C

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

Primi passi col linguaggio C

Le parole chiave char, int, float, double, ed enum descrivono i. che modificano i tipi base

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

Linguaggio C Informatica Grafica

Basi della programmazione in Java. Anteprima. Uso delle variabili. Il concetto di variabile Uso delle variabili. Input da tastiera I tipi Esercizi

Scrittura formattata - printf

La codifica. dell informazione

Caratteristiche di un linguaggio ad alto livello

La codifica. dell informazione

Introduzione alla programmazione in C++

I CARATTERI E LE STRINGHE

Espressione di chiamata di funzione

Input/Output di numeri

Struttura dei programmi C

IL PROBLEMA DEL PROGETTO

Algoritmi e basi del C

Funzioni di libreria. KP pp , , , 589, DD pp , , ,

Introduzione alla programmazione in C(++)

Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.

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

La codifica binaria. Informatica B. Daniele Loiacono

Corso di Fondamenti di Informatica

SULL USO DEI CARATTERI. char x; si legge con ( %c,&x) e si stampa con ( %c,x) ma anche con ( %d,x) DUE ESEMPI

Alfabeto ed elementi lessicali del linguaggio C

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

La sintassi del C APPENDICE H

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Linguaggio C: Espressioni

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

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

Le librerie standard. ! La libreria standard del C è in realtà un insieme di librerie

Variabili e Istruzioni

Il Linguaggio C. Caratteristiche. Caratteristiche. Esempio di programma in C. Tipi di dato primitivi in C. Dati

La codifica binaria. Informatica B. Daniele Loiacono

Funzioni di I/O per numeri. Input e output di valori numerici. Input formattato scanf. Stream preesistenti

$QDOLVLGHOSURJUDPPDTXDGUDWR

Algoritmi e basi del C Struttura di un programma

Somma di numeri binari

La codifica binaria. Fondamenti di Informatica. Daniele Loiacono

Il linguaggio C - Introduzione

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Compendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)

- Dispensa III - PROGRAMMAZIONE C (Parte I)

Gli Operatori. Università degli Studi di Brescia

Caratteri e stringhe

C: panoramica - I parte

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

Lezione 6 Introduzione al C++ Mauro Piccolo

Tipi di dato. Unità 2. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Transcript:

Corso di Fondamenti di Programmazione canale E-O Tiziana Calamoneri Le variabili in C KP Cap. 3, pp. 95-129 Cap. 5, pp. 190-193 DD Cap. 9, pp.352-355 Tipi di dato Abbiamo già parlato delle variabili, ed abbiamo fin ora usato il tipo int, ma abbiamo molte altre possibiltà I tipi di cui parleremo sono: char int (short, long, unsigned) float double (long) Ricordiamo che queste parole chiave NON possono essere usate come nomi di variabili. Tipo char Una variabile di tipo char occupa 1 byte in memoria. In C, i caratteri sono sempre delimitati da (ad es. a ) #define LETTERA a In realtà, in C, i caratteri sono interi, poiché si memorizzano tramite la loro codifica (ASCII o EBCDIC). N.B. Non c è relazione tra il valore di un char ed il carattere corrispondente (il valore del carattere 2 NON è 2 ma 50!) Alcuni caratteri non stampabili richiedono una sequenza di escape (ad es. tab=\t). Tali sequenze occupano comunque un solo carattere. Le funzioni di I/O (ad es. scanf() e printf()) gestiscono i caratteri tramite %c #include<stdio.h> int main(void) char c; scanf("%c", &c); if (c>='a' && c<='z') printf("%c", c+'a'-'a'); else putchar(c); return 0; Un esempio Problema: dato in input un carattere, se esso è una lettera minuscola, trasformarla in maiuscola. N.B. i caratteri sono ordinati secondo il loro codici, quindi possono essere trattati come degli interi (confrontati e addizionati). A - a abcxyzabcxyz

#include<stdio.h> int main(void) char c; int n; Un altro esempio Problema: dato in input un carattere, se esso rappresenta una cifra, trasformarla nel suo equivalente numerico. scanf("%c", &c); if (c>='0' && c<='9') n=c-'0'; isdigit(c) in <ctype.h> 6-0 printf("%d", n); 0 1.. 6 9 48 49 else printf( il carattere inserito non è una cifra ); return 0; 54 57 L intestazione standard <ctype.h> definisce un gruppo di funzioni che forniscono test e conversioni legate al set dei caratteri. Ad es. tolower(c) restituisce la minuscola se c è maiuscola. Tipo int (1) Una variabile di tipo int occupa di solito 2 o 4 bytes in memoria. Questo significa che non è possibile rappresentare tutti gli interi ma solo un numero finito di essi. Quindi: attenzione all overflow! Se si ha bisogno di valori grandi si può usare long (4 byte). Il valore di LONG_MAX e LONG_MIN non è sempre uguale, ma varia da macchina a macchina ed è in limits.h Se la quantità di memoria usata è critica e non si usano interi grandi si può usare short (2 byte) Se i valori necessari sono solo non negativi, si può usare unsigned, che permette di memorizzare lo stesso numero di interi, ma tutti non negativi. Il valore di ULONG_MAX è in limits.h Tipo int (2) DD p. 352 Le funzioni di I/O gestiscono gli interi tramite %d, %u, %o, %x, %h, %l. Vediamoli uno ad uno: %d intero decimale con segno; solo il - viene visualizzato, il + è sottinteso (es. -35, 24, 0, ) %u intero decimale senza segno; se un intero negativo viene letto con %u la lettura risulta errata! (es. -465 diventa 4294966841) %o %x interi senza segno ottali (cifre da 0 a 7; es. 256=2x8 2 +5x8 1 +6x8 0 ) o esadecimali (cifre da 0 a 9 e lettere da a ad f; es.1c7=1x16 2 +12x16 1 +7x16 0 ) %h %l posti davanti ad uno degli indicatori precedenti indicano rispettivamente short e long; sono detti modificatori di lunghezza Tipi reali (1) C è una grossa differenza tra reali matematici e reali digitali : i primi sono continui, gli altri discreti. Anche qui: attenzione all overflow! Per memorizzare un intero come reale bisogna scriverlo con il. (ad es. 2.0) I reali possono scriversi con il punto decimale o tramite notazione esponenziale che, quando non c è, è sottintesa (ad es. 1.342e3 vale 1342.3, mentre 3.14 è come se fosse 3.14e0) In C sono previsti 3 tipi reali: float, double e long double float numero in virgola mobile, precisione singola double numero in virgola mobile, precisione doppia long double numero in virgola mobile, precisione multipla ATTENZIONE: anche qui, il num. dei byte usati dipende dalla macchina, quindi le dimensioni distinte potrebbero essere 1, 2 o 3.

Tipi reali (2) Le funzioni di I/O gestiscono i reali tramite %e, %f, %L. %e visualizza in forma esponenziale (es. 1,502876e+02=1,502876 x 10 2 =150,2876) %f visualizza con la virgola (es. 345,872000); visualizza sempre almeno una cifra a sx della virgola N.B. i valori visualizzati tramite %e ed %f sono visualizzati di default con 6 cifre di precisione. %L posto davanti ad uno degli indicatori precedenti indica long double Costanti Abbiamo detto che le costanti si definiscono tramite una direttiva del preprocessore. Esse non vengono definite con un tipo, che deve essere ricavato dal processore. La costante 1234 è un int Una costante long si scrive con una L finale: 123456789L Le costanti in virgola mobile si scrivono con il punto decimale (123.45) oppure in forma esponenziale (1e-2) ed il loro tipo è double I suffissi F ed L indicano i tipi float e long double Una costante carattere è un intero, scritto come carattere tra apici. Quindi le costanti carattere possono prendere parte alle operazioni numeriche anche se si usano di solito in confronto ad altri caratteri N.B. attenzione alla differenza tra 0 e 0!! Esercizi 12. (tipi interi e reali) scrivere un programma C che stampi i numeri +875 e - 875 con tutti gli indicatori di conversione disponibili scrivere un programma C che stampi i numeri +1234567.89 e -1234567.89 con tutti gli indicatori di conversione disponibili scrivere un programma C che determini la gamma di valori possibili dei tipi short, int, long, con e senza segno, visualizzando valori appropriati dalle intestazioni standard. sizeof Il C fornisce l operatore unario sizeof per determinare il numero di byte usati per memorizzare un oggetto. Esempio. sizeof(oggetto) dove oggetto può essere un tipo (come int o float), una variabile (come x) o un espressione (come a+b). N.B. i risulati di sizeof possono variare da una macchina all altra, ma è sempre vero che: sizeof(char)=1 sizeof(char)!sizeof(short)!sizeof(int)!sizeof(long) sizeof(float)!sizeof(double)!sizeof(long double)

Esercizi 13. (tipi di var., sizeof) Stampare una variabile char come carattere e come intero Provare ad eseguire operazioni tra interi e memorizzare il risultato in un int ed in un float, e poi stampare entrambi Provare a memorizzare in un int un numero troppo grande Stampare il numero di byte usati da tutti i tipi descritti Conversioni implicite (1) p. 115 Ogni espressione aritmetica, come x+y, ha un valore ed un tipo. Se sia x che y sono int, x+y è un int, ma se x ed y sono short, x+y è comunque un int, e non short, perché nelle espressioni i valori short vengono convertiti in int. In generale, se un espressione coinvolge tipi diversi, i tipi inferiori vengono promossi ai tipi superiori. Ad esempio, se x è int e y è float, x+y sarà float. Questa operazione si chiama conversione implicita o automatica. Conversioni implicite (2) In genere, le uniche conversioni automatiche sono quelle che consentono ad un tipo di ampliare il proprio campo di variabilità senza perdita di informazione (ad es. da int a float) Espressioni prive di senso, come reali usati come indici, provocano un errore Espressioni che potrebbero causare perdita di informazione (come assegnare un numero in virgola mobile ad un intero) NON SONO ILLEGALI, quindi ATTENZIONE!! Gli assegnamenti implicano conversioni: il valore del membro destro è convertito nel tipo del membro sinistro prima di essere copiato. Cast (1) Oltre alle conversioni implicite, che avvengono durante gli assegnamenti o nelle espressioni miste, sono possibili anche conversioni esplicite o forzate (cast). Esempio. Se x è intero, allora (double)x; converte il suo valore in double, ma la variabile x NON viene modificata. Quindi il cast si può usare nelle espressioni. Esempi. se i è un intero: f=(float)(i+1); /* i+1 sarebbe un int */ d=(double)i/3; /* i/3 sarebbe un float */ L operatore unario cast ha la stessa priorità degli altri operatori unari (ad es. segno).

Cast (2) Attenzione: il casting modifica il valore della variabile ma il contenuto non viene modificato! #include<stdio.h> Ci sono funzioni di libreria (come sqrt) che hanno dei parametri di un certo tipo (double), e non producono cose sensate se l argomento che si passa è di un altro tipo. #include<math.h> int main() int i=4; float a=4.0; printf("radice di interi=%d\n", sqrt(i)); printf("radice di reali=%f\n", sqrt(a)); return 0; Output: radice di interi=1073741824 radice di reali=2.000000 Visibilità delle variabili(1) REGOLA BASE: le variabili sono accessibili solo all interno del blocco nel quale sono dichiarati: al di fuori sono sconosciute. int a=2; output: printf( %d,a); 2 5 2 int a=5; printf( %d,a++); printf( %d,a); N.B. La a più interna non sovrascrive l altra! Per evitare confusione, meglio non usare gli stessi identificatori: int a=2; printf( %d,a); int b=5; printf( %d,b++); printf( %d,a); Visibilità delle variabili (2) Le variabili definite in un blocco sono dette locali, quelle definite fuori qualunque blocco, all inizio del programma, sono dette globali. Le variabili globali sono visibili dappertutto, le locali solo all interno del blocco nel quale sono definite. int i; int a; int main() scanf( %d, &a); if (a==1) i=1; while (i <=10) printf( %d, i++); else printf ( %d, a); printf ( %d, ++i); int a; int main() scanf( %d, &a); if (a==1) int i=1; while (i <=10) printf( %d, i++); else printf ( %d, a); printf ( %d, ++i);??? Visibilità delle variabili (3) Due blocchi possono trovarsi uno dopo l altro; in tal caso il secondo blocco non vede nulla di quello che accade nel primo, e viceversa. Le variabili esterne ai blocchi sono viste da entrambi. int a; int b; int c; float a; int d; float b; blocco 1 blocco 2 a e b sono visibili sia in 1 che in 2 c non è visibile in 2 d non è visibile in 1 a intera non è visibile perché è stata definita un altra a b intera non è visibile perché è stata definita un altra b

Visibilità delle variabili (4) E buona norma usare il più possibile variabili locali, posizionando la loro definizione in modo che la loro visibilità sia ristretta ai blocchi che le usano. Un programma con molte variabili globali non è un buon programma. Ad esempio, non c è motivo che i contatori siano variabili globali. La globalità dovrebbe essere riservata solo a quelle variabili che ricorrono per tutto il programma. Le variabili globali dovrebbero essere poche.