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

Documenti analoghi
IL LINGUAGGIO C TIPI DI DATO

Espressioni ed operatori in C

Espressioni ed operatori in C

IL LINGUAGGIO C Un elaboratore è un manipolatore di simboli (segni) L'architettura fisica di ogni elaboratore è intrinsecamente capace

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

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

LINGUAGGI DI PROGRAMMAZIONE!

IL PROBLEMA DEL PROGETTO

IL PROBLEMA DEL PROGETTO IL PROBLEMA DEL PROGETTO IL PROBLEMA DEL PROGETTO METODOLOGIE DI PROGETTO METODOLOGIA TOP-DOWN METODOLOGIA BOTTOM-UP

IL LINGUAGGIO C Un elaboratore è un manipolatore di simboli (segni) L'architettura fisica di ogni elaboratore è intrinsecamente capace

Linguaggi di programmazione

Tipi di dato primitivi

IL LINGUAGGIO C Un elaboratore è un manipolatore di simboli (segni) L'architettura fisica di ogni elaboratore è intrinsecamente capace

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

Espressioni in Linguaggio C

Lab 02 Tipi semplici in C

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

Lab 02 Tipi semplici in C

Lab 02 Tipi semplici in C

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio

Lab 02 Tipi semplici in C

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Linguaggio C: Espressioni

Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double

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

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

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 5 31/10/2013

Informatica AA 2005/06. Programmazione M.A. Alberti. Operatori in Java 1. Operatori in Java. Espressioni aritmetiche. Espressioni booleane

Informatica 2 modulo C Massimo Callisto De Donato

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

Fondamenti di programmazione parte 2. Elementi di informatica IGLP

Linguaggio C: Espressioni

Programmazione Procedurale in Linguaggio C++

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

Parte seconda: espressioni, operandi e operatori.

Laboratorio di Informatica I

Espressioni. Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica!

Settimana n.4 Obiettivi Contenuti

Linguaggio C: Espressioni

Introduzione alla programmazione in linguaggio C

Il linguaggio C Variabili e tipi di dato primitivi

Tipi di dato, Alessandra Giordani Lunedì 7 maggio 2011

1

Dichiarazioni e tipi predefiniti nel linguaggio C

Informatica. Stefano Lodi. 16 novembre in linguaggio C

14. Tipi e conversioni di tipo. Andrea Marongiu Paolo Valente

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

Il linguaggio C. Caratteristiche generali

Fondamenti di Informatica T-1 Modulo 2

Programmazione Procedurale in Linguaggio C++

Breve storia e caratteristiche

Corso di JavaScript. Prerequisiti. B1 Tipi di dato e operatori. Concetto di variabile, espressione e tipo di dato

#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main()

Corso di PHP. Prerequisiti. 2.2 Operatori. Conoscenza HTML Tecnica della programmazione Principi di programmazione web. M. Malatesta 2.

Fondamenti di Informatica T-1 Modulo 2

Struttura di un programma C++

Primi esempi di programmi. Il tipo int Le variabili Altri tipi interi Operatori di assegnazione

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione

Tipi interi lo standard (1)

Laboratorio di Informatica I

Costanti e Variabili

Lezione 6 Introduzione al C++ Mauro Piccolo

Tipi di dato semplici

Fondamenti di Informatica T-1 Modulo 2

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

LINGUAGGI DI PROGRAMMAZIONE

STRUTTURA DI UN PROGRAMMA C

Il linguaggio C Istruzione di assegnamento e operatori

Breve storia e caratteristiche

Programmazione Procedurale in Linguaggio C++

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

Università degli Studi di Milano

Introduzione alle operazioni di I/O con formato e tipi primitivi

Conversioni fra Tipi di Dati. Luca Abeni

Indice. Ordine di valutazione. Espressioni in C++ Le espressioni in C++ (CAP 4) Alberto Garfagnini e Marco Mazzocco A.A. 2014/ * 20 / 2

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 meccanica

