Variabili e tipi di dato



Documenti analoghi
Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C

Tipi di dato-prima parte

Le variabili. Olga Scotti

Introduzione alla programmazione in C

Linguaggio C. Fondamenti. Struttura di un programma.

4 3 4 = 4 x x x 10 0 aaa

LINGUAGGI DI PROGRAMMAZIONE

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

Informazione analogica e digitale

Richiesta pagina PHP (es: index.php)

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

Allocazione dinamica della memoria - riepilogo

Appunti di informatica. Lezione 2 anno accademico Mario Verdicchio

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

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

SISTEMI DI NUMERAZIONE E CODICI

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

Linguaggi di programmazione

Algebra Booleana ed Espressioni Booleane

Parte 1. Vettori di bit - AA. 2012/13 1.1

Esercizi di programmazione in C

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

Informatica. Rappresentazione dei numeri Numerazione binaria

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

la scienza della rappresentazione e della elaborazione dell informazione

Esempi di algoritmi. Lezione III

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

Algoritmi e strutture dati. Codici di Huffman

Architettura degli Elaboratori I Esercitazione 1 - Rappresentazione dei numeri

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

Alcune regole di base per scrivere un programma in linguaggio C

LABORATORIO DI PROGRAMMAZIONE EDIZIONE 1, TURNO B

Sistemi di Numerazione Binaria NB.1

Inizializzazione, Assegnamento e Distruzione di Classi

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

LA RAPPRESENTAZIONE DELLE INFORMAZIONI

Breve riepilogo della puntata precedente:

Alcune nozioni di base di Logica Matematica

Laboratorio di Informatica

4. Operazioni aritmetiche con i numeri binari

Codifica: dal diagramma a blocchi al linguaggio C++

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

BIT? Cosa c è dietro a questo nome? Che cos è il bit? Perché si usa? Come si converte un numero binario?

Funzioni in C. Violetta Lonati


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

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

SISTEMI DI NUMERAZIONE IL SISTEMA DECIMALE

PROVA INTRACORSO TRACCIA A Pagina 1 di 6

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

La selezione binaria

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

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

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

Logica e codifica binaria dell informazione

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

= 1*2^7 + 1*2^6 + 0*2^5 + 1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 210

Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi

Elementi di Informatica e Programmazione

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

2. Codifica dell informazione

Informatica Generale 02 - Rappresentazione numeri razionali

Rappresentazione dell informazione Codifica Binaria

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

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l Ambiente e il Territorio

