Fondamenti di C++ Input/Output di base

Похожие документы
Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

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

La sintassi del C APPENDICE H

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

ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi seconde

#include <iostream> // libreria che gestisce flusso di input e output. using namespace std; // uso di librerie standard del C++

Il linguaggio C. Notate che...

Lezione 6 Introduzione al C++ Mauro Piccolo

Alfabeto ed elementi lessicali del linguaggio C

Sommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C

Laboratorio di programmazione

Qualsiasi programma in C++ segue lo schema:

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

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

Linguaggio C - sezione dichiarativa: costanti e variabili

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

Espressioni logiche. Espressioni logiche. Operatori logici. Operatori logici. Operatori logici. Espressioni Logiche e Istruzione di Test

Capitolo 2 Introduzione alla programmazione in C

LINGUAGGI DI PROGRAMMAZIONE!

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Costanti e Variabili

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Le basi del linguaggio Java

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

Struttura dei programmi C

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

Introduzione a Matlab

Le strutture di controllo in C++

IL LINGUAGGIO C TIPI DI DATO

Introduzione al Linguaggio C

2.1 Linguaggio di Programmazione C++ (I)

Tipi di dato e istruzioni elementari in C++

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Introduzione alla programmazione in C++

Strutture dati e loro organizzazione. Gabriella Trucco

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

Appunti, esempi ed esercizi sui linguaggi C/C++

Fondamenti di Programmazione. Antonio Pescapè e Marcello Esposito Parte Quinta v1.0

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

Programmazione web lato client con JavaScript. Marco Camurri 1

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Variabili. Tipi di dati di base. Variabili. Variabili

Fondamenti di Informatica

Informatica (A-K) 7. Linguaggio C - 1

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...

Esercitazione 11. Liste semplici

Corso Programmazione 1 Capitolo 01: Concetti Elementari

Lezione 8 Struct e qsort

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

Dati aggregati. Violetta Lonati

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

Alfabeto ed elementi lessicali del linguaggio C

Array multidimensionali e stringhe

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

STRUTTURE DI CONTROLLO DEL C++

Programmazione in Java (I modulo)

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Programmazione con il linguaggio LibreOffice Basic

Транскрипт:

Università della Calabria Corso di Laurea in Ingegneria Elettronica Programmazione Orientata agli Oggetti A.A. 2006/2007 Fondamenti di C++ Paolo Trunfio * * DEIS, Università della Calabria http://si.deis.unical.it/~trunfio Input/Output di base La libreria standard iostream fornisce le operazioni di base per l input e per l output. #include <iostream> using namespace std; int main() { int a, b; cout << "Primo numero: "; cin >> a; cout << "Secondo numero: "; cin >> b; int somma = a+b; cout << "La somma dei due numeri e' " << somma << endl; Programmazione Orientata agli Oggetti 2.2 Paolo Trunfio DEIS, UNICAL