Corso sul linguaggio Java

Esercizi Programmazione I

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

Linguaggio C Espressioni e operatori

I/O da tastiera + Alessandra Giordani Lunedì 2 maggio

Conversioni fra Tipi di Dati. Informatica 1 / 15

Struttura dei programmi e Variabili

Tipi di dato semplici

Tipi di dato e variabili. Walter Didimo

Fondamenti di Informatica T-1 Modulo 2

Assegnamento. Ricordiamo che l esecuzione di x = exp corrisponde a: Esempio: somma = 5; a = 2; somma = somma + a; somma 5 = 7 a 2 2

Espressioni. Espressioni. Valutazione di un espressione. Espressioni semplici

$QDOLVLGHOSURJUDPPDTXDGUDWR

Transcript:

IL LINGUAGGIO C Un elaboratore è un manipolatore di simboli (segni) L'architettura tt fisica i di ogni elaboratore è intrinsecamente capace di trattare vari domini i di dati, detti tipi i primitivi iti i dominio dei numeri naturali e interi dominio dei numeri reali (con qualche approssimazione) dominio i dei caratteri dominio delle stringhe di caratteri TIPI DI DATO Il concetto di tipo di dato viene introdotto tt per raggiungere due obiettivi: esprimere in modo sintetico la loro rappresentazione in memoria, e un insieme di operazioni ammissibili permettere di effettuare controlli statici (al momento della compilazione) sulla correttezza del programma 1 2 TIPI DI DATO PRIMITIVI IN C caratteri char caratteri ASCII unsigned char Dimensione di int e unsigned int non fissa. Dipende dal compilatore interi con segno short (int) -32768... 32767 (16 bit) int??????? long (int) -2147483648... 2147483647 (32 bit) naturali (interi senza segno) unsigned short (int) 0... 65535 (16 bit) unsigned (int)??????? unsigned long (int) 0... 4294967295 (32 bit) 3 TIPI DI DATO PRIMITIVI IN C reali float singola precisione (32 bit) numeri rappresentabili da 10-38 a 10 38 circa double doppia precisione (64 bit) boolean precisione 15 cifre decimali; numeri rappresentabili da 10-308 a10 308 circa non esistono in C come tipo a sé stante si usano gli interi: zero indica FALSO ogni altro valore indica VERO convenzione: suggerito utilizzare uno per VERO 4

COSTANTI DI TIPI PRIMITIVI interi i (in varie basi di rappresentazione) base 2 byte 4 byte decimale 12 70000, 12L ottale 014 0210560 esadecimale 0xFF 0x11170 reali in doppia precisione (default) 24.0 2.4E1 240.0E-10E in singola precisione 24.0F 2.4E1F 240.0E-1F 5 caratteri COSTANTI DI TIPI PRIMITIVI singolo carattere racchiuso fra apici 'A' 'C' '6' caratteri speciali: '\n' '\t' '\'' '\\' '\"' 6 STRINGHE Una stringa è una sequenza di caratteri delimitata da virgolette "ciao" "Hello\n" In C le stringhe sono semplici sequenze di caratteri di cui l ultimo, sempre presente in modo implicito, è '\0' "ciao" = {'c', 'i',, 'a',, 'o',, '\0'} } ESPRESSIONI Il C è un linguaggio basato su espressioni Una espressione è una notazione che denota un valore mediante un processo di valutazione Una espressione può essere semplice o composta (tramite aggregazione di altre espressioni) 7 8

