Chapter 1 Elementi di Programmazione in C++ 1.1 C++: Elementi di Base <1 - FondInformatica1: >cat example05.design Comportamento: Il programma dovrebbe invitare l utente a immettere il raggio di un cerchio C. L utente dovrebbe inserire un valore reale dalla tastiera. Il programma dovrebbe calcolare la circonferenza e l area del cerchio C sullo schermo con quattro valori decimali di precisione. Oggetti dato: Description Natura Tipo Nome ------------------------------ -------- ------- ------------- invito ad inserire il raggio costante string -- non necessario -- schermo variabile ostream cout raggio del cerchio variabile real raggio tastiera variabile istream cin approssimazione di pi costante real PI (3.14159) 2 costante integer -- non necessario -- circonferenza del cerchio variabile real circonferenza area del cerchio variabile real area Operazioni: Stampa del prompt per il raggio del cerchio verso cout Inserimento di un valore reale per il raggio da cin versio raggio Calcolo della circonferenza e dell area (usando il raggio) circonferenza = 2 * PI * raggio area = PI * raggio * raggio Stampa di circonferenza verso cout (in un formato appropriato) Stampa di area verso cout (in un formato appropriato) Algoritmo: 5
6 CHAPTER 1. ELEMENTI DI PROGRAMMAZIONE IN C++ 1. Output del Messaggio di invito a cout 2. Leggi in ingresso un valore reale da cin in raggio 3. circonferenza = 2 * PI * raggio 4. area = PI * raggio * raggio 5. Stampa in uscita circonferenza verso cout (con un formato appropriato) 6. Stampa in uscita area verso cout (con un formato appropriato)
1.1. C++: ELEMENTI DI BASE 7 <2 - FondInformatica1: >cat example05.cpp /****************************************************************************** Esempio n.5 -- Circonferenza ed Area di un Cerchio ******************************************************************************/ #include <iostream.h> #include <iomanip.h> /*----------------------------------------------------------------------------- Nome: main Scopo: Calcolare la Circonferenza e l Area di un Cerchio Input: Il raggio R del cerchio Output: Circonferenza e Area del Cerchio di raggio R -----------------------------------------------------------------------------*/ int main() { const double PI = 3.14159; // approssimazione di pigreco } double raggio, // raggio del cerchio circonferenza, // circonferenza del cerchio area; // area del cerchio cout << "Immettere il raggio del cerchio: "; cin >> raggio; circonferenza = 2 * PI * raggio; area = PI * raggio * raggio; cout << setiosflags( ios::fixed ios::showpoint ) << setprecision( 4 ); cout << "La Circonferenza e : " << circonferenza << endl; cout << "L Area e : " << area << endl; <3 - FondInformatica1: >g++ example05.cpp <4 - FondInformatica1: >a.out Immettere il raggio del cerchio: 1.0 La Circonferenza e : 6.2832 L Area e : 3.1416 <5 - FondInformatica1: >a.out Immettere il raggio del cerchio: 10.0 La Circonferenza e : 62.8318 L Area e : 314.1590 <6 - FondInformatica1: >a.out
8 CHAPTER 1. ELEMENTI DI PROGRAMMAZIONE IN C++ Immettere il raggio del cerchio: -5.0 La Circonferenza e : -31.4159 L Area e : 78.5397
1.2. ESPRESSIONI NUMERICHE 9 1.2 Espressioni Numeriche <1 - FondInformatica1: >cat example06.cpp /****************************************************************************** Esempio n.6 -- Espressioni Numeriche ******************************************************************************/ #include <iostream.h> #include <iomanip.h> int main() { const int A = 3, B = 4, C = 7; const double X = 6.5, Y = 3.5; cout << setiosflags( ios::showpoint ios::fixed ) << setprecision( 2 ); cout << "\n*** Calcolo su interi ***\n\n"; cout << A << " + " << B << " equivale a " << A+B << endl; cout << A << " - " << B << " equivale a " << A-B << endl; cout << A << " * " << B << " equivale a " << A*B << endl; cout << A << " / " << B << " equivale a " << A/B << " R " << A%B << endl; cout << endl; cout << C << " + " << 5 << " equivale a " << C+5 << endl; cout << C << " - " << 5 << " equivale a " << C-5 << endl; cout << C << " * " << 5 << " equivale a " << C*5 << endl; cout << C << " / " << 5 << " equivale a " << C/5 << " R " << C%5 << endl; cout << "\n*** Calcolo su reali ***\n\n"; cout << X << " + " << Y << " equivale a " << X+Y << endl; cout << X << " - " << Y << " equivale a " << X-Y << endl; cout << X << " * " << Y << " equivale a " << X*Y << endl; cout << X << " / " << Y << " equivale a " << X/Y << endl; cout << "\n*** Calcolo su tipi misti ***\n\n"; cout << A << " - " << X << " equivale a " << A-X << endl; cout << A << " / " << X << " equivale a " << A/X << endl; cout << "\n*** Calcolo composto ***\n\n"; cout << "C + B / A equivale a " << C + B / A << endl; cout << "(C + B) / A equivale a " << (C + B) / A << endl; cout << endl; cout << "C / B * A equivale a " << C / B * A << endl; cout << "C / (B * A) equivale a " << C / (B * A) << endl; cout << "\n*** Conversioni di tipo ***\n\n";
10 CHAPTER 1. ELEMENTI DI PROGRAMMAZIONE IN C++ } cout << "Valore di A: " << A << endl; cout << "Valore di double( A ): " << double( A ) << endl; cout << "Valore di (double) A: " << (double) A << endl; cout << "Valore di X: " << X << endl; cout << "Valore di int( X ): " << int( X ) << endl; cout << "Valore di (int) X: " << (int) X << endl; <2 - FondInformatica1: >g++ example06.cpp <3 - FondInformatica1: >a.out *** Calcolo su interi *** 3 + 4 equivale a 7 3-4 equivale a -1 3 * 4 equivale a 12 3 / 4 equivale a 0 R 3 7 + 5 equivale a 12 7-5 equivale a 2 7 * 5 equivale a 35 7 / 5 equivale a 1 R 2 *** Calcolo su reali *** 6.50 + 3.50 equivale a 10.00 6.50-3.50 equivale a 3.00 6.50 * 3.50 equivale a 22.75 6.50 / 3.50 equivale a 1.86 *** Calcolo su tipi misti *** 3-6.50 equivale a -3.50 3 / 6.50 equivale a 0.46 *** Calcolo composto *** C + B / A equivale a 8 (C + B) / A equivale a 3 C / B * A equivale a 3 C / (B * A) equivale a 0 *** Conversioni di tipo *** Valore di A: 3 Valore di double( A ): 3.00 Valore di (double) A: 3.00 Valore di X: 6.50 Valore di int( X ): 6
1.2. ESPRESSIONI NUMERICHE 11 Valore di (int) X: 6
12 CHAPTER 1. ELEMENTI DI PROGRAMMAZIONE IN C++ 1.3 Espressioni logiche (o booleane) <1 - FondInformatica1: >cat example07.cpp /****************************************************************************** Esempio n.7 -- Espressioni Logiche (o booleane) ******************************************************************************/ #include <iostream.h> #include <ctype.h> int main() { const bool A = true, B = false; const int C = 3, D = 8; const char E = z, F = 5 ; // boolean // interi // caratteri cout << endl; cout << "bool A: " << A << endl; cout << "bool B: " << B << endl << endl; cout << "int C: " << C << endl; cout << "int D: " << D << endl << endl; cout << "C == D: " << (C == D) << endl; cout << "C!= D: " << (C!= D) << endl; cout << "C < 3: " << (C < 3) << endl; cout << "C <= 3: " << (C <= 3) << endl; cout << "C > 3: " << (C > 3) << endl; cout << "C >= 3: " << (C >= 3) << endl << endl; cout << "C >= 5 D <= 9: " << (C >= 5 D <= 9) << endl; cout << "C >= 0 && D >= 4: " << (C >= 0 && D >= 4) << endl << endl; cout << "C!= D C < -6: " << (C!= D C < -6) << endl; cout << "C <= 0 && D > -6: " << (C <= 0 && D > -6) << endl << endl; cout << "1 <= C && C <= 5: " << (1 <= C && C <= 5) << endl; cout << "1 <= D && D <= 5: " << (1 <= D && D <= 5) << endl << endl; cout << "char E: " << E << endl; cout << "char F: " << F << endl << endl; cout << "isalnum( E ): " << isalnum( E ) << endl; cout << "isalpha( E ): " << isalpha( E ) << endl; cout << "islower( E ): " << islower( E ) << endl; cout << "isdigit( E ): " << isdigit( E ) << endl << endl; } cout << "isalnum( F ): " << isalnum( F ) << endl; cout << "isalpha( F ): " << isalpha( F ) << endl; cout << "islower( F ): " << islower( F ) << endl; cout << "isdigit( F ): " << isdigit( F ) << endl << endl;
1.4. ESPRESSIONI DI ASSEGNAZIONE/ASSEGNAMENTO 13 <2 - FondInformatica1: >g++ example07.cpp <3 - FondInformatica1: >a.out bool A: 1 bool B: 0 int C: 3 int D: 8 C == D: 0 C!= D: 1 C < 3: 0 C <= 3: 1 C > 3: 0 C >= 3: 1 C >= 5 D <= 9: 1 C >= 0 && D >= 4: 1 C!= D C < -6: 1 C <= 0 && D > -6: 0 1 <= C && C <= 5: 1 1 <= D && D <= 5: 0 char E: z char F: 5 isalnum( E ): 2 isalpha( E ): 2 islower( E ): 2 isdigit( E ): 0 isalnum( F ): 4 isalpha( F ): 0 islower( F ): 0 isdigit( F ): 4 1.4 Espressioni di assegnazione/assegnamento <1 - FondInformatica1: >cat example08.cpp /****************************************************************************** Esempio n.8 -- Espressioni di assegnamento ******************************************************************************/ #include <iostream.h> int main()
14 CHAPTER 1. ELEMENTI DI PROGRAMMAZIONE IN C++ { int A, B; cout << "\n*** Espressioni di assegnamento concatenate ***\n\n"; B = A = 5; cout << "Istruzione: B = A = 5;\n"; cout << "A: " << A << endl; cout << "B: " << B << endl << endl; cout << "*** Espressioni di assegnamento composte ***\n\n"; A = 15; A += 2; cout << "Istruzione: A = 15; A += 2;\n"; cout << "A: " << A << endl << endl; A = 15; A -= 2; cout << "Istruzione: A = 15; A -= 2;\n"; cout << "A: " << A << endl << endl; A = 15; A *= 2; cout << "Istruzione: A = 15; A *= 2;\n"; cout << "A: " << A << endl << endl; A = 15; A /= 2; cout << "Istruzione: A = 15; A /= 2;\n"; cout << "A: " << A << endl << endl; cout << "*** Espressioni di incremento ***\n\n"; A = 20; cout << "Valore di A: " << A << endl; cout << "Valore di ++A: " << ++A << endl; cout << "Valore di A: " << A << endl; cout << "Valore di A++: " << A++ << endl; cout << "Valore di A: " << A << endl << endl; cout << "*** Espressioni di decremento ***\n\n"; } A = 30; cout << "Valore di A: " << A << endl; cout << "Valore di --A: " << --A << endl; cout << "Valore di A: " << A << endl; cout << "Valore di A--: " << A-- << endl; cout << "Valore di A: " << A << endl << endl; <2 - FondInformatica1: >g++ example08.cpp <3 - FondInformatica1: >a.out *** Espressioni di assegnamento concatenate ***
1.5. ESPRESSIONI DI INGRESSO ED USCITA: INPUT AND OUTPUT 15 Istruzione: B = A = 5; A: 5 B: 5 *** Espressioni di assegnamento composte *** Istruzione: A = 15; A += 2; A: 17 Istruzione: A = 15; A -= 2; A: 13 Istruzione: A = 15; A *= 2; A: 30 Istruzione: A = 15; A /= 2; A: 7 *** Espressioni di incremento *** Valore di A: 20 Valore di ++A: 21 Valore di A: 21 Valore di A++: 21 Valore di A: 22 *** Espressioni di decremento *** Valore di A: 30 Valore di --A: 29 Valore di A: 29 Valore di A--: 29 Valore di A: 28 1.5 Espressioni di Ingresso ed Uscita: Input and Output <1 - FondInformatica1: >cat example09.cpp /****************************************************************************** Esempio n.9 -- Espressioni di Ingresso ed Uscita ******************************************************************************/ #include <iostream.h> #include <iomanip.h> int main() { int A = 99, B = 99, C = 99; const double
16 CHAPTER 1. ELEMENTI DI PROGRAMMAZIONE IN C++ X = 19.95, Y = 2.2250738585072014E-308, Z = 1.7976931348623157E+308; // Il double piu piccolo possibile // Il double piu grande possibile cout << "\n Immettere prego tre numeri reali: "; cin >> A >> B >> C; cout << endl; cout << "A: " << A << endl; cout << "B: " << B << endl; cout << "C: " << C << endl << endl; cout << "const double\n"; cout << " X = 19.95,\n"; cout << " Y = 2.2250738585072014E-308, // Il double piu piccolo possibile \n"; cout << " Z = 1.7976931348623157E+308; // Il double piu grande possibile\n\n"; cout << "X: " << X << endl; cout << "Y: " << Y << endl; cout << "Z: " << Z << endl << endl; cout << setiosflags( ios::showpoint ios::scientific ); cout << "X: " << X << endl; cout << "Y: " << Y << endl; cout << "Z: " << Z << endl << endl; cout << setprecision( 8 ); cout << "X: " << X << endl; cout << "Y: " << Y << endl; cout << "Z: " << Z << endl << endl; cout << setprecision( 30 ); cout << "X: " << X << endl; cout << "Y: " << Y << endl; cout << "Z: " << Z << endl << endl; cout << resetiosflags( ios::scientific ); cout << setiosflags( ios::fixed ) << setprecision( 5 ); cout << "X: " << setw( 10 ) << X << endl; cout << "Y: " << setw( 10 ) << Y << endl << endl; cout << "[" << setw( 12 ) << "Fondam1" << "]\n\n"; cout << "[" << setw( 12 ) << A << "]\n\n"; cout << resetiosflags( ios::right ) << setiosflags( ios::left ); cout << "[" << setw( 12 ) << "Fondam1" << "]\n\n";
1.5. ESPRESSIONI DI INGRESSO ED USCITA: INPUT AND OUTPUT 17 cout << "[" << setw( 12 ) << A << "]\n\n"; cout << resetiosflags( ios::left ) << setiosflags( ios::right ); cout << setfill( * ) << setprecision( 2 ); } cout << "Somma: $" << setw( 8 ) << X << endl << endl; <2 - FondInformatica1: >g++ example09.cpp <3 - FondInformatica1: >a.out Immettere prego tre numeri reali: 4 5, 6 A: 4 B: 5 C: 99 const double X = 19.95, Y = 2.2250738585072014E-308, Z = 1.7976931348623157E+308; // Il double piu piccolo possibile // Il double piu grande possibile X: 19.95 Y: 2.22507e-308 Z: 1.79769e+308 X: 1.995000e+01 Y: 2.225074e-308 Z: 1.797693e+308 X: 1.99500000e+01 Y: 2.22507386e-308 Z: 1.79769313e+308 X: 1.994999999999999928945726423990e+01 Y: 2.225073858507201383090232717332e-308 Z: 1.797693134862315708145274237317e+308 X: 19.95000 Y: 0.00000 [ Fondam1] [ 4] [Fondam1 ] [4 ] Somma: $***19.95
18 CHAPTER 1. ELEMENTI DI PROGRAMMAZIONE IN C++ 1.6 Funzioni di libreria (o predefinite/built-in) <1 - FondInformatica1: >cat example10.design %stampa il file: example10.design Comportamento: Il programma dovrebbe consentire l ingresso dei cateti di di un triangolo rettangolo entrambi dei quali debbono essere maggiori di 0. L utente dovrebbe inserire due valori reali da tastiera. Il programma dovrebbe calcolare e visualizzare la lunghezza dell ipotenusa, il perimetro e l area del triangolo sullo schermo. Oggetti Dato: Descrizione Natura Tipo Nome ------------------------------ -------- ------- ------------- Messaggio primo cateto constante string -- assente -- Messaggio 2^ cateto constante string -- assente -- schermo variabile ostream cout lunghezza cateto 1 variabile real latoa lunghezza cateto 2 variabile real latoc tastiera variabile istream cin 0.0 costante real -- assente -- 2 costante integer -- assente -- linghezza ipotenusa variabile real latob perimetro variabile real perimetro area variabile real area Operazioni: Stampa messaggio per il primo cateto verso cout Inserisci valore reale da cin in latoa Stampa messaggio per il secondo cateto verso cout Inserisci valore reale da cin in latoc Verifica che latoa e latoc siano maggiori di 0.0 Calcola latob, perimetro e area (usando latoa and latoc) latob = radice quadrata di (latoa * latoa + latoc * latoc) perimetro = latoa + latob + latoc area = (latoc * latoa) / 2 output latoa verso cout (con una etichetta appropriata) output latob verso cout (con una etichetta appropriata) output latoc verso cout (con una etichetta appropriata) output perimetro verso cout (con una etichetta appropriata) output area verso cout (con una etichetta appropriata) Algoritmo: 1. Stampa messaggio per il primo cateto verso cout 2. Inserisci valore reale da cin in latoa 3. Stampa messaggio per il secondo cateto verso cout 4. Inserisci valore reale da cin in latoc 5. Verifica che latoa e latoc siano maggiori di 0.0 6. latob = radice quadrata di (latoa * latoa + latoc * latoc)
1.6. FUNZIONI DI LIBRERIA (O PREDEFINITE/BUILT-IN) 19 7. perimetro = latoa + latob + latoc 8. area = (latoc * latoa) / 2 9. output latoa verso cout (con una etichetta appropriata) 10. output latob verso cout (con una etichetta appropriata) 11. output latoc verso cout (con una etichetta appropriata) 12. output perimetro verso cout (con una etichetta appropriata) 13. output area verso cout (con una etichetta appropriata) <2 - FondInformatica1: >cat example10.cpp /****************************************************************************** Esempio n.10 -- Funzioni di Libreria ******************************************************************************/ #include <iostream.h> #include <assert.h> #include <math.h> /*----------------------------------------------------------------------------- Name: main Obbiettivo: Data la lunghezza dei due cateti di un triangolo rettangolo calcola la lunghezza dell ipotenusa, il perimetro del triangolo e l area del triangolo Input: La lunghezza dei due cateti del triangolo Output: La lunghezza dei tre lati del triangolo Il perimetro del triangolo L area del triangolo -----------------------------------------------------------------------------*/ int main() { double latoa, latoc, latob, perimetro, area; // la lunghezza del primo cateto di un triangolo rettangolo // la lunghezza del primo cateto // la lunghezza dell ipotenusa del triangolo rettangolo // Il perimetro la lunghezza del triangolo rettangolo // L area del triangolo rettangolo cout << endl; cout << "Inserisci il primo cateto: "; cin >> latoa; cout << endl; cout << "Inserisci il secondo cateto: "; cin >> latoc; assert( latoa > 0.0 && latoc > 0.0 ); // controllo validita dei dati latob = sqrt( latoa*latoa + latoc*latoc ); perimetro = latoa + latoc + latob;
20 CHAPTER 1. ELEMENTI DI PROGRAMMAZIONE IN C++ area = (latoa * latoc) / 2; } cout << endl; cout << "Lato A: " << latoa << endl; cout << "Lato C: " << latoc << endl; cout << "Lato B: " << latob << endl; cout << "Perimetro: " << perimetro << endl; cout << "Area: " << area << endl; cout << endl; <3 - FondInformatica1: >g++ example10.cpp <4 - FondInformatica1: >a.out Inserisci il primo cateto: 3.0 Inserisci il secondo cateto: 4.0 Lato A: 3 Lato C: 4 Lato B: 5 Perimetro: 12 Area: 6 <5 - FondInformatica1: >a.out Inserisci il primo cateto: 1.5 Inserisci il secondo cateto: 1.5 Lato A: 1.5 Lato C: 1.5 Lato B: 2.12132 Perimetro: 5.12132 Area: 1.125 <6 - FondInformatica1: >a.out Inserisci il primo cateto: 0.5 Inserisci il secondo cateto: 12.5 Lato A: 0.5 Lato C: 12.5 Lato B: 12.51 Perimetro: 25.51 Area: 3.125 <7 - FondInformatica1: >a.out
1.6. FUNZIONI DI LIBRERIA (O PREDEFINITE/BUILT-IN) 21 Inserisci il primo cateto: 30.0 Inserisci il secondo cateto: 40.0 Lato A: 30 Lato C: 40 Lato B: 50 Perimeter: 120 Area: 600 <8 - FondInformatica1: >a.out Inserisci il primo cateto: 0.0 Inserisci il secondo cateto: 0.0 example10.cpp:39: failed assertion latoa > 0.0 && latoc > 0.0 Abort <9 - FondInformatica1: >a.out Inserisci il primo cateto: -2.0 Inserisci il secondo cateto: 4.5 example10.cpp:39: failed assertion latoa > 0.0 && latoc > 0.0 Abort <10 - FondInformatica1: >a.out Inserisci il primo cateto: 3.0 Inserisci il secondo cateto: 4.0 Lato A: 3 Lato C: 4 Lato B: 5 Perimetro: 12 Area: 6 1.6.1 Le librerie matematiche (Math) e di tipi carattere Costanti e funzioni selezionate da "math.h": M_E 2.7182818284590452354 M_LOG2E 1.4426950408889634074 M_LOG10E 0.43429448190325182765 M_LN2 0.69314718055994530942 M_LN10 2.30258509299404568402 M_PI 3.14159265358979323846 M_PI_2 1.57079632679489661923
22 CHAPTER 1. ELEMENTI DI PROGRAMMAZIONE IN C++ M_PI_4 0.78539816339744830962 M_1_PI 0.31830988618379067154 M_2_PI 0.63661977236758134308 M_2_SQRTPI 1.12837916709551257390 M_SQRT2 1.41421356237309504880 M_SQRT1_2 0.70710678118654752440 double cos( double ); double sin( double ); double tan( double ); double acos( double ); double asin( double ); double atan( double ); double cosh( double ); double sinh( double ); double tanh( double ); double exp( double ); double log( double ); double log10( double ); double pow( double, double ); double sqrt( double ); double ceil( double ); double fabs( double ); double floor( double ); Funzioni selezionate da ctype.h : int isalnum( int ); int isalpha( int ); int iscntrl( int ); int isdigit( int ); int isgraph( int ); int islower( int ); int isprint( int ); int ispunct( int ); int isspace( int ); int isupper( int ); int isxdigit( int ); int tolower( int ); int toupper( int ); 1.7 Funzioni definite dal programmatore <1 - FondInformatica1: >cat example13.cpp