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.6 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
67
Embed
G. Mecca – M. Samela – Università della Basilicata Programmazione Procedurale in Linguaggio C++ Elementi di Base Parte 7 Dettagli e Approfondimenti versione.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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++
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++
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
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++
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.