(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

RAPPRESENTAZIONE BINARIA DEI NUMERI. Andrea Bobbio Anno Accademico

ESERCIZI di FONDAMENTI DI INFORMATICA RAPPRESENTAZIONE DEI NUMERI

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

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

puntatori Lab. Calc. AA 2007/08 1

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Codifica binaria e algebra di Boole

la scienza della rappresentazione e della elaborazione dell informazione

Definizione di nuovi tipi in C

3. La sintassi di Java

Arduino: Programmazione

Alessandro Pellegrini

Elementi di informatica

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Un ripasso di aritmetica: Rappresentazione binaria - operazioni. riporti

dall argomento argomento della malloc()

Introduzione al linguaggio C Gli array

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Corso di Fondamenti di Informatica

2.12 Esercizi risolti

Linguaggio del calcolatore. Algebra di Boole AND, OR, NOT. Notazione. And e or. Circuiti e reti combinatorie. Appendice A + dispense

Algebra di Boole ed Elementi di Logica

Dispense di Informatica per l ITG Valadier

Fasi di creazione di un programma

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

I sistemi di numerazione

GESTIONE INFORMATICA DEI DATI AZIENDALI

Struttura di un programma Java

Javascript: il browser

Fondamenti di Programmazione

Lezioni di Matematica 1 - I modulo

Le variabili di Visual Basic consentono di memorizzare temporaneamente valori durante

Transcript:

Variabili e tipi di dato Tutte le variabili devono essere dichiarate, specificandone il tipo La dichiarazione deve precedere l uso Il tipo è un concetto astratto che esprime: L allocazione di spazio per la variabile Le operazioni permesse sulla variabile Perché dichiarare? per poter controllare il programma in compilazione int pippo; pippo = pippo+1; int beppe; beppe = 'a'; in realtà il C è tollerante e permissivo 32

Tipi predefiniti in C char, int, float e double (NO boolean) int i = 0; /* dichiarazione con inizializzazione */ char a; const float pi = 3.14; /* pi non è più modificabile */ double zeta = 1.33; Consiglio: inizializzare sempre esplicitamente le variabili Si migliora la leggibilità Non conviene fidarsi delle inizializzazioni implicite che l ambiente potrebbe effettuare 33

Variabili, costanti, inizializzazioni int int a; int b, c=0; /* Attenzione: a e b non inizializzate */ const int d=5; b = 11; a = d; /* OK: possiamo leggere le costanti */ d = a; /* KO: non possiamo modificarle */ 34

Studiamo meglio i tipi di dato Il tipo int Approssima il dominio degli interi Normalmente utilizza 1 parola Esistono anche short int e long int tipico: long 32 bit, short 16 bit e int 16 o 32 Lo standard ANSI richiede che spazio per short <= spazio per int <= spazio per long 96

Interi lunghi e corti Calcolatori tipo PC (con Windows) long int (32 bit, in C 2 ) int (16 bit, in C 2 ) signed char (8 bit, in C 2 ) unsigned long int (32 bit, in bin. nat.) unsigned int (16 bit, in bin. nat.) unsigned char (8 bit, in bin. nat.) In C i caratteri si possono usare come numeri interi! Calcolatori tipo WorkStation (con Unix/Linux) long int (64 bit, in C 2 ) int (32 bit, in C 2 ) short int (16 bit, in C 2 ) signed char (8 bit, in C 2 ) Tutto il resto va di conseguenza 97

I tipi float e double Approssimano i numeri razionali Le costanti si possono scrivere 315.779 3.73E-5 double di solito occupa più memoria di float tipicamente 4 byte per float e 8 byte per double (...esistono anche i long double, che devono occupare almeno tanto spazio quanto i double) 98

Cautele Attenzione ai confronti tra float float a, b;... if (a == b)... non ha senso, a causa delle approssimazioni nella memorizzazione!! 99

Il tipo char Di solito è rappresentato con un byte (8 bit) Consente quindi di rappresentare i caratteri ASCII I caratteri sono rappresentati da numeri interi e quindi tra essi è definito un ordinamento Esempio: il carattere '1' è rappresentato dall intero 49, il carattere 'A' dall intero 65, quindi, nell ordinamento, risulta '1' < 'A' Per le lettere dell alfabeto è stata scelta una codifica tale per cui l ordinamento dei codici ASCII coincide con l usuale ordinamento alfabetico: 'A'<'B' ecc. Lettere alfabeticamente adiacenti hanno codifiche adiacenti Le maiuscole sono codificate prima delle minuscole Quindi ad esempio 'A'<'a' ma anche 'Z'<'a' 100

Variabili, costanti, inizializzazioni char char a; char b, c = 'Q'; /* Le costanti di tipo carattere si indicano con ' */ const char d= 'q'; /* OK: d non sarà più modificato */ a = "q"; /* KO: "q" è una stringa, anche se di un solo carattere */ a = '\n'; /* OK: i caratteri di escape sono caratteri a tutti gli effetti */ b = "ps"; /* KO: non si possono assegnare stringhe ai char */ c = 'ps'; /* KO: 'ps' non è una costante valida, non ha senso */ a = 7 ; /* Che cosa succede? */ a = 7; /* Che cosa succede? */ 36

Vantaggi del concetto di tipo Si sa quanta memoria riservare alle variabile, in base al loro tipo int: di solito una parola; float: di solito due parole Il compilatore può rilevare errori di uso delle variabili un linguaggio è fortemente tipizzato se garantisce: correttezza delle istruzioni rispetto al tipo degli operandi, verificabile dal compilatore che non sorgano errori di tipo in esecuzione In linea di massima il C persegue la tipizzazione forte però è molto permissivo, infatti... 106

Conversioni di tipo Se in C un operando non è del tipo atteso subisce di solito una conversione automatica di tipo È detta anche cast implicito Si opera la conversione anziché segnalare l'errore A volte è accompagnata da un avvertimento (warning) Esempio int i; float f; la valutazione dell espressione i + f effettua prima la conversione di i in float e poi la somma 107

int n, m; float x; x = n + x; (n è convertito in float e poi sommato a x) n = x; x = n; Conversioni di tipo: esempi (x è troncato, ne sopravvive la parte intera) (n da int è convertito in (promosso a) float ) n = n / m; (il risultato della divisione è un intero) n = n / x; (n è convertito in float, poi si esegue la divisione, e infine il risultato è troncato a int ) x = n / x; (come sopra ma il risultato resta float ) x = n / m; (attenzione: la divisione tra int tronca (quoziente)) ESEMPIO DI CONVERSIONE ESPLICITA (cast esplicito): x = (float) n / m; 108

ATTENZIONE Il cast (implicito o esplicito che sia) non modifica il tipo della variabile o delle variabili coinvolte, ma solo il tipo associato al valore dell'espressione Le variabili in memoria continuano a essere del tipo dichiarato staticamente nella parte dichiarativa del programma 109

Ogni espressione ha un tipo È il tipo associato al risultato della valutazione Le espressioni si compongono di: variabili Il tipo è noto in base alla dichiarazione, e NON cambia costanti Il tipo è deducibile da come sono scritte 3 : int 3.0 : float '3' : char "3" : stringa impareremo che il tipo "stringa" è puntatore costante a char operatori Effettuano le opportune conversioni automatiche (congetturali e conservative) 110

Ogni espressione ha anche un valore Tutte le espressioni sono valutate, e hanno un valore Anche le condizioni e gli assegnamenti hanno un tipo e un valore!! Abbiamo già visto che gli operatori booleani valgono 0 o 1 ( x!= y ) può valere 0 o 1 (dipende dai valori di x e y) ( 3 == 3 ) vale certamente 1 ( 3 == 3 ) == 1 vale certamente 1 ( x!= x ) == 0 vale certamente 1 ( 3 == 4 ) == 1 vale certamente 0 Gli assegnamenti assumono il valore e il tipo della variabile assegnata Quindi, se li pensiamo come espressioni, si possono accodare x = (y = (z = (w = (q = 3)))); o anche x = y = z = w = q = 3; L assegnamento è un operatore associativo a destra Tutte le variabili risultano assegnate a 3; 111

ATTENZIONE Possiamo usare assegnamenti come condizioni e viceversa? Di solito però succede quando si sta commettendo un errore...! x = y == 3; /* Assegna a x il valore 0 o 1 e non modifica y */ if ( 3 = x ) /* Errore di sintassi (3 non è una variabile) */ Ma soprattutto... if ( x = 3 )... È SEMPRE VERO!!! (per ogni valore precedente di x) if ( x = 0 )... È SEMPRE FALSO!!! (per ogni valore precedente di x) if ( x = y )... equivale a scrivere x = y; if ( y!= 0 )... E, ancora peggio... while (! (x = 0) )... NON TERMINA MAI!!!! 112

Ancora conversioni In C i tipi sono ordinati in base alla precisione: char < short < int < long < float < double < long double Si consideri un operatore binario Se un operando è long double, converti l altro a long double, altrimenti Se uno è double, converti l altro in un double, altrimenti Se uno è float, converti l altro a float, altrimenti Converti char e short a int Quindi, se un operando è long, converti l altro a long Si converte l'operando meno ricco nel tipo di quello più ricco (o più largo, o più preciso ) il tipo più preciso domina nella conversione il risultato è un valore del tipo più preciso 113

Ancora conversioni Si consideri un assegnamento Il valore dell espressione della parte destra è convertito nel tipo che sta a sinistra dell' = i char sono convertiti in int interi lunghi (p.es. int) sono convertiti in int più corti (p. es. char) troncando bit float x; int i; sia x = i; che i = x; causano conversioni quando un double è convertito in un float dipende dall implementazione se si verifica troncamento o arrotondamento (IEEE 754 docet) 114

Ancora sulla dichiarazione dei dati: le variabiil const const int modelloauto = 159; const float pigreco = 3.14159265; Si inizializza in fase di dichiarazione Non si può più modificare Causa allocazione di memoria È una variabile blindata Esiste anche un altro modo di definire un valore una volta per tutte la direttiva #define 115

Definizione di macro: #define #define PIGRECO 3.141592 La #define è una direttiva al preprocessore Non è terminata dal punto e virgola una direttiva al precompilatore non è un istruzione C Non causa allocazione di memoria PIGRECO è una "costante simbolica" Il simbolo PIGRECO viene sostituito nel codice con il valore 3.14 prima che il programma sia compilato Si dice che PIGRECO è una macro-definizione (o semplicemente una MACRO) Per convenzione, le costanti definite tramite macro sono interamente maiuscole (es: TIPICA_COSTANTE) 116

Definizione di macro: #define #define VERO 1 #define FALSO 0 printf("%d %d %d",falso,vero,vero+1); > 0 1 2 Si possono costruire MACRO a partire da altre MACRO, e una macro può anche essere dotata di uno o più parametri: #define AREACERCHIO(X) (PIGRECO (X) (X)) area = AREACERCHIO(4); Diventa area = (3.141592 (4) (4)); 117