Commenti Sono disponibili due tipi di commento: commenti di una sola riga e commenti multiriga. I commenti di una sola riga iniziano con la doppia barra (//) e terminano con la fine della riga. I commenti multilinea iniziano con la sequenza /* e terminano con la sequenza */, e possono estendersi su più righe. Esempi: int a = 4; // commento di una sola riga int b = 8; /* esempio di commento multiriga */ Programmazione Orientata agli Oggetti 2.3 Paolo Trunfio DEIS, UNICAL Tipo bool char unsigned char short unsigned short int unsigned int long unsigned long float double long double Numero di bit * 8 8 8 16 16 32 32 32 32 32 64 96 Tipi predefiniti Valori rappresentati * Booleani: false e true Caratteri ASCII o interi: [-128, 127] Caratteri ASCII o interi: [0, 255] Interi: [-32768, 32767] Interi: [0, 65535] Interi: [-2147483648, 2147483647] Interi: [0, 4294967295] Interi: [-2147483648, 2147483647] Interi: [0, 4294967295] Reali (7 cifre significative): [-3.4e+38, +3.4e+38] Reali (15 cifre signif.): [-1.8e+308, +1.8e+308] Reali (19 cifre signif.): [-1.2e+4932, +1.2e+4932] * Dipendente dal sistema: i dati riportati sono riferiti ad un sistema a 32 bit. Programmazione Orientata agli Oggetti 2.4 Paolo Trunfio DEIS, UNICAL

Tipi signed I tipi interi char, short, int e long possono essere esplicitamente dichiarati signed (con segno): signed char signed short signed int signed long Il termine signed per short, int e long viene generalmente omesso, in quanto questi tipi sono sempre con segno, a meno che non si specifichi in modo esplicito che sono unsigned. Il tipo signed char è invece utilizzato in alcune implementazioni nelle quali il tipo char è implementato come un unsigned char. Programmazione Orientata agli Oggetti 2.5 Paolo Trunfio DEIS, UNICAL Nomi di tipo estesi I tipi short e long possono essere considerati due varianti del tipo int. In particolare, il termine short è un abbreviazione di short int, mentre long è un abbreviazione di long int. Tenendo conto anche delle varianti signed e unsigned, valgono le seguenti equivalenze tra i nomi dei tipi: short = short int = signed short int int = signed int long = long int = signed long int unsigned short = unsigned short int unsigned long = unsigned long int La versione abbreviata è preferibile, anche se i nomi di tipo estesi sono talvolta utilizzati. Programmazione Orientata agli Oggetti 2.6 Paolo Trunfio DEIS, UNICAL

L operatore sizeof La dimensione di un oggetto o di un tipo può essere ottenuta mediante l operatore sizeof. Il valore restituito da sizeof è un intero senza segno che esprime la dimensione come multiplo della dimensione di un char. cout << sizeof(char); // 1 (per definizione) cout << sizeof(int); // 4 cout << sizeof(unsigned int); // 4 cout << sizeof(long double); // 12 long a; cout << sizeof(a); // 4 Programmazione Orientata agli Oggetti 2.7 Paolo Trunfio DEIS, UNICAL Relazione tra le dimensioni dei tipi predefiniti Sono definite le seguenti relazioni tra le dimensioni dei tipi predefiniti: 1 = sizeof(char) sizeof(short) sizeof(int) sizeof(long) 1 sizeof(bool) sizeof(long) sizeof(float) sizeof(double) sizeof(long double) Inoltre, la dimensione di un tipo con segno o senza segno è identica: sizeof(t) = sizeof(signed T) = sizeof(unsigned T) dove T può essere char, short, int o long. Programmazione Orientata agli Oggetti 2.8 Paolo Trunfio DEIS, UNICAL

Tipo bool Una variabile di tipo bool può assumere i valori false e true, ed è utilizzata per esprimere il risultato di un operazione logica. bool a; a = true; if (a == true) // if (a) cout << "vero"; Le variabili booleane possono essere convertite in variabili intere: false corrisponde a 0 e true corrisponde a 1. Allo stesso modo le variabili intere possono essere convertite in variabili booleane: 0 è convertito in false e qualsiasi intero diverso da 0 è convertito in true. bool b = 5; // 5 è diverso da 0, quindi b assume il valore true int c = b; // b è true, quindi c assume il valore 1 Programmazione Orientata agli Oggetti 2.9 Paolo Trunfio DEIS, UNICAL Tipo char Una variabile di tipo char può contenere un carattere o un intero. I caratteri ammessi sono quelli definiti dallo standard ASCII, che comprende gran parte dei caratteri della tastiera. char a = 'P'; // assegna il carattere 'P' alla variabile a cout << a << " " << int(a) << endl; // P 80 char b = 84; // assegna l intero 84 alla variabile b cout << b << " " << int(b) << endl; // T 84 b = b + 42; // 126 cout << char(b) << endl; // ~ In alcune implementazioni il tipo char è senza segno (come l unsigned char). In tal caso è necessario utilizzare il tipo signed char per poter contenere i valori da -128 a 127. Programmazione Orientata agli Oggetti 2.10 Paolo Trunfio DEIS, UNICAL

Caratteri speciali Carattere \n \t \b \a \\ \" \0 Funzione Ritorno a capo Tabulazione orizzontale Cancellazione carattere precedente Allarme Barra Doppio apice Terminazione stringa cout << "1\t2\t3\t4\t5\t6\n"; // 1 2 3 4 5 6 cout << "Corso di \"Programmazione Orientata agli Oggetti\"" << endl; // Corso di "Programmazione Orientata agli Oggetti" Programmazione Orientata agli Oggetti 2.11 Paolo Trunfio DEIS, UNICAL Costanti intere I numeri interi possono essere rappresentati in notazione decimale, esadecimale e ottale. Un numero che inizia con 0x è considerato esadecimale, mentre un numero che inizia per 0 è considerato ottale. Esempi: decimale: 0 3 5 75 4788 esadecimale: 0x0 0x3 0x5 0x4b 0x12b4 ottale: 00 03 05 0113 011264 E possibile indicare esplicitamente il tipo di una costante intera utilizzando i suffissi U o u per indicare unsigned ed L o l per indicare long. Esempi: ottale 77 unsigned: 077u 077U decimale 3 unsigned long: 3ul 3uL 3Ul 3UL Programmazione Orientata agli Oggetti 2.12 Paolo Trunfio DEIS, UNICAL

Costanti in virgola mobile Di default, un numero in virgola mobile è di tipo double. Per indicare esplicitamente che un numero è float si usa il suffisso F o f; per indicare che un numero è long double si usa il suffisso L o l. Esempi di numeri double: 3.14.99 1.0 1. 3.575e12-3.575E-12 Esempi di numeri float e long double: 3.14F.99f 1.0L 1.l 3.575e12L -3.575E-12f Lo spazio occupato da una costante numerica dipende dal tipo: cout << sizeof(3.14) << endl; // 8 cout << sizeof(3.14f) << endl; // 4 cout << sizeof(3.575e12) << endl; // 8 cout << sizeof(3.575e12l) << endl; // 12 Programmazione Orientata agli Oggetti 2.13 Paolo Trunfio DEIS, UNICAL Il tipo long long In alcuni sistemi è disponibile il tipo aggiuntivo long long (o long long int), utilizzato per rappresentare numeri interi con un intervallo più esteso del tipo long. Su un sistema a 32 bit un long long ha generalmente una dimensione di 64 bit, ed è in grado di rappresentare i numeri interi appartenenti al seguente intervallo: [-9223372036854775808, 9223372036854775807] Il tipo senza segno unsigned long long (o unsigned long long int) può rappresentare i numeri interi appartenente all intervallo: [0, 18446744073709551615] Il suffisso LL o ll può essere usato per indicare in modo esplicito che il tipo di un numero intero è long long. Programmazione Orientata agli Oggetti 2.14 Paolo Trunfio DEIS, UNICAL

Variabili e costanti main () { int a; cout << a; // attenzione: valore indeterminato a = 5; cout << a; // 5 double b = 3.141592; const int c = 10; c = 20; // errore: modifica di una costante const int d = 3*4; // ok const int e; // errore: costante non inizializzata Programmazione Orientata agli Oggetti 2.15 Paolo Trunfio DEIS, UNICAL Costanti in C In C le costanti si dichiarano mediante la direttiva al preprocessore define: #include <iostream> #define N 3575 using namespace std; int main() { cout << N + N << endl; // 7150 cout << N * 3 << endl; // 10725 In questo esempio si definisce una costante senza tipo N uguale a 3575. Il preprocessore sostituisce la costante N con il numero 3575 ovunque la trovi nel programma. In C++ l uso della direttiva define per dichiarare costanti, anche se ammesso, dovrebbe essere evitato. Programmazione Orientata agli Oggetti 2.16 Paolo Trunfio DEIS, UNICAL

Variabili globali int a; // variabile globale: inizializzata al valore di default 0 int b = 7; // variabile globale inizializzata esplicitamente main () { cout << a; // 0 b = b + 3; cout << b; // 10 int c; // non inizializzata cout << c; // valore indeterminato Le variabili globali non inizializzate esplicitamente assumono il valore di default. Il valore di default delle variabili numeriche è 0. Il valore di default delle variabili booleane è false. Programmazione Orientata agli Oggetti 2.17 Paolo Trunfio DEIS, UNICAL Operatori aritmetici Operatore Descrizione expr expr + expr expr expr expr * expr expr / expr expr % expr lvalue++ lvalue-- ++lvalue --lvalue meno unario addizione sottrazione moltiplicazione divisione modulo incremento postfisso decremento postfisso incremento prefisso decremento prefisso Programmazione Orientata agli Oggetti 2.18 Paolo Trunfio DEIS, UNICAL

Operatori relazionali Operatore Descrizione expr < expr expr <= expr expr > expr expr >= expr expr == expr expr!= expr! expr expr && expr expr expr minore minore o uguale maggiore maggiore o uguale uguale diverso NOT AND OR Programmazione Orientata agli Oggetti 2.19 Paolo Trunfio DEIS, UNICAL Operatori bit a bit Operatore Descrizione expr & expr expr expr expr ^ expr ~expr expr << expr expr >> expr AND bit a bit OR bit a bit XOR bit a bit complemento scorrimento a sinistra scorrimento a destra unsigned short a = 3; // 0000000000000011 unsigned short b = 17; // 0000000000010001 unsigned short c = a b; // 0000000000010011 cout << c << endl; // 19 unsigned short d = c << 1; // 0000000000100110 cout << d << endl; // 38 unsigned short e = c << 2; // 0000000001001100 cout << e << endl; // 76 Programmazione Orientata agli Oggetti 2.20 Paolo Trunfio DEIS, UNICAL

Operatori di assegnamento Operatore lvalue = expr lvalue += expr lvalue = expr lvalue *= expr lvalue /= expr lvalue %= expr lvalue &= expr lvalue = expr lvalue ^= expr lvalue ~= expr lvalue <<= expr lvalue >>= expr Descrizione assegnamento semplice addizione e assegnamento sottrazione e assegnamento moltiplicazione e assegnamento divisione e assegnamento modulo e assegnamento AND e assegnamento OR e assegnamento XOR e assegnamento complemento e assegnamento scorrimento a sinistra e assegnamento scorrimento a destra e assegnamento Programmazione Orientata agli Oggetti 2.21 Paolo Trunfio DEIS, UNICAL Typedef La parola chiave typedef consente di definire un nuovo nome per un tipo già esistente: typedef int integer; // integer è un sinonimo di int integer a = 5; int b = 4+a; Il meccanismo del typedef è impiegato anche per definire tipi di sistema utilizzati in molte funzioni e classi standard. Per esempio un size_type è un intero senza segno utilizzato per le variabili contenenti dimensioni o indici: typedef unsigned long size_type; // size_type = unsigned long L operatore sizeof, ad esempio, restitituisce un valore di tipo size_type. Programmazione Orientata agli Oggetti 2.22 Paolo Trunfio DEIS, UNICAL

Enumerazioni Un enumerazione è un tipo che può contenere un insieme di valori (detti enumeratori) specificati dall utente. Si definisce mediante la parola chiave enum: enum colore { rosso, verde, blu ; // rosso = 0, verde = 1, blu = 2 colore c = blu; cout << c; // 2 E possibile attribuire un valore esplicito agli enumeratori: enum mese { gennaio = 1, febbraio = 2, marzo = 3, aprile = 4 ; mese m1 = 3; // errore: 3 non è di tipo mese mese m2 = mese(3); // ok Programmazione Orientata agli Oggetti 2.23 Paolo Trunfio DEIS, UNICAL Array Un array è un aggregazione di elementi dello stesso tipo. In un array di dimensione n gli elementi sono indicizzato da 0 ad n-1. int a[5]; // a è un array di 5 numeri interi double b[10]; // b è un array di 10 numeri double char c[2]; // c è un array di 2 caratteri La dimensione dell array deve essere nota a tempo di compilazione, in quanto solo alcuni compilatori supportano gli array a dimensione variabile. Il seguente frammento di codice, anche se supportato da alcuni compilatori, dovrebbe quindi essere evitato per motivi di portabilità: int dim; cout << "Inserisci la dimensione dell array: "; cin >> dim; int d[dim]; // attenzione: dimensione nota solo a tempo d esecuzione Programmazione Orientata agli Oggetti 2.24 Paolo Trunfio DEIS, UNICAL

Array Un array può essere inizializzato mediante una lista di valori: int a[] = { 2, 4, 8, 16 ; // la dimensione viene calcolata automaticamente int b[4] = { 2, 4, 8, 16 ; // ok int c[4] = { 2, 4, 8, 16, 32 ; // errore: troppi valori int d[4] = { 2, 4, 8 ; // ok: l elemento mancante viene inizializzato a 0 Gli elementi dell array possono essere acceduti utilizzando l operatore []: a[1] = a[0] + 3; cout << a[1]; E possibile dichiarare array multidimensionali: const int n=3, m=4; int e[n][m]; e[0][0] = 10; Programmazione Orientata agli Oggetti 2.25 Paolo Trunfio DEIS, UNICAL Stringhe Le stringhe sono generalmente gestite mediante la classe string della libreria standard. #include <iostream> #include <string> using namespace std; int main() { string a = "Prova"; string b = "stringhe"; string c = a+" "+b; // + è l operatore di concatenazione cout << c << endl; // Prova stringhe string s; cout << "Inserisci una stringa: "; cin >> s; // legge una stringa fino al primo spazio e la memorizza in s cout << "Hai inserito: " << s << endl; // stampa la stringa s Programmazione Orientata agli Oggetti 2.26 Paolo Trunfio DEIS, UNICAL

Stringhe E possibile accedere ai singoli caratteri di un oggetto string mediante il metodo at o tramite l operatore []: string s = "Roma"; char a = s.at(2); // a = 'm' char b = s[3]; // b = 'a' cout << a << " " << b << endl; // m a Per conoscere la lunghezza di una stringa si può usare il metodo size o il metodo length: int lung = s.size(); // lung = 4 s[lung-1] = 'e'; cout << s << endl; // Rome Il metodo empty restituisce true se la stringa è vuota: if (s.empty()) cout << "stringa vuota"; Programmazione Orientata agli Oggetti 2.27 Paolo Trunfio DEIS, UNICAL Strutture Una struttura è un aggregazione di elementi di tipo arbitrario. Si definisce mediante la parola struct: struct Automobile { string marca; string modello; int cilindrata; ; E possibile dichiarare variabili di tipo Automobile come si dichiarano variabili di tipi predefiniti. Il punto è utilizzato per accedere ai singoli membri della struttura: Automobile a; a.marca = "Ferrari"; a.modello = "FXX"; a.cilindrata = 6262; cout << a.marca << " " << a.modello << endl; // Ferrari FXX Nota: è preferibile fare uso delle classi anziché delle strutture. Programmazione Orientata agli Oggetti 2.28 Paolo Trunfio DEIS, UNICAL

Istruzione if-else if (<condizione>) <blocco-if> if (<condizione>) <blocco-if> else <blocco-else> La condizione è il risultato di una espressione booleana. Se il risultato è true si esegue il blocco-if, altrimenti si esegue il blocco-else (nel caso in cui sia stato specificato un ramo else). Ogni blocco può contenere una o più istruzioni. Se un blocco contiene più di una istruzione deve essere racchiuso all interno di una coppia di parentesi graffe. Programmazione Orientata agli Oggetti 2.29 Paolo Trunfio DEIS, UNICAL Espressione condizionale Un espressione condizionale può essere usata in alcuni casi per sostituire un istruzione if-else: Per esempio l istruzione: if (n < 0) abs = -n; else abs = n; può essere sostituita dalla seguente espressione condizionale: abs = (n < 0)? -n : n; Si noti che le parentesi intorno alla condizione possono essere omesse: abs = n < 0? -n : n; Programmazione Orientata agli Oggetti 2.30 Paolo Trunfio DEIS, UNICAL

Istruzione switch L istruzione switch può essere usata in alcuni casi per evitare l uso di istruzioni if-else in cascata: switch (val) { case val1: istruzioni break; case val2: istruzioni break; case val3: istruzioni break; default: istruzioni Programmazione Orientata agli Oggetti 2.31 Paolo Trunfio DEIS, UNICAL Istruzioni di ciclo for (<inizializzazione>; <condizione>; <espressione>) <blocco-istruzioni> while (<condizione>) <blocco-istruzioni> do <blocco-istruzioni> while (<condizione>) Come di consueto ogni blocco può contenere più istruzioni. In tal caso il blocco deve essere racchiuso all interno di una coppia di parentesi graffe. Programmazione Orientata agli Oggetti 2.32 Paolo Trunfio DEIS, UNICAL

Istruzioni break e continue L istruzione break causa la terminazione del ciclo all interno del quale è invocata. while (<condizione>) { break; L istruzione continue determina il salto alla fine del blocco istruzioni del ciclo: while (<condizione>) { continue; Si noti che nel caso di cicli innestati le istruzioni break e continue hanno effetto solo sul ciclo in cui sono contenuti. Programmazione Orientata agli Oggetti 2.33 Paolo Trunfio DEIS, UNICAL Istruzione goto L istruzione goto determina il salto alla posizione identificata da una determinata etichetta. L uso del goto di norma deve essere evitato. Un caso in cui il goto può essere utilizzato - nel caso in cui l efficienza sia fondamentale - è la terminazione di una serie di cicli innestati da un punto del ciclo più interno. while (<condizione1>) { while (<condizione2>) { while (<condizione3>) { goto fine; fine: Programmazione Orientata agli Oggetti 2.34 Paolo Trunfio DEIS, UNICAL