ESPRESSIONI SEMPLICI Quali espressioni elementari? costanti A 23.4-3 ciao... simboli di variabile x pippo pigreco. simboli di funzione f(x) concat( alfa, beta )... 9 OPERATORI ED ESPRESSIONI COMPOSTE Ogni linguaggio introduce un insieme di operatori che permettono di aggregare altre espressioni i (operandi) per formare espressioni composte con riferimento a diversi domini / tipi di dato (numeri, testi, ecc.) Esempi 2 + f(x) 4 * 8-3 % 2 + arcsin(0.5) strlen(strcat(buf, alfa )) a && (b c)... 10 CLASSIFICAZIONE DEGLI OPERATORI OPERATORI ARITMETICI Due criteri di classificazione: in base al tipo degli operandi in base al numero degli operandi in base al tipo degli operandi aritmetici relazionali logici condizionali... in base al numero di operandi unari binari ternari... operazione operatore C inversione di segno unario - somma binario + differenza binario - moltiplicazione binario * divisione fra interi binario / divisione fra reali binario / modulo (fra interi) binario % NB: la divisione a/b è fra interi se sia a sia b sono interi, è fra reali in tutti gli altri casi 11 12

OPERATORI: OVERLOADING In C (come in Pascal, Fortran e molti altri linguaggi) operazioni primitive associate a tipi diversi possono essere denotate con lo stesso simbolo. Ad esempio, le operazioni aritmetiche su reali o interi Inrealtà l operazione è diversa e può produrre risultati diversi int X,Y; int X; float Y; se X = 10 e Y = 4; se X = 10 e Y = 4.0; X/Y vale 2 X/Y vale 2.5 float X,Y; se X = 10.0 e Y = 4.0; X/Y vale 2.5 13 CONVERSIONI DI TIPO In C è possibile combinare tra di loro operandi di tipo diverso: espressioni i omogenee: tuttitti gli operandi sono dello stesso tipo espressioni eterogenee: gli operandi sono di tipi diversi Regola adottata in C: sono eseguibili le espressioni eterogenee in cui tutti i tipi referenziati risultano compatibili (ovvero che risultano omogenei dopo l applicazione della regola automatica ti di conversione implicita it di tipo del C) 14 COMPATIBILITÀ DI TIPO Consiste nella possibilità di usare, entro certi limiti, oggetti di un tipo al posto di oggetti di un altro tipo Un tipo T1 è compatibile con un tipo T2 se il dominio D1 di T1 è contenuto nel dominio D2 di T2 int è compatibile con float perché Z R ma float non è compatibile con int COMPATIBILITÀ DI TIPO - NOTA 3 / 4.2 è una divisione fra reali, in cui il primo operando è convertito automaticamente da int a double 3 % 4.2 è una operazione non ammissibile, perché 4.2 non può essere convertito in int 15 16

CONVERSIONI DI TIPO Data una espressione ess e x op y 1. Ogni variabile di tipo char o short viene convertita nel tipo int; 2. Se dopo l esecuzione del passo 1 l'espressione è ancora eterogenea, rispetto alla seguente gerarchia int < long < float < double < long double si converte temporaneamente l'operando di tipo inferiore al tipo superiore (promotion) 3. A questo punto l'espressione è omogenea e viene eseguita l'operazione specificata. Il risultato è di tipo uguale a quello prodotto dall'operatore effettivamente eseguito (in caso di overloading, quello più alto gerarchicamente) 17 int x; char y; double r; (x+y) / r CONVERSIONI DI TIPO La valutazione dell'espressione espressione procede da sinistra verso destra Passo 1 (x+y) y viene convertito nell'intero corrispondente viene applicata la somma tra interi risultato intero tmp Passo 2 tmp / r tmp viene convertito nel double corrispondente viene applicata la divisione tra reali risultato reale 18 COMPATIBILITÀ DI TIPO In un assegnamento, l'identificatore di variabile e l espressione devono essere dello stesso tipo Nel caso di tipi diversi, se possibile si effettua la conversione implicita, altrimenti l assegnamento può generare perdita di informazione int x; char y; double r; x = y; /* char -> int*/ x = y+x; r = y; /* char -> int -> double*/ x = r; /* troncamento*/ COMPATIBILITÀ IN ASSEGNAMENTO In generale, negli assegnamenti sono automatiche le conversioni di tipo che non provocano perdita d informazione Espressioni che possono provocare perdita di informazioni non sono però illegali Esempio int i=5; float f=2 2.71F;; double d=3 3.1415; f = f+i; /* int convertito in float */ i = d/f; /* double convertito in int!*/ f = d; /* arrotondamento o troncamento */ 19 Possibile Warning: conversion may lose significant digits 20

