Post on 01-May-2015
G. Mecca – M. Samela – Università della Basilicata G. Mecca – M. Samela – Università della Basilicata
Programmazione Procedurale in Linguaggio C++
Elementi di Base
Parte 7
Dettagli e Approfondimenti
versione 2.6Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons
(vedi ultima pagina)
2G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Sommario
Ricapitolazione ANSI C++
Compilatori in Ambiente Linux Approfondimenti sui Tipi di Dato
Altri Tipi di Dato Operatore di Cast Espressioni Differenze con il C
Elementi di Base: Dettagli e Approfondimenti >> Sommario
3G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Ricapitolazione
Elementi di Basenozioni sintattiche di basenozioni sulla dichiarazione dei datinozioni sulle operazioni di base sui dati di
un programma In sintesi
quello che serve per scrivere programmi che si comportano come una calcolatrice
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
4G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Nozioni Sintattiche di Base
Direttiveper librerie di sistema e librerie dell’utente#include <iostream.h>#include <iostream.h> (librerie di sistema)#include <fstream.h>#include <fstream.h> (librerie di sistema)#include “equazioniLib.h”#include “equazioniLib.h” (librerie utente)
Commentilinea singola // questo è un commento// questo è un commento
multilinea /* commento *//* commento */
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
5G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Nozioni Sintattiche di Base
Identificatorinomi degli oggetti di un programma
(variabili, costanti, parametri, moduli) Regole sintattiche
sequenza di lettere/cifre/_primo carattere: lettera o _codice ASCII a 7 bitsensibile alle maiuscoleescluse le parole chiave riservate (es: main)
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
6G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Dichiarazione dei Dati
Tipi di dato di baseint: 32 bit in complemento a 2, da -2 miliardi
a +2 miliardi circafloat: 32 bit in v.m., da -1038 a +1038 circadouble: 64 bit in v.m., da -10308 a +10308 ca.char: 8 bit, codice ASCII a 7 bitbool: 1 bit
Tipo string: classe di oggetti del C++
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
7G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Dichiarazione dei Dati
Dichiarazioni di costante simbolicaconst <tipo> <identificatore> = <valore>;es: const float PIGRECO = 3.1415;const float PIGRECO = 3.1415;
Semanticaspazio nella memoria del tipo specificato,
non modificabile, contenente il valore Vantaggi
poter cambiare il valore intervenendo solo sulla dichiarazione
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
8G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Dichiarazione dei Dati
Dichiarazioni di variabili<tipo> <identificatore>;<tipo> <identif1>, <identif2>, ... <identifn>;es: int raggio;int raggio;es: float cerchio, circonf;float cerchio, circonf;
Semanticaspazio nella memoria del tipo specificatomodificabile liberamente nel corso del
programma (lettura o assegnazione)
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
9G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Dichiarazione dei Dati
Attenzionesubito dopo la dichiarazione il valore della
variabile è casuale (indefinibile)è necessario inizializzare la variabile
leggendone il valore da un flusso o con un’istruzione di assegnazione
Esempioint raggio; cin >> raggio;int raggio; cin >> raggio;int raggio; raggio = 3;int raggio; raggio = 3;
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
10G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Dichiarazione dei Dati
In alternativainizializzazione contestuale alla
dichiarazionees: int raggio = 0;int raggio = 0;
Equivalente a due istruzioniint raggio;int raggio;raggio = 0;raggio = 0;
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
11G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Dichiarazione dei Dati
Attenzione (2)possibili errori di rappresentazione
Varie causelimitatezza dello spazio in memoria
(trabocco)natura della rappresentazione in virgola
mobile (arrotondamenti)
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
12G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzioni di Base sui Dati
Istruzioni di baseistruzioni di assegnazioneistruzioni di lettura e stampa
Istruzioni di assegnazioneservono ad assegnare il risultato di un
calcolo ad una variabile Istruzioni di lettura e stampa
servono ad acquisire e stampare i valori delle variabili
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
13G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzioni di Assegnazione
Sintassi<nomeVariabile><nomeVariabile> = < = <espressione>espressione>;;
Semanticaviene calcolato il valore dell’espressione se il valore risultante è compatibile con il
tipo della variabile, viene assegnato alla variabile (ovvero: il valore viene scritto nello spazio di memoria associato alla variabile)
altrimenti si genera un errore
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
14G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Espressioni
Formule per il calcolo di un valorecomposte di operandi e operatori
Operandicostantivariabili
Operatorioperatori predefinitifunzioni predefinite
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
15G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzioni di Lettura e Stampa
Basate sul concetto di “flusso”canale di comunicazione tra il processore
ed un dispositivo di ingresso o di uscita Standard input
flusso standard di ingresso, proveniente dalla tastiera
Standard outputflusso standard di uscita, diretto verso lo
schermo
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
16G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Concetto di Flusso
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
SchermoSchermo
Flusso di uscita
File su discoFile su disco
StampanteStampante
File su discoFile su disco
TastieraTastiera
Pro
cess
ore
Ese
gu
e le
istr
uzi
oni
del
Pro
gra
mm
a
Flusso di uscita
Flusso di uscita
Flusso di ingresso
Flusso di ingresso
StandardInput
StandardOutput
17G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzioni di Stampa
Sintassicout << cout << <espressione><espressione>;;cout << cout << <espressione1><espressione1> << << <espressione2><espressione2> ... ; ... ;
espressione: costante, variabile, espr. complessa
Semanticaviene calcolato il valore di ciascuna
espressioneil valore viene inserito nel flusso diretto allo
schermo sotto forma di sequenza di caratteri
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
18G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzioni di Lettura
Sintassicin >> cin >> <variabile><variabile>;;
Semantica: input formattatoappena nel flusso è presente almeno una
riga, il processore analizza il flusso nell’analisi del flusso ignora eventuali spazi
bianchi inizialigli spazi bianchi vengono utilizzati anche
come separatori tra i valori
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
19G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Lettura e Stampa da e verso File
ofstreamflusso associato ad un file in cui si stampano dati
es: ofstream flussoSuFile (“fileDati.txt”);ofstream flussoSuFile (“fileDati.txt”);
ifstreamflusso associato ad un file da cui si leggono dei dati
es: ifstream flussoDaFile (“fileDati.txt”);ifstream flussoDaFile (“fileDati.txt”);
Per utilizzarli è necessario specificare#include <fstream.h>#include <fstream.h>
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
20G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Domande ed Esercizidi Riepilogo
Elementi di Base: Dettagli e Approfondimenti >> Ricapitolazione
21G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
ANSI C++
Versione standard del C++successiva alla prima introduzione
Prevede alcune varianti nella sintassi Alcuni esempi
cambiamenti nelle direttive di inclusioneintroduzione dei “namespace”cambiamenti nella struttura del programma
principale
Elementi di Base: Dettagli e Approfondimenti >> ANSI C++
22G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Elementi di Base: Dettagli e Approfondimenti >> ANSI C++
// Calcolo della superficie del cerchio// Calcolo della superficie del cerchio#include <iostream>#include <iostream>using namespace std;using namespace std;intint main() { main() { const float pigreco=3.14;const float pigreco=3.14; int raggio;int raggio; float cerchio, circonf;float cerchio, circonf; cout << “Immetti la lungh. del raggio” << endl;cout << “Immetti la lungh. del raggio” << endl; cout << “(deve essere un numero intero)” << endl;cout << “(deve essere un numero intero)” << endl; cin >> raggio;cin >> raggio; cerchio = raggio*raggio*pigreco;cerchio = raggio*raggio*pigreco; circonf = 2*pigreco*raggio;circonf = 2*pigreco*raggio; cout << “La circonferenza misura: “ << circonf << endl;cout << “La circonferenza misura: “ << circonf << endl; cout << “Il cerchio ha superficie: “ << cerchio << endl;cout << “Il cerchio ha superficie: “ << cerchio << endl; return 0;return 0;}}
Un Semplice Programma in ANSI C++
23G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
ANSI C++
Le modifiche sono orientate prevalentemente alla programmazione a oggetti
Complicano la descrizione del linguaggioes: concetto di namespace
Nel seguito NON faremo riferimento al C++ ANSI
Elementi di Base: Dettagli e Approfondimenti >> ANSI C++
24G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Compilatori in Ambiente Linux
Attenzionealcuni compilatori, però, richiedono
necessariamente codice ANSI C++ Esempio
GCC (GNU C Compiler) compilatore storico per Linux – digerisce solo ANSI C++
Utilizzocompilazione: g++ <sorgente>.cppesecuzione: ./a.out
Elementi di Base: Dettagli e Approfondimenti >> ANSI C++
>>
25G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Compilatori in Ambiente Linux
La particolarità di gccè una collezione di compilatori
Compilatore FORTRANg77stesse modalità di funzionamento di gcc
Utilizzo compilazione: g77 <sorgente>.foresecuzione: ./a.out
Elementi di Base: Dettagli e Approfondimenti >> ANSI C++
>>
26G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Approfondimenti sui Tipi di Dato
Finoraci siamo concentrati solo sui tipi di dato
fondamentali del C++ Ma
esistono altri tipi di datole regole di compatibilità sono più
complesse di quelle che abbiamo descritto
Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi
27G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Altri Tipi di Dato
Esistono altri tipi Intero corto: short int
esempio: short int raggio;short int raggio;16 bit di memoria, valori (-32768, +32767)
Intero lungo: long intesempio: long int risultato;long int risultato;tipicamente: bit int ≤ bit long int
Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi
28G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Altri Tipi di Dato
Intero con segno/senza segnosigned int risultato;signed int risultato;signed short int risultato; signed short int risultato; unsigned int risultato;unsigned int risultato;unsigned long int risultato;unsigned long int risultato;
Reali lunghi: long doubleesempio: long double circonferenza;long double circonferenza;
tipicamente: #bit double ≤ #bit long double
Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi
29G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Altri Tipi di Dato
Caratteri con segno/senza segnochar car1;char car1;unsigned char car2;unsigned char car2;
Inoltreesiste un tipo per rappresentare caratteri al
di fuori del set di caratteri ASCII standardtipo wchar_t wchar_t (“wide char type”)normalmente 16 bit per la rappresentazionedipende dal compilatore
Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi
30G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Altri Tipi di Dato
Attenzionea differenza di quanto affermato per
semplicità in precedenza, lo spazio assegnato a ciascun tipo di dato non è fisso
dipende dal compilatore e dal processore Esempio
in alcune macchine int può essere di 32 bitin altre macchine di 16 bit
Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi
31G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Altri Tipi di Dato
Operatore sizeofoperatore fornito dal linguaggio per scoprire
la dimensione esatta attribuita dal processore ad una variabile o un tipo di dato
Sintassisizeof(<tipo>)sizeof(<tipo>)sizeof(<variabile>)sizeof(<variabile>)
Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi
32G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Altri Tipi di Dato
Esempi
int i;int i;cout << "i : " << sizeof(i); //4 cout << "i : " << sizeof(i); //4 cout << "short int: " << sizeof(short int); //2cout << "short int: " << sizeof(short int); //2cout << "int : " << sizeof(int); //4 cout << "int : " << sizeof(int); //4 cout << "long int: " << sizeof(long int); //4cout << "long int: " << sizeof(long int); //4cout << "char : " << sizeof(char); //1cout << "char : " << sizeof(char); //1cout << "float: " << sizeof(float); //4cout << "float: " << sizeof(float); //4cout << "double: " << sizeof(double); //8cout << "double: " << sizeof(double); //8cout << "long double:“<< sizeof(long double);//10cout << "long double:“<< sizeof(long double);//10
Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi
33G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Una Classificazione Complessiva
Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi
Tipi di base del C++
tipi “enumerabili”
tipo booleano boolbooltipi carattere charchar
unsigned charunsigned char
tipi interi shortshortintintlonglongunsigned shortunsigned shortunsigned intunsigned intunsigned longunsigned long
tipi in virgola mobile
floatfloatdoubledoublelong doublelong double
wchar_twchar_t
34G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Compatibilità tra Tipi
Le regole di compatibilità tra tipi sono più complesse di quanto visto finoratutti i tipi di base sono compatibili tra loro
In particolareil tipo char è considerato un tipo numerico
(valore di un carattere pari al codice ASCII)il tipo bool è considerato un tipo numerico
(valore pari a 0 oppure 1); qualsiasi valore diverso da 0 è considerato true
Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi
35G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Compatibilità tra Tipi
Esempio:int i;int i;
bool b;bool b;
char c;char c;
c = ‘a’;c = ‘a’;
i = c; // assegno un char ad un inti = c; // assegno un char ad un int
b = i; // assegno un int ad un boolb = i; // assegno un int ad un bool
cout << c << “ “ << i << “ “ b;cout << c << “ “ << i << “ “ b;
Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi
a 97 1
36G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Compatibilità tra Tipi
Gerarchia di Tipi Numericitipo booleano: bool (tipo meno generale)tipi carattere: char, unsigned chartipi interi: short int, int, long int (tutti signed e
unsigned)tipi reali: float, double, long double
(tipi più generali) Nelle espressioni sono compatibili
troncamento e ampliamento
Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi
37G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Compatibilità tra Tipi
Attenzionequeste sono da considerarsi idiosincrasie
del C/C++ (non presenti in FORTRAN)è opportuno evitare di utilizzare queste
funzionalità (i caratteri sono diversi dagli interi)
è importante conoscerle perché a volte nascondono errori (es: assegnazioni errate)
Elementi di Base: Dettagli e Approfondimenti >> Approfondimenti sui Tipi
38G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Operatore di Cast
Riassumendoogni dato trattato dal processore ha un tipoalcuni valori possono essere considerati di
tipi diversi Esempio: il numero 1
valore di tipo boolvalore di tipo intvalore di tipo floatvalore di tipo double
Elementi di Base: Dettagli e Approfondimenti >> Operatore di Cast
Importante
39G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Operatore di Cast
In questi casiil valore può essere soggetto a conversioni
di tipo Conversioni di tipo
consistono nella trasformare la rappresentazione in memoria del valore
che da quel momento è considerato di tipo diverso rispetto al suo tipo originale
Elementi di Base: Dettagli e Approfondimenti >> Operatore di Cast
40G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Operatore di Cast
Normalmentele conversioni di tipo vengono effettuate
automaticamente dal processorema possono essere richieste esplicitamente
dal programmatore Operazioni di “Cast”
operazione attraverso cui il programmatore chiede esplicitamente di trasformare la rappresentazione e il tipo di un valore
Elementi di Base: Dettagli e Approfondimenti >> Operatore di Cast
41G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Operatore di Cast
Operatori di Castl’operazione viene realizzata attraverso
opportuni operatori unariun operatore per ciascun tipo
Esempioes: float x; bool b; float x; bool b; x = (float) 3; x = (float) 3; b = (bool) x; b = (bool) x;
Elementi di Base: Dettagli e Approfondimenti >> Operatore di Cast
dato di tipo int, valore 3
dato di tipo float, valore 3.0
dato di tipo bool, valore 1
42G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Operatore di Cast
Sintassi(<tipo>)<valore>(<tipo>)<valore>
Semanticasupponiamo che <valore> sia di tipo <tipo’>il processore trasforma la rappresentazione
in memoria del <valore> nella corrispond. rappresentazione del <tipo> specificato
da quel momento <valore> è considerato di tipo <tipo>
Elementi di Base: Dettagli e Approfondimenti >> Operatore di Cast
43G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Operatore di Cast
Utilizzoconsentono di controllare le trasformazioni
di tipo nelle espressioni Esempio:
Elementi di Base: Dettagli e Approfondimenti >> Operatore di Cast
float media; int sommaVoti, numEsami;float media; int sommaVoti, numEsami;sommaVoti = 64;sommaVoti = 64;numEsami = 3;numEsami = 3;
media = media = (float)(float)sommaVoti/numEsami;sommaVoti/numEsami;cout << media;cout << media;
media = sommaVoti/numEsami;media = sommaVoti/numEsami;cout << media;cout << media; 21
21.3334
44G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Operatore di Cast
Attenzionel’operatore ha priorità molto altaattenzione all’ordine di applicazione
Elementi di Base: Dettagli e Approfondimenti >> Operatore di Cast
media = (float)sommaVoti/numEsami;media = (float)sommaVoti/numEsami;cout << media;cout << media;
media = ((float)sommaVoti)/numEsami;media = ((float)sommaVoti)/numEsami;cout << media;cout << media;
21.3334
21.3334
media = (float)(sommaVoti/numEsami);media = (float)(sommaVoti/numEsami);cout << media;cout << media;
21
45G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Espressioni
Un altro esempio di stranezza del C/C++in C++ tutte le istruzioni sono in effetti
considerate espressioniovvero regole per calcolare un valore
In particolarele istruzioni di assegnazione sono
complessivamente anche espressionile istruzioni di lettura e stampa sono
complessivamente anche espressioni
Elementi di Base: Dettagli e Approfondimenti >> Espressioni
46G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Assegnazioni
Operatore di assegnazione (=)ha una duplice funzioneassegna il valore a destra alla variabile a sinistrarestituisce il valore assegnato
Esempioint a;int a;
a = 1; // assegna 1 ad a e restituisce 1a = 1; // assegna 1 ad a e restituisce 1
E’ possibile includere le assegnazioni in espressioni più complesse
Elementi di Base: Dettagli e Approfondimenti >> Espressioni
47G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Assegnazioni
Esempio n.1int a, b, c;int a, b, c;a = (a = 5) + (b = 7);a = (a = 5) + (b = 7);
equivalente a; a = 5; b = 7; c = a + b;a = 5; b = 7; c = a + b;
Esempio n.2int a, b, c;int a, b, c;a = (b = (c = 0)); // equivalente a a=b=c=0;a = (b = (c = 0)); // equivalente a a=b=c=0;
equivalente a; c = 0; b = 0; a = 0;c = 0; b = 0; a = 0;
Elementi di Base: Dettagli e Approfondimenti >> Espressioni
48G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzioni di Lettura e Stampa
Operatore di Lettura (>>)ha una duplice funzioneacquisisce il valore da assegnare alla varrestituisce 1 se la lettura si è svolta correttamente, 0
se c’è stato un errore Anche in questo caso
è possibile combinare le istruzioni di lettura e stampa in espressioni più complesse
Esempioint a, b, c;int a, b, c;cout << (cin >> a); // stampa 0 se c’è errorecout << (cin >> a); // stampa 0 se c’è errore
Elementi di Base: Dettagli e Approfondimenti >> Espressioni
49G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Espressioni
Possono essere complesseIl C++ fornisce numerosi altri operatorile regole di precedenza sono intricate
Esempioperatori “bit a bit”: &, |, ~ operatori di scorrimento: >>, <<operatore condizionale: ?operatore “virgola”: ,
Elementi di Base: Dettagli e Approfondimenti >> Espressioni
50G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Espressioni
Operatori unari con effetti collateralipossono essere postfissi o prefissi
Operatore postfissoeffetto collaterale dopo la valutazionees: a++a++ (valuta a e poi la incrementa)
Operatore prefissoeffetto collaterale prima della valutazionees: ++a ++a (incrementa a e poi valuta)
Elementi di Base: Dettagli e Approfondimenti >> Espressioni
51G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Espressioni
Esempio 1int i, j, k;int i, j, k;
i = 10; j = 20;i = 10; j = 20;
k = i++ + j; // k vale 30k = i++ + j; // k vale 30
Esempio 1int i, j, k;int i, j, k;
i = 10; j = 20;i = 10; j = 20;
k = ++i + j; // k vale 31k = ++i + j; // k vale 31
Elementi di Base: Dettagli e Approfondimenti >> Espressioni
prima viene valutatala sottoespressione a(valore 10) e poi la variabile viene incrementata
prima viene incrementata la variabile a (valore 11) e poi viene valutatala sottoespressione
52G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Una Annotazione Importante
Attenzioneè possibile programmare benissimo anche
ignorando le stranezze descritte in questa lezione
anzi, per molti versi si programma meglio se queste cose non vengono usate
servono a rendere più compatto ma anche più incomprensibile il codice
Elementi di Base: Dettagli e Approfondimenti >> Espressioni
53G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Differenze con il C
In generaleil C è molto simile al “clean C” che abbiamo
approfonditoper alcuni aspetti è più spartanoe questo lo rende in molti casi più complesso
come linguaggio di programmazione Nel seguito
l’elenco delle principali differenze
Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C
54G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Differenze con il C
Attenzioneimparare a scrivere programmi complessi in
C NON è tra gli obiettivi del corsosi tratta di un livello secondariole differenze vengono illustrate a scopo di
completezza, e per preparare gli studenti che dovessero successivamente programmare in C ad ulteriori approfondimenti
Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C
55G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Differenze con il C
Tipo di ritorno del mainnormalmente int (non void, come ANSI C++)
Libreria di input/output#include <stdio.h>#include <stdio.h>
Definizione di costantiesiste la parola chiave “const”, ma ha una
semantica leggermente diversanormalmente si utilizza la direttiva #define
es: #define PIGRECO 3.14#define PIGRECO 3.14
Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C
56G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Differenze con il C
Istruzioni di lettura e di stampasono basate sui flussi standard di ingresso e
uscita come in tutti i linguaggima ci sono differenze sintattiche
Differenza principalenon esistono cout e cin (che sono oggetti)istruzione printf per scrivere datiistruzione scanf per leggere dati
Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C
57G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzione printf
Sintassiprintf(<stringa>);printf(<stringa>);printf(<stringaFormato>, argomenti);printf(<stringaFormato>, argomenti);
Stringa formatostringa che descrive la natura degli
argomenti successivi Esempi
printf(“Immetti il valore \n”);printf(“Immetti il valore \n”);printf(“Il cerchio vale: printf(“Il cerchio vale: %d%d”, cerchio);”, cerchio);
Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C
58G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzione printf
Descrittori di formato%d: numero intero%f: numero reale%c: carattere singolo%s: sequenza di caratteri (stringa)
Attenzionein C non esiste il tipo stringale stringhe si rappresentano come array di
caratteri
Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C
59G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzione scanf
Sintassiscanf(<stringaFormato>, scanf(<stringaFormato>, &&variabile);variabile);
Stringa formatoanaloga a quella della printf
Esempiscanf(“scanf(“%d%d”, ”, &&raggio);raggio);
Notaè indispensabile la & prima della variabile
Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C
ATTENZIONE:la mancanza della &è una fonte di erroremolto frequente
60G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzione scanf
Infattiscanf è una procedurail secondo argomento deve essere
modificato attraverso il corrispond. param. Ma
in C esistono solo parametri standardper simulare la semantica dei parametri per
riferimento si utilizzano i puntatori
Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C
61G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C
// Calcolo della superficie del cerchio// Calcolo della superficie del cerchio#include <#include <stdio.hstdio.h>>#define PIGRECO 3.14#define PIGRECO 3.14intint main() { main() { // Dichiarazioni// Dichiarazioni int raggio;int raggio; float cerchio, circonf;float cerchio, circonf; // Operazioni // Operazioni printfprintf("Immetti la lungh. del raggio\n");("Immetti la lungh. del raggio\n"); printfprintf("(deve essere un numero intero)\n");("(deve essere un numero intero)\n"); scanfscanf("%d", &raggio);("%d", &raggio); cerchio = raggio * raggio * PIGRECO;cerchio = raggio * raggio * PIGRECO; circonf = 2 * PIGRECO * raggio;circonf = 2 * PIGRECO * raggio; printfprintf("La circonferenza misura: %f \n", circonf);("La circonferenza misura: %f \n", circonf); printfprintf("Il cerchio ha superficie: %f \n", cerchio);("Il cerchio ha superficie: %f \n", cerchio); return 0return 0;;}}
Un Semplice Programma in C
>>
62G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzione scanf
Attenzionela scanf esegue un input formattatoesistono ulteriori procedure per effettuare
l’input non formattato nel caso di stringhe Le stringhe in C
non esiste il tipo stringuna stringa è un array di caratteri terminato
in maniera particolare (con un carattere ‘\0’)
Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C
63G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Esempio
#include <stdio.h>#include <stdio.h>
int main() {int main() { char targa[8];char targa[8]; char modello[20];char modello[20]; printf("Immetti la targa : ");printf("Immetti la targa : "); scanf("%s", &targa); // input formattatoscanf("%s", &targa); // input formattato getchar(); // equivalente della ignoregetchar(); // equivalente della ignore printf("Immetti il modello : ");printf("Immetti il modello : "); gets(modello); // input non formattatogets(modello); // input non formattato printf("Dati dell'automobile : \n");printf("Dati dell'automobile : \n"); printf("Targa : %s\n", targa);printf("Targa : %s\n", targa); printf("Modello : %s\n", modello);printf("Modello : %s\n", modello); return 0;return 0;}}
Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C
NOTA: scanf e getsaggiungono automaticamenteil carattere ‘\0’ al terminedella stringa letta
64G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Istruzione scanf
Inoltrenon è possibile effettuare il confronto tra
stringhe utilizzando == è necessario utilizzare la funzione strcmpstrcmp(s1, s2) ritorna 0 se le due stringhe
sono uguali, altrimenti un valore diverso da 0fa parte (come tutte le principali funzioni
sulle stringhe) della libreria string.h
Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C
65G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Esempio
#include <stdio.h>#include <stdio.h>#include <string.h>#include <string.h>
int main() {int main() { char targa[8];char targa[8]; printf("Immetti la targa : ");printf("Immetti la targa : "); scanf("%s", &targa); // input formattatoscanf("%s", &targa); // input formattato if (strcmp(targa, "ab762de") == 0)if (strcmp(targa, "ab762de") == 0) { { printf("Auto corretta\n");printf("Auto corretta\n"); }} return 0;return 0;}}
Elementi di Base: Dettagli e Approfondimenti >> Differenze con il C
66G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Riassumendo
Ricapitolazione ANSI C++
Compilatori in Ambiente Linux Approfondimenti sui Tipi di Dato
Altri Tipi di Dato Operatore di Cast Espressioni Differenze con il C
Elementi di Base: Dettagli e Approfondimenti >> Sommario
67G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++
Termini della Licenza
This work is licensed under the Creative Commons Attribution-ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
Termini della Licenza
Questo lavoro viene concesso in uso secondo i termini della licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere una copia della licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.