INFORMATICA 1 Lezione 3 (Introduzione al Linguaggio C, Introduzione ai Tipi di dato, Cenni alla codifica binaria) Introduzione al Linguaggio C 1
Passi fondamentali del C Definito nel 1972 (AT&T Bell Labs) per sostituire l assembler nella programmazione di sistemi operativi: UNIX Prima definizione precisa: Kernigham & Ritchie (1978) Prima definizione ufficiale: ANSI C (1983) Informatica 1 - Michele Colajanni, 2003 54 Linguaggi di alto livello (cont.) Informatica 1 - Michele Colajanni, 2003 55 2
Linguaggi di alto livello (cont.) Informatica 1 - Michele Colajanni, 2003 56 Caratteristiche del C Linguaggio sequenziale, imperativo, strutturato a blocchi Usabile anche come linguaggio di sistema adatto a software di base, sistemi operativi, compilatori, ecc. Portabile, efficiente, sintetico (ma a volte poco leggibile...) Basato su pochi concetti elementari: espressione dichiarazione / definizione istruzione / blocco funzione tuttavia, viene arricchito da un vasto insieme di librerie di funzioni (per operazioni matematiche, di input/output, su stringhe, ecc.) Informatica 1 - Michele Colajanni, 2003 57 3
Caratteristiche del C (cont.) SET DI CARATTERI Dipendente dalla implementazione (in genere ASCII più estensioni) IDENTIFICATORI <Identificatore> ::= <Lettera> { <Lettera> <Cifra> } Lettera include tutte le lettere, maiuscole e minuscole, e l underscore _ (utilizzabile all inizio solo per oggetti di sistema) Maiuscole e minuscole sono diverse (linguaggio C è case-sensitive) PAROLE RISERVATE Esempio: int, float, if, for, do,... { } delimitatore di blocco COMMENTI /* commento, anche su più righe */ (non possono essere innestati) Informatica 1 - Michele Colajanni, 2003 58 Costanti (numeriche) Una costante è un astrazione simbolica di un valore Base 2 byte 4 byte Numeri interi 12 70000 Ottale 014 0210560 Esadecimale 0xFF 0x11170 Numeri reali 24.0 2.4E1 240.0E-1 Informatica 1 - Michele Colajanni, 2003 59 4
Costanti (caratteri) Esempio: 'A' 'c' '6' Anche: caratteri speciali: '\n', '\t', '\'', '\\', '\"' caratteri indicati tramite codice ASCII: \nnn, \0xhhh ( nnn = numero ottale, hhh = numero esadecimale) '\041' '\0' 240.0E-1 Stringa di caratteri carattere ciao Hello\n (stringa nulla) Informatica 1 - Michele Colajanni, 2003 60 Variabili Una variabile è un astrazione della cella di memoria Formalmente, una variabile è un simbolo associato a un indirizzo fisico (L-VALUE) simbolo indirizzo x 1328 che denota un valore (R-VALUE) perciò, l R-VALUE di x è attualmente 4: 1328... 4... Informatica 1 - Michele Colajanni, 2003 61 5
Costanti e Variabili COSTANTE Simbolo Valore VARIABILE Non modificabile a tempo di esecuzione Modificabile a tempo di esecuzione Simbolo Indirizzo (L-Value) Valore (R-Value) Informatica 1 - Michele Colajanni, 2003 62 Costanti e Variabili Una costante è un astrazione simbolica di un valore L associazione simbolo-valore non cambia mai durante l esecuzione Una variabile è un simbolo associato a un indirizzo fisico (L-VALUE) che contiene un valore (R-VALUE) L associazione simbolo-indirizzo non cambia mai durante l esecuzione, ma può cambiare l associazione indirizzo-valore Pertanto, nel caso di variabile, ad uno stesso simbolo possono corrispondere valori differenti in diversi momenti dell esecuzione del programma Attenzione R-VALUE può cambiare nel corso dell esecuzione L-VALUE è fissato (e non cambia durante l esecuzione) Informatica 1 - Michele Colajanni, 2003 63 6
Introduzione ai Tipi di dato Tipi di dato In C (come in tutti i linguaggi di programmazione) a ciascuna variabile e costante è associato anche il TIPO, ovvero la classe di valori che la costante o variabile può assumere nel corso dell esecuzione del programma (e quindi gli operatori applicabili al valore in essa contenuto). L associazione di un nome (di costante o di variabile) ad un tipo di dato non cambia mai durante l esecuzione del programma. Quali sono i tipi di dato ammissibili in C? Informatica 1 - Michele Colajanni, 2003 65 7
Tipi di Dato tipi di dato scalari strutturati puntatori predefiniti int char float double definiti dall'utente costruttori predefiniti enum array [] struct union definiti dall'utente Informatica 1 - Michele Colajanni, 2003 66 Tipi di Dato Primitivi ( base ) 4 tipi di dato primitivi char (caratteri) int (interi) float (reali) double (reali in doppia precisione) 4 qualificatori di tipo signed unsigned short long Signed e unsigned possono essere applicati solo ai tipi char e int Short può essere applicato solo a int Long può essere applicato a int e a double Informatica 1 - Michele Colajanni, 2003 67 8
In sintesi Questa classificazione dà origine a 12 tipi di dati semplici predefiniti: CHAR UNSIGNED CHAR SIGNED CHAR FLOAT DOUBLE LONG DOUBLE [SIGNED] SHORT [INT] [SIGNED] [INT] [SIGNED] LONG [INT] UNSIGNED SHORT [INT] UNSIGNED [INT] UNSIGNED LONG [INT] Informatica 1 - Michele Colajanni, 2003 68 Significato dei qualificatori SHORT e LONG condizionano lo spazio allocato dal compilatore per la memorizzazione delle variabili del tipo definito (Lo spazio effettivamente utilizzato dipende dalla macchina) SIGNED e UNSIGNED condizionano l uso che si può fare della memoria allocata In particolare, i qualificatori nelle loro combinazioni condizionano: L insieme dei valori assumibili da una variabile Il valore massimo e minimo Informatica 1 - Michele Colajanni, 2003 69 9
Una parentesi sulle classi di informazioni da codificare all interno del calcolatore (che in seguito sarà ripresa con più dettagli) Informazione alfanumerica Codice ASCII Numeri Rappresentazione decimale codificata Rappresentazione posizionale - interi positivi e negativi - frazionari Informatica 1 - Michele Colajanni, 2003 70 Codifica ASCII Il codice ASCII è non ridondante, perché i simboli codificati sono in numero pari alle configurazioni ottenibili con 7 cifre binarie. Ampiamente utilizzato in computer, stampanti, trasmissione dati, 000 001 010 011 100 101 110 111 0000 NUL DLE 0 @ P p 0001 SOH DC1! 1 A Q a q 0010 STX DC2 2 B R b r 0011 ETX DC3 # 3 C S c s 0100 EOT DC4 $ 4 D T d t 0101 ENQ NAK % 5 E U e u 0110 ACK SYN & 6 F V f v 0111 BEL ETB 7 G W g w 1000 BS CAN ( 8 H X h x 1001 HT EM ) 9 I Y i y 1010 LF SUB * : J Z j z 1011 VT ESC + ; K [ k { 1100 FF FS, < L \ l 1101 CR GS - = M ] m } 1110 SO RS. > N ^ n ~ 1111 SI US /? O _ o DEL Sono numeri interi positivi (necessario un byte) Informatica 1 - Michele Colajanni, 2003 71 10
Rappresentazione binaria La rappresentazione dei numeri usata nei calcolatori è quella binaria. Le cifre binarie prendono il nome di bit (Binary digit). Un numero binario intero è costituito da un vettore di bit. Il valore di B è dato da: B = b n-1 b 1 b 0 b i = {0, 1} V(B) = b n-1 2 n-1 + + b 1 2 1 + b 0 2 0 Un vettore di n bit consente di rappresentare 2 n numeri naturali nell intervallo da 0 a 2 n -1. Per rappresentare i numeri positivi e negativi si usano diversi sistemi Informatica 1 - Michele Colajanni, 2003 72 Da numero binario a numero decimale Valore decimale corrispondente al numero binario 1101 2? cifra 2 1 1 0 1 peso 2 3 2 2 2 1 2 0 valore 1 8 1 4 0 2 1 1 1101 2 = 1 2 3 + 1 2 2 + 0 2 1 + 1 2 0 = 13 10 Informatica 1 - Michele Colajanni, 2003 73 11
Da numero decimale a numero binario Per ottenere il valore binario di un numero intero codificato nel sistema decimale si procede utilizzando un metodo iterativo di successive divisioni per 2. Il resto delle divisioni fornisce le cifre del numerale binario (a partire dalla cifra meno significativa) 26 10 26 2 Cifra a destra (meno significativa) 0 13 26) 10 = 11010) 2 1 2 6 0 2 1 3 2 1 Cifra a sinistra (più significativa) Informatica 1 - Michele Colajanni, 2003 74 Unità di misura standard Byte (insieme di 8 bit) e suoi multipli Multipli 1 KiloByte = 1.024 byte x1024 = 1 MegaByte = 1.048.576 byte x1024 = 1 GigaByte = 1.073.741.824 byte x1024 = 1 TeraByte = 1.099.511.627.776 byte x1024 = 1 PetaByte =.. byte Abbreviazioni Kb = Kilobit Mb = Megabit Gb = Gigabit (per trasmissione dati) Unità di misura KB = KiloByte MB = MegaByte GB = GigaByte (per memorizzazione dati) Informatica 1 - Michele Colajanni, 2003 75 12
Parole chiave della lezione Linguaggio C Linguaggio imperativo Componenti: caratteri, identificatori, parole riservate, commenti Costanti e Variabili Tipi di dato scalari, strutturati, puntatori qualificatori Codifiche all interno del calcolatore numeri: codifica binaria caratteri: codifica ASCII + codifica binaria Informatica 1 - Michele Colajanni, 2003 76 13