CAST In qualunque espressione è possibile forzare una particolare conversione utilizzando l'operatore di cast Esempi ( <tipo> ) <espressione> int i=5; long double x=7.77; 77; double y=7.1; i = (int) sqrt(384); x = (long double) y*y; // i i = (int) x % (int)y; //non necessario ESEMPIO main() { /* parte dichiarazioni variabili */ int X,Y; unsigned int Z; float SUM; /* segue parte istruzioni */ X=27; Y=343; 3 Z = X + Y -300; X = Z / 10 + 23; Y = (X + Z) / 10 * 10; /* qui X=30, Y=100, Z=70 */ X = X + 70; Y = Y % 10; Z = Z + X -70; SUM = Z * 10; /* qui X=100, Y=0, Z=100, SUM =1000.0*/ } 21 22 OPERATORI RELAZIONALI Sono tutti operatori binari: relazione C uguaglianza == diversità!= maggiore di > minore di < maggiore o uguale a >= minore o uguale a <= OPERATORI RELAZIONALI Attenzione: non esistendo il tipo boolean, in C le espressioni relazionali denotano un valore intero 0 denota falso (condizione non verificata) 1 denota vero (condizione i verificata) 23 24

OPERATORI LOGICI connettivo logico operatore C not (negazione) unario! and binario && or binario Anche le espressioni logiche denotano un valore intero da interpretare come vero (1) o falso (0) OPERATORI LOGICI Anche qui sono possibili espressioni miste, utili in casi specifici 5 && 7 0 33!5 Valutazione in corto-circuito la valutazione dell espressione cessa appena si è in grado di determinare il risultato il secondo operando è valutato solo se necessario 25 26 VALUTAZIONE IN CORTO CIRCUITO 22 x già vera in partenza perché 22 è vero 0 && x già falsa in partenza perché 0 è falso a && b && c se a&&b è falso, il secondo && non viene neanche valutato a b c se a b è vero, il secondo non viene neanche valutato 27 ESPRESSIONI CONDIZIONALI Una espressione condizionale è introdotta dall operatore ternario condiz? espr1 : espr2 L espressione denota: o il valore denotato da espr1 o quello denotato da espr2 in base al valore della espressione condiz se condiz è vera, l espressione nel suo complesso denota il valore denotato da espr1 se condiz è falsa, l espressione nel suo complesso denota il valore denotato da espr2 28

ESPRESSIONI CONDIZIONALI: ESEMPI ESPRESSIONI CONCATENATE 3? 10 : 20 denota sempre 10 (3 è sempre vera) x? 10 : 20 denota 10 se x è vera (diversa da 0), oppure 20 se x è falsa (uguale a 0) (x>y)? x : y denota il maggiore fra x e y 29 Una espressione concatenata è introdotta dall operatore di concatenazione (la virgola) espr1, espr2,, esprn tutte le espressioni vengono valutate (da sinistra a destra) l espressione esprime il valore denotato da esprn Supponiamo che i valga 5 k valga 7 Allora l espressione: i + 1, k - 4 denota il valore denotato da k-4, cioè 3 30 OPERATORI INFISSI, PREFISSI E POSTFISSI Le espressioni composte sono strutture formate da operatori applicati a uno o più operandi Ma dove posizionare l operatore rispetto ai suoi operandi? OPERATORI INFISSI, PREFISSI E POSTFISSI Tre possibili scelte: prima notazione prefissa Esempio: + 3 4 dopo notazione postfissa Esempio: 3 4 + in mezzo notazione o infissa Esempio: 3 + 4 31 È quella a cui siamo abituati, perciò è adottata anche in C 32

OPERATORI INFISSI, PREFISSI E POSTFISSI Le notazioni prefissa e postfissa non hanno problemi di priorità e/o associatività degli operatori non c è mai dubbio su quale operatore vada applicato a quali operandi La notazione infissa richiede regole di priorità e associatività per identificare univocamente quale operatore sia applicato a quali operandi OPERATORI INFISSI, PREFISSI E POSTFISSI Notazione prefissa: * + 4 5 6 si legge come (4 + 5) * 6 denota quindi 54 Notazione postfissa: 4 5 6 + * si legge come 4 * (5 + 6) denota quindi 44 33 34 PRIORITÀ DEGLI OPERATORI ASSOCIATIVITÀ DEGLI OPERATORI PRIORITÀ: specifica l ordine di valutazione degli operatori quando in una espressione compaiono operatori (infissi) diversi Esempio: 3 + 10 * 20 si legge come 3 + (10 * 20) perché l operatore * è prioritario rispetto a + NB: operatori diversi possono comunque avere uguale priorità 35 ASSOCIATIVITÀ: specifica l ordine di valutazione degli operatori quando in una espressione compaiono operatori (infissi) di uguale priorità Un operatore può quindi essere associativo a sinistra o associativo a destra Esempio: 3-10 + 8 si legge come (3-10) + 8 perché gli operatori - e + sono equiprioritari e associativi a sinistra 36

PRIORITÀ E ASSOCIATIVITÀ Priorità e associatività predefinite possono essere alterate mediante l uso di parentesi Esempio: (3 + 10) * 20 denota 260 (anziché 203) Esempio: 3 - (10 + 8) denota -15 (anziché 1) INCREMENTO E DECREMENTO Gli operatori di incremento e decremento sono usabili in due modi come pre-operatori: ++v prima incremento e poi uso nell espressione come post-operatori: v++ prima uso nell espressione poi incremento Formule equivalenti: v = v + 1; v +=1; ++v; v++; 37 38 CHE COSA STAMPA? main() Soluzione: { int c; c=5; printf( %d\n,c); 5 printf( %d\n,c++); 5 printf( %d\n\n,c); 6 c=5; printf( %d\n,c); 5 printf( %d\n,++c); 6 printf( %d\n,c); } 6 39 ESEMPI int i, k = 5; i = ++k /* i vale 6, k vale 6 */ int i, k = 5; i = k++ /* i vale 5, k vale 6 */ int i=4, j, k = 5; j = i + k++; /* j vale 9, k vale 6 */ int j, k = 5; j = ++k - k++; /* DA NON USARE */ /* j vale 0, k vale 7 */ 40

RIASSUNTO OPERATORI DEL C (1) Priorità Operatore Simbolo Associatività 1 (max) chiamate a () a sinistra funzione [] ->. selezioni 2 operatori unari: a destra op. negazione! ~ op. aritmetici unari + - op. incr. / decr. ++ -- op. indir. e deref. & * op. sizeof sizeof 3 op. moltiplicativi * / % a sinistra 4 op. additivi + - a sinistra 41 RIASSUNTO OPERATORI DEL C (2) Priorità Operatore Simbolo Associatività 5 op. di shift >> << a sinistra 6 op. relazionali < <= > >= a sinistra 7 op. uguaglianza ==!= a sinistra i 8 op. di AND bit a bit & a sinistra 9 op. di XOR bit a bit ^ a sinistra 10 op. di OR bit a bit a sinistra 11 op. di AND logico && a sinistra 12 op. di OR logico a sinistra 13 op. condizionale?...: a destra 14 op. assegnamento = a destra e sue varianti += -= *= /= %= &= ^= = <<= >>= 15 (min) op. concatenazione, a sinistra 42