a005prim.cpp

#include <iostream> using namespace std; int main() { cout << "Questo e' il mio primo programma C++.\n"; return 0; }


a010prim.cpp

#include<iostream> using namespace std; int main(){cout<<"Anche questo potrebbe essere il mio primo programma.\n";return 0;}


a015prim.cpp

#include <iostream> using namespace std; int main ( ) { cout << "... e anche questo!\n" ; return 0 ; }


a020comm.cpp

// Questo e' un <commento> #include <iostream> using namespace std; int main// un commento puo' cominciare in qualsiasi posizione // ma termina alla fine della riga ( // la parentesi chiusa alla fine di questa riga fa parte del commento) ) { // comincia il corpo del programma cout << "Commentiamo!\n"; return 0;} // questo commento si trova dopo la fine del programma


a025prim.cpp

#include <iostream> // Direttiva per il preprocessore: include il file // di intestazione 'iostream' sul quale si basa // il sistema di I/O del C++. using namespace std; // indico di utilizzare lo spazio dei nomi std, // in questo spazio sono definite le principali funzioni // di input/output che useremo durante il corso int main() // Intestazione della funzione principale (main): // indica dove ha inizio l'esecuzione del programma. // La coppia di parentesi tonde e' obbligatoria e // potra' in futuro contenere dei 'parametri'. { // Parentesi graffa aperta: delimitatore di apertura // del corpo della funzione main. cout << "Primo esempio\n"; // Visualizza la frase 'Primo esempio' e // posiziona il cursore all'inizio della riga // successiva; // cout sta per "console output" e rappresenta // il flusso standard di output; // il simbolo << e' l'operatore di inserimento return 0; // La funzione (main) restituisce il valore 0 } // Parentesi graffa chiusa: delimitatore di chiusura // del corpo della funzione main


a030altr.cpp

// nuovi concetti: sequenze di << #include <iostream> using namespace std; int main() { cout << "Altro " << "esempio\n"; // Visualizza 'Altro esempio' // "Altro " ed "esempio\n" sono stringhe letterali; // '\n' (newline: a capo) e' una 'sequenza di escape' return 0; }


a035cout.cpp

// nuovi concetti: costante intera, espressione intera // nuovi elementi: -, *, + #include <iostream> using namespace std; int main() { cout << 4 - 3 * 6 + 2 << "\n"; // visualizza il risultato dell'espressione: // -12 return 0; }


a040cout.cpp

// nuovi elementi: endl #include <iostream> using namespace std; int main() { cout << "4 - 3 * 6 + 2 = " << 4 - 3 * 6 + 2 << endl; // 'endl' e' un "manipolatore di stream" che // introduce un carattere di fine riga return 0; } /* Output: 4 - 3 * 6 + 2 = -12 */


a045intv.cpp

// nuovi concetti: variabile, assegnamento // nuovi elementi: int, = #include <iostream> using namespace std; int main() { int a; // dichiara 'a' come variabile di tipo 'int': // a puo' assumere un qualsiasi valore intero // nell'intervallo -2147483648 ... +2147483647 a = -2; // assegna il valore -2 alla variabile a cout << a << endl; // visualizza il contenuto della variabile a return 0; }


a050iniz.cpp

// nuovi concetti: dichiarazione e inizializzazione di una variabile // espressione con variabili #include <iostream> using namespace std; int main() { int x = 12; // dichiara e inizializza la variabile x cout << x*x+2*x; // visualizza il risultato dell'espressione: '168' cout << endl; return 0; }


a055asse.cpp

// nuovi concetti: dichiarazione di piu' variabili // dichiarazione e inizializzazione nel corpo del programma #include <iostream> using namespace std; int main() { int x, y1; // dichiara le variabili x e y1 x = 77; y1 = 88; int y2 = 55; // dichiara e inizializza a 55 la variabile y2 cout << x << ", " << y1 << ", " << y2 << endl; return 0; } /* Output: 77, 88, 55 */


a060iniz.cpp

// nuovi concetti: dichiarazione di piu' variabili // con inizializzazione di alcune #include <iostream> using namespace std; int main() { int n1, n2 = 55, n3, n4, n5 = 44, n6; cout << n2 << ", " << n5 << endl; return 0; } /* Output: 55, 44 */


a065asse.cpp

// nuovi concetti: assegnazione come espressione #include <iostream> using namespace std; int main() { int m, n; m = (n = 66) + 9; // (n = 66) e' un'espressione di assegnazione cout << m << ", " << n << endl; return 0; } /* Output: 75, 66 */


a070espr.cpp

// nuovi concetti: divisione tra interi // nuovi elementi: / #include <iostream> using namespace std; int main() { cout << "2 + 5 * 7 / 2 = " << 2 + 5 * 7 / 2 // visualizza il risultato (19) << endl; // e poi va a capo cout << "(2 + 5) * 7 / 2 = " << (2 + 5) * 7 / 2 // risultato: 24 << endl; return 0; } /* Output: 2 + 5 * 7 / 2 = 19 (2 + 5) * 7 / 2 = 24 */


a075oper.cpp

// nuovi elementi: % #include <iostream> using namespace std; int main() { int m = -14, n = 5, q = m/n, r = m%n; cout << "m = " << m << endl; cout << "n = " << n << endl; cout << "q = " << q << endl; cout << "r = " << r << endl; cout << "q*n + r = " << "(" << q << ")*(" << n << ") + " << r << " = " << q*n + r << " = " << m << endl; return 0; } /* Output: m = -14 n = 5 q = -2 r = -4 q*n + r = (-2)*(5) + -4 = -14 = -14 */


a080cin.cpp

// nuovi concetti: input da tastiera // nuovi elementi: cin, >> #include <iostream> using namespace std; int main() { int x; cout << "Introduci un numero intero: "; cin >> x; // assegna ad x il numero intero // introdotto da tastiera // cin sta per "console input" e rappresenta // il flusso standard di input; // il simbolo >> e' l'operatore di input cout << "Il quadrato di " << x << " e' " << x*x << endl; // visualizza il quadrato del numero introdotto da tastiera return 0; }


a085if.cpp

// nuovi concetti: selezione, espressione di relazione // nuovi elementi: if, < #include <iostream> using namespace std; int main() { int n; cout << "Introduci un numero intero: "; cin >> n; if (n < 0) n = -n; // se n<0 allora cambia segno cout << "valore assoluto = " << n << endl; return 0; }


a090else.cpp

// nuovi concetti: selezione a due vie // nuovi elementi: ==, else #include <iostream> using namespace std; int main() { int n; cout << "Introduci un numero intero: "; cin >> n; cout << "Il numero " << n << " e' "; if (n % 2 == 0) cout << "pari"; // se n e' divisibile per 2 // visualizza 'pari' else cout << "dispari"; // altrimenti visualizza 'dispari' cout << endl; return 0; }


a095else.cpp

// nuovi concetti: diverso da zero equivale a vero #include <iostream> using namespace std; int main() { int n; cout << "Introduci un numero intero: "; cin >> n; cout << "Il numero " << n << " e' "; if (n % 2) cout << "dispari"; else cout << "pari"; cout << endl; return 0; }


a100cort.cpp

// nuovi concetti: operatore AND // cortocircuito nel calcolo di una espressione logica // nuovi elementi: >, && #include <iostream> using namespace std; int main() { int n, d; cout << "Introduci due interi positivi: "; cin >> n >> d; if (d > 0 && n%d == 0) cout << d << " e' un divisore di " << n << endl; else cout << d << " non e' un divisore di " << n << endl; return 0; }


a105whil.cpp

// nuovi concetti: iterazione // nuovi elementi: while #include <iostream> using namespace std; // Calcola il Massimo Comune Divisore (MCD) di due numeri interi // applicando l'algoritmo di Euclide int main() { int numeroA, numeroB, a, b, r; // dichiara 5 variabili di tipo int cout << "----- Massimo Comune Divisore -----\n"; cout << "Introdurre due numeri interi positivi:\n"; cin >> numeroA >> numeroB; // legge due interi da tastiera e li assegna // rispettivamente a numeroA e numeroB a = numeroA; // assegna ad a il valore di numeroA b = numeroB; // assegna a b il valore di numeroB r = a % b; // assegna a r il resto di a diviso b while (r > 0){ // mentre r e' maggiore di 0 continua ad eseguire // le seguenti istruzioni (racchiuse tra '{' e '}') a = b; b = r; r = a % b; } // il ciclo 'while' e' terminato: r non e' piu' maggiore di 0 // (cioe', e' uguale a 0) => b e' il MCD cout << "MCD (" << numeroA << "," << numeroB << ") = " << b << endl; return 0; }


a110dowh.cpp

// nuovi elementi: do-while #include <iostream> using namespace std; // Calcola il Massimo Comune Divisore (MCD) di due numeri interi int main() { int a, b, r; cout << "----- Massimo Comune Divisore -----\n"; cout << "Introdurre due numeri interi positivi:\n"; cin >> a >> b; cout << "MCD (" << a << "," << b << ") = "; do{ // esegui le istruzioni racchiuse tra '{' e '}' r = a % b; // ... a = b; b = r; // ... } while (r > 0); // mentre r e' maggiore di 0 // il ciclo 'do-while' e' terminato: r e' uguale a 0 => a e' il MCD cout << a << endl; return 0; }


a115mcd.cpp

// nuovi concetti: cicli annidati #include <iostream> using namespace std; // Calcola il Massimo Comune Divisore (MCD) di due numeri interi int main() { int a, b, r; cout << "----- Massimo Comune Divisore -----\n"; cout << "Introdurre due numeri interi positivi (0 0 per finire):\n"; cin >> a >> b; while (a > 0 && b > 0) // il ciclo termina quando il prodotto da' 0 { // inizio blocco del ciclo esterno cout << "MCD (" << a << "," << b << ") = "; do{ // inizio blocco del ciclo interno r = a % b; a = b; b = r; } // fine blocco del ciclo interno while (r); cout << a << endl; cin >> a >> b; } // fine blocco del ciclo esterno return 0; }


a120incr.cpp

// nuovo concetti: preincremento e postincremento // nuovi elementi: ++ #include <iostream> using namespace std; int main() { int m = 66, n; n = ++m; cout << "m = " << m << ", n = " << n << endl; n = m++; cout << "m = " << m << ", n = " << n << endl; cout << "m = " << m++ << endl; cout << "m = " << m << endl; cout << "m = " << ++m << endl; return 0; } /* Output: m = 67, n = 67 m = 68, n = 67 m = 68 m = 69 m = 70 */


a125blok.cpp

// nuovi concetti: variabile locale al blocco #include <iostream> using namespace std; int main() { int x, y; cout << "Introduci due interi: "; cin >> x >> y; if (x > y){ int temp = x; // la variabile temp e' locale al blocco x = y; // racchiuso tra le parentesi graffe y = temp; } cout << "I due interi ordinati sono: "; cout << x << " " << y << endl; // cout << temp; // questa istruzione produrrebbe un errore di compilazione return 0; }


a130over.cpp

// nuovi concetti: overflow (traboccamento) #include <iostream> using namespace std; int main() { int n = 2147483646; cout << n++ << endl; cout << n++ << endl; cout << n++ << endl; cout << n++ << endl; return 0; }


a135char.cpp

// nuovi concetti: costante carattere, caratteri come interi // nuovi elementi: char #include <iostream> using namespace std; int main() { char c = 'A'; cout << c++ << " "; cout << c++ << " "; cout << c++ << " "; cout << c++ << endl; c = 97; // 97 e' il codice ASCII della lettera 'a' cout << c++ << " "; cout << c++ << " "; cout << c++ << " "; cout << c++ << endl; return 0; } /* Output: A B C D a b c d */


a140char.cpp

// nuovi concetti: type cast #include <iostream> using namespace std; int main() { char c = 'A'; cout << c << " " << int(c) << endl; c++; cout << c << " " << int(c) << endl; c++; cout << c << " " << int(c) << endl; return 0; } /* Output: A 65 B 66 C 67 */


a145char.cpp

// nuovi concetti: input di caratteri #include <iostream> using namespace std; int main() { char first, last; cout << "Introduci le iniziali del tuo nome e cognome: "; cin >> first >> last; cout << "Salve, " << first << ". " << last << ".!\n"; return 0; }


a150limi.cpp

// nuovi concetti: modificatori (short, long, signed, unsigned) #include <iostream> using namespace std; int main() { cout << "minimum char = " << CHAR_MIN << endl; cout << "maximum char = " << CHAR_MAX << endl; cout << "minimum short = " << SHRT_MIN << endl; cout << "maximum short = " << SHRT_MAX << endl; cout << "minimum int = " << INT_MIN << endl; cout << "maximum int = " << INT_MAX << endl; cout << "minimum long = " << LONG_MIN << endl; cout << "maximum long = " << LONG_MAX << endl; cout << "minimum signed char = " << SCHAR_MIN << endl; cout << "maximum signed char = " << SCHAR_MAX << endl; cout << "maximum unsigned char = " << UCHAR_MAX << endl; cout << "maximum unsigned short = " << USHRT_MAX << endl; cout << "maximum unsigned int = " << UINT_MAX << endl; cout << "maximum unsigned long = " << ULONG_MAX << endl; return 0; }


a155for.cpp

// nuovi elementi: for, <= #include <iostream> using namespace std; int main() { int n; // for (<inizializzazione>; <condizione di iterazione>; <aggiornamento>) <istruzione> for (n = 1; n <= 10; n++) cout << n << " "; cout << endl; return 0; } /* Output: 1 2 3 4 5 6 7 8 9 10 */


a160asci.cpp

// nuovi concetti: tabella ASCII #include <iostream> using namespace std; int main(){ int ascii_val; for (ascii_val = 32; ascii_val < 256; ascii_val++) { if (ascii_val % 4 == 0) cout << '\n'; cout << '\t' << ascii_val << '\t' << char(ascii_val); } cout << endl; return 0; }


a165tabe.cpp

// nuovi concetti: variabile dichiarata nell'inizializzazione del for #include <iostream> using namespace std; int main() { int n; cout << "Introduci un numero intero: "; cin >> n; cout << "Tabellina del " << n << endl; for (int m = 1; m <= 10; m++) cout << n * m << endl; return 0; }


a170for.cpp

// nuovi elementi: operatore "," #include <iostream> using namespace std; int main() { int m, n; for (m = 1, n = 8; m < n; m++, n--) cout << "m = " << m << ", n = " << n << endl; return 0; } /* Output: m = 1, n = 8 m = 2, n = 7 m = 3, n = 6 m = 4, n = 5 */


a175for.cpp

// nuovi concetti: for ( ; ; ) // nuovi elementi: +=, float, break #include <iostream> using namespace std; int main() { int n, count = 0, sum = 0; cout << "Introduci interi positivi. Termina l'input con 0:\n"; for ( ; ; ) { cout << '\t' << count + 1 << ": "; cin >> n; if (n == 0) break; ++count; sum += n; } cout << "La media dei " << count << " numeri e' " << float(sum)/count << endl; return 0; }


a180for.cpp

// nuovo concetti: corpo del for vuoto #include <iostream> using namespace std; int main(){ int num, totale; for (num = 1, totale = 0; num <= 10; totale += num++); cout << "\nLa somma dei numeri da 1 a 10 e' "<< totale << endl; return 0; }


a185divi.cpp

#include <iostream> using namespace std; int main() { cout << "Calcola i divisori di un numero intero." << endl; int numero; do { cout << "Introduci un numero intero (<=0 per finire): " << endl; cin >> numero; if (numero > 0) { cout << "i divisori di " << numero << " sono: " << endl; for (int divisore = 2; divisore <= numero; divisore++) if (numero % divisore == 0) cout << divisore << endl; } cout << endl; } while (numero > 0); return 0; }


a190ando.cpp

// nuovi elementi: >=, || #include <iostream> using namespace std; int main() { int n; do { cout << "Dammi un numero tra 10 e 20." << endl; cin >> n; if (n >= 10 && n <= 20) cout << "Grazie!"; else cout << "Il tuo numero non e' compreso nell'intervallo 10-20\n"; } while (n < 10 || n > 20); return 0; }


a195depo.cpp

// nuovo concetti: variabili di tipo float #include <iostream> using namespace std; int main() { int anni, contanni; float npercento, euro, interesse_corrente_anno, interesse_totale; cout << " Calcolo dell'interesse accumulato\n"; cout << " ---------------------------------\n"; cout << "Introdurre la durata del deposito in anni (max 30), la cifra " << "depositata\n"; cout << "in euro e il tasso di interesse\n"; cin >> anni >> euro >> npercento; cout << endl << endl; if (anni<=0 || anni>30 || euro<=0 || npercento<=0) { cout << " dati forniti: anni == " << anni << ", euro == " << euro << ", npercento == " << npercento << "\n dati non validi - programma interrotto.\n"; } else { cout << " introiti su un deposito di " << euro << " euro\n" << " tenuto per " << anni << " anni\n" << " ad un interesse annuale composto del " << npercento << " percento\n" << " -------------------------------------------------------------------\n" << " numero interesse capitale interesse\n" << " anno annuale accumulato\n" << " -------------------------------------------------------------------\n"; for (contanni=1, interesse_totale=0; contanni<=anni; contanni++) { interesse_corrente_anno = (euro * npercento) / 100; interesse_totale += interesse_corrente_anno; euro += interesse_corrente_anno; cout << contanni << " " << interesse_corrente_anno << " " << euro << " " << interesse_totale << endl; } cout << " -------------------------------------------------------------------\n"; } return 0; }


a200depo.cpp

// nuovi elementi: iomanip, setw, setprecision, setf, :: #include <iostream> #include <iomanip> // permette di usare setw, setprecision e setf using namespace std; int main() { int anni, contanni; float npercento, euro, interesse_corrente_anno, interesse_totale; cout << " Calcolo dell'interesse accumulato\n"; cout << " ---------------------------------\n"; cout << "Introdurre la durata del deposito in anni (max 30), la cifra " << "depositata\n"; cout << "in euro e il tasso di interesse\n"; cin >> anni >> euro >> npercento; cout << endl << endl; if (anni<=0 || anni>30 || euro<=0 || npercento<=0) { cout << " dati forniti: anni == " << anni << ", euro == " << euro << ", npercento == " << npercento << "\n dati non validi - programma interrotto.\n"; } else { cout << " introiti su un deposito di " << setw(8) << euro << " euro\n" << " tenuto per " << setw(8) << anni << " anni\n" << " ad un interesse annuale composto del " << setw(8) << npercento << " percento\n" << " -----------------------------------------------------------------\n" << " numero interesse capitale interesse\n" << " anno annuale accumulato\n" << " -----------------------------------------------------------------\n"; // cout.setf(ios::showpoint); cout.setf(ios::fixed, ios::floatfield); for (contanni=1, interesse_totale=0; contanni<=anni; contanni++) { interesse_corrente_anno = (euro * npercento) / 100; interesse_totale += interesse_corrente_anno; euro += interesse_corrente_anno; cout << setprecision(3); cout << setw(10) << contanni; cout << setw(18) << interesse_corrente_anno; cout << setw(16) << euro; cout << setw(14) << interesse_totale << endl; } cout << " -----------------------------------------------------------------\n"; } return 0; }


a205cast.cpp

// nuovi concetti: assegnare un reale a un intero // nuovi elementi: double #include <iostream> using namespace std; int main() { double v = 1234.56789; //int n = int(v); int n = v; cout << "v = " << v << ", n = " << n << endl; v = n; cout << "v = " << v << ", n = " << n << endl; return 0; } /* Output: v = 1234.57, n = 1234 v = 1234, n = 1234 */


a210scop.cpp

// nuovi concetti: ambito di visibilita' (scope) #include <iostream> using namespace std; int main() { // inizio ambito di main() int x = 22; { // inizio ambito di blocco interno int x = 33; cout << "Nel blocco interno a main(): x = " << x << endl; } // fine ambito di blocco interno cout << "In main(): x = " << x << endl; return 0; } // fine ambito di main() /* Output: Nel blocco interno a main(): x = 33 In main(): x = 22 */


a215cond.cpp

// nuovi elementi: ?: (operatore di espressione condizionale // o operatore ternario) #include <iostream> using namespace std; int main() { int n; cout << "Introduci un numero intero: "; cin >> n; cout << "Il numero " << n << " e' " << (n % 2 ? "dispari" : "pari") << endl; return 0; }


a220aray.cpp

// nuovi concetti: array // nuovi elementi: [] #include <iostream> using namespace std; int main() { int i, a[6]; cout << "Introduci 6 numeri interi.\n"; for (i = 0; i < 6; i++) cin >> a[i]; cout << endl; for (i = 5; i >= 0; i--) cout << a[i] << endl; }


a225cost.cpp

// nuovi concetti: costanti // nuovi elementi: const #include <iostream> using namespace std; int main() { const int n = 6; // meglio usare costante! int a[n], i; cout << "Introdurre " << n << " interi\n"; for (i = 0; i < n; i++) cin >> a[i]; cout << endl; for (i = n; i > 0; i--) cout << a[i-1] << endl; }


a230aray.cpp

// nuovi concetti: inizializzazione di un array #include <iostream> using namespace std; int main() { double a[4] = {22.2, 44.4, 66.6, 88.8}; for (int i = 0; i < 4; i++) cout << "a[" << i << "] = " << a[i] << endl; } /* Output: a[0] = 22.2 a[1] = 44.4 a[2] = 66.6 a[3] = 88.8 */


a235matr.cpp

// nuovi concetti: array bidimensionale, for annidato #include <iostream> using namespace std; int main() { const int dim = 3; int i, j, m[dim][dim]; cout << "Introdurre matrice (" << dim << "x" << dim << ")\n"; for (i=0; i<dim; i++) for (j=0; j<dim; j++) cin >> m[i][j]; cout << "\nMatrice introdotta:\n"; for (i=0; i<dim; i++) { for (j=0; j<dim; j++) cout << m[i][j] << " "; cout << endl; } cout << "\nMatrice trasposta:\n"; for (i=0; i<dim; i++) { for (j=0; j<dim; j++) cout << m[j][i] << " "; cout << endl; } }


a240tdef.cpp

// nuovi elementi: typedef #include <iostream> using namespace std; int main() { const int DIM = 6; typedef int Vettore[DIM]; int i; Vettore a; cout << "Introduci " << DIM << " numeri interi.\n"; for (i=0; i<DIM; i++) cin >> a[i]; cout << endl; for (i=DIM; i>0; i--) cout << a[i-1] << endl; }


a245matr.cpp

#include <iostream> using namespace std; int main() { const int DIM = 3; typedef int Matrice[DIM][DIM]; int i, j; Matrice m, t; cout << "Introdurre matrice (" << DIM << 'x' << DIM << ")\n"; for (i=0; i<DIM; i++) { for (j=0; j<DIM; j++) cin >> m[i][j]; } for (i=0; i<DIM; i++) for (j=0; j<DIM; j++) t[i][j] = m[j][i]; cout << "\nMatrice introdotta:\n"; for (i=0; i<DIM; i++) { for (j=0; j<DIM; j++) cout << m[i][j] << " "; cout << endl; } cout << "\nMatrice trasposta:\n"; for (i=0; i<DIM; i++) { for (j=0; j<DIM; j++) cout << t[i][j] << " "; cout << endl; } }


a250strn.cpp

// nuovi concetti: array di char // nuovi elementi: sizeof() #include <iostream> using namespace std; int main() { char s[] = {'A', 'B', 'C', 'D'}; for (int i=0; i<sizeof(s); i++) cout << "s[" << i << "] = '" << s[i] << "', " << int(s[i]) << "\n"; }


a255strn.cpp

// nuovi concetti: variabile stringa #include <iostream> using namespace std; int main() { char s[] = "ABCD"; /* equivale a char s[] = {'A', 'B', 'C', 'D', '\0'}; */ for (int i=0; i<sizeof(s); i++) cout << "s[" << i << "] = '" << s[i] << "', " << int(s[i]) << "\n"; }


a260stln.cpp

// nuovi concetti: stringa vuota ("") // nuovi elementi: strlen() #include <iostream> using namespace std; int main() { char s[] = "Hello, World.\n"; cout << strlen(s) << '\n'; s[strlen(s)-1] = 0; cout << strlen(s) << '\n'; cout << strlen("Hello, ") << '\n'; cout << strlen("H") << '\n'; cout << strlen("") << '\n'; return 0; } /* Output: 14 13 7 1 0 */


a265strc.cpp

// nuovi concetti: confronto tra stringhe // nuovi elementi: strcmp() #include<iostream> using namespace std; int main(){ char a[]="Fondamenti"; char b[]="Fondamenti"; char c[]="Bertozzi"; cout << "a=[" << a << "]\n"; cout << "b=[" << b << "]\n"; cout << "c=[" << c << "]\n"; if(a==b) cout << "I valori di a e b sono uguali" << endl; else cout << "I valori di a e b sono differenti" << endl; cout << " a==b: " << (a==b) << endl; cout << " strcmp(a,b): " << strcmp(a,b) << endl; cout << " strcmp(a,c): " << strcmp(a,c) << endl; cout << " strcmp(c,a): " << strcmp(c,a) << endl; return 0; }


a270stcp.cpp

// nuovi concetti: copiare una stringa su un'altra // nuovi elementi: strcpy() #include <iostream> using namespace std; int main() { char s1[] = "ABCDEFG"; char s2[] = "XYZ"; cout << "Prima di strcpy(s1,s2):\n"; cout << "\ts1 = [" << s1 << "], lunghezza = " << strlen(s1) << endl; cout << "\ts2 = [" << s2 << "], lunghezza = " << strlen(s2) << endl; strcpy(s1,s2); cout << "Dopo strcpy(s1,s2):\n"; cout << "\ts1 = [" << s1 << "], lunghezza = " << strlen(s1) << endl; cout << "\ts2 = [" << s2 << "], lunghezza = " << strlen(s2) << endl; }


a275stct.cpp

// nuovi concetti: concatenazione di stringhe // nuovi elementi: strcat() #include <iostream> using namespace std; int main() { char s1[11] = "ABCDEFG"; char s2[] = "XYZ"; cout << "Prima di strcat(s1,s2):\n"; cout << "\ts1 = [" << s1 << "], lunghezza = " << strlen(s1) << endl; cout << "\ts2 = [" << s2 << "], lunghezza = " << strlen(s2) << endl; strcat(s1,s2); cout << "Dopo strcat(s1,s2):\n"; cout << "\ts1 = [" << s1 << "], lunghezza = " << strlen(s1) << endl; cout << "\ts2 = [" << s2 << "], lunghezza = " << strlen(s2) << endl; }


a280cin.cpp

// nuovi concetti: risultato di cin, ^Z #include <iostream> using namespace std; int main() { int n, sum=0; while (cin >> n) sum += n; cout << "somma = " << sum << endl; }


a285strl.cpp

#include <iostream> using namespace std; int main() { char s[] = "ABCDEFG"; cout << "strlen(" << s << ") = " << strlen(s) << endl; char t[] = ""; cout << "strlen(\"\") = " << strlen(t) << endl; char buffer[80]; cout << "Introduci stringa: "; cin >> buffer; cout << "strlen(" << buffer << ") = " << strlen(buffer) << endl; }


a290getl.cpp

// nuovi elementi: cin.getline() #include <iostream> using namespace std; int main() { char line[80]; do { cin.getline(line, 80); if (line[0]) cout << "\t[" << line << "]\n"; } while (line[0]); }


a295maca.cpp

// nuovi concetti: array di stringhe #include <iostream> using namespace std; int main() { char name[8][24]; int count; cout << "Introduci non piu' di 8 nomi di non piu' di 23 caratteri:\n"; for (count=0; count < 8 && cin.getline(name[count],24); ++count) ; cout << "I nomi sono:\n"; for (int i = 0; i < count; i++) cout << '\t' << i << ". [" << name[i] << "]" << endl; }


a300cing.cpp

// nuovi elementi: cin.get() #include <iostream> using namespace std; int main() { char c; while (cin.get(c)) cout << "[" << c << "]\n"; cout << endl; }


a305cget.cpp

#include <iostream> using namespace std; int main() { char ch; int count = 0; while (cin.get(ch)) if (ch == 'e') ++count; cout << "La lettera \"e\" e' stata contata " << count << " volte.\n"; }


a310cput.cpp

// nuovi elementi: cout.put(), toupper() #include <iostream> using namespace std; int main() { char ch, pre = '\n'; while (cin.get(ch)) { if (pre == ' ' || pre == '\t' || pre == '\n') cout.put(toupper(ch)); else cout.put(ch); pre = ch; } }


a315cing.cpp

// nuovi elementi: cin.get() senza parametri #include <iostream> using namespace std; int main() { char c; while ((c = cin.get()) != EOF) cout << c; cout << endl; }


a320eof.cpp

#include <iostream> using namespace std; int main() { cout << "EOF = " << EOF << endl; } /* Output: EOF = -1 */


a325cing.cpp

// nuovi elementi: cin.get() con 2 parametri #include <iostream> using namespace std; int main() { char buffer[80]; cin.get(buffer,8); cout << "[" << buffer << "]\n"; cin.get(buffer,sizeof(buffer)); cout << "[" << buffer << "]\n"; }


a330mani.cpp

// nuovi concetti: manipolatori di stream // nuovi elementi: hex, dec, oct, \t #include <iostream> using namespace std; int main() { int n = 510; cout << " \tEsadecimale:\t " << hex << n << "\t " << n << "\n\t Decimale:\t " << dec << n << "\t " << n << "\n\t Ottale:\t " << oct << n << "\t " << n << endl; cout << "Introduci un intero in ottale: "; cin >> oct >> n; cout << " \tEsadecimale:\t " << hex << n << "\t " << n << "\n\t Decimale:\t " << dec << n << "\t " << n << "\n\t Ottale:\t " << oct << n << "\t " << n << endl; cout << "Introduci un intero in esadecimale: "; cin >> hex >> n; cout << " \tEsadecimale:\t " << hex << n << "\t " << n << "\n\t Decimale:\t " << dec << n << "\t " << n << "\n\t Ottale:\t " << oct << n << "\t " << n << endl; return 0; }


a335sqrt.cpp

// nuovi elementi: sqrt #include <iostream> using namespace std; int main() { for (float i=0; i < 10; i++) cout << '\t' << i << '\t' << sqrt(i) << endl; return 0; } /* Output: 0 0 1 1 2 1.41421 3 1.73205 4 2 5 2.23607 */


a340rand.cpp

// nuovi elementi: rand #include <iostream> #include <iomanip> using namespace std; // Questo programma genera dei numeri a caso (random) int main(){ cout << "\n"; for (int i = 1; i <= 100; i++) { cout << setw(7) << rand(); if (i%10 == 0) cout << endl; } return 0; }


a345rand.cpp

// nuovi elementi: RAND_MAX #include <iostream> using namespace std; // Questo programma cerca di valutare l'intervallo dei numeri random int main() { int n, min, max; min = max = n = rand(); for (long i = 2; i <= 100000; i++) { n = rand(); if (n < min) min = n; if (n > max) max = n; } cout << "\nminimo = " << min << "\nmassimo = " << max << endl; cout << "\nRAND_MAX = " << RAND_MAX << endl; return 0; }


a350rand.cpp

// nuovi elementi: srand, time #include <iostream> using namespace std; int main(){ srand(time(0)); // inizializza il seme per il calcolo dei numeri random for (int i = 1; i <= 10; i++) { cout << rand() << endl; } cout << endl; return 0; }


a355rand.cpp

#include <iostream> using namespace std; // Questo programma genera numeri casuali (interi) nell'intervallo [min, max] int main(){ srand(time(0)); int min, max, quanti, i; cout << "Introduci minimo e massimo: "; cin >> min >> max; int range = max - min + 1; cout << "Quanti numeri vuoi generare? "; cin >> quanti; for (i = 0; i < quanti; i++) { int r = rand()%range + min; cout << r << " "; } cout << endl; return 0; }


a360dadi.cpp

// Simulazione del lancio di due dadi #include <iostream> #include <iomanip> using namespace std; int main() { unsigned long nlanci, i, max, a[11] = {0}; unsigned int j; srand(time(0)); cout << "Quanti lanci? "; cin >> nlanci; for (i=0; i<nlanci; i++) a[rand()%6 + rand()%6]++; for (max=a[0],i = 1; i < 11; i++) if (a[i]>max) max=a[i]; cout << "Risultato dei lanci:\n"; for (i = 0; i < 11; i++) { cout << setw(3) << i+2 << ":" << setw(9) << a[i] << " "; for (j=1;j<=a[i]*60/max;j++) cout << '*'; cout << endl; } cout << " "; for (j=1;j<=6;j++) cout << "---------+"; cout << endl; }


a365sqr.cpp

// nuovi concetti: definizione di funzione #include <iostream> using namespace std; // La seguente funzione 'sqr' restituisce il quadrato del suo argomento int sqr(int n) { return n * n; } int main() { int i; for (i=0; i < 6; i++) cout << '\t' << i << '\t' << sqr(i) << endl; cout << endl; return 0; } /* Output: 0 0 1 1 2 4 3 9 4 16 5 25 */


a370sqr.cpp

// nuovi concetti: prototipo di funzione #include <iostream> using namespace std; int sqr(int); // prototipo della funzione 'sqr' int main() { for (int i=0; i < 6; i++) cout << '\t' << i << '\t' << sqr(i) << endl; cout << endl; return 0; } int sqr(int n) { return n * n; }


a375max.cpp

// nuovi concetti: definizione di funzione con piu' parametri e piu' return #include <iostream> using namespace std; int massimo(int, int); int main(){ int m, n; do { cout << "Introduci due interi (0 0 per finire): "; cin >> m >> n; if (m || n) cout << "Il massimo tra " << m << " e " << n << " e' " << massimo(m,n) << endl; } while (m || n); return 0; } int massimo(int x, int y){ if (x < y) return y; return x; }


a380mcd.cpp

#include <iostream> using namespace std; int mcd(int,int); int main() { int a, b; cout << "----- Massimo Comune Divisore -----\n"; cout << "Introdurre due numeri interi positivi (0 0 per finire):\n"; cin >> a >> b; while (a > 0 && b > 0) { cout << "MCD (" << a << "," << b << ") = " << mcd(a,b) << endl; cin >> a >> b; } return 0; } int mcd(int a, int b) { // Calcola il Massimo Comune Divisore (MCD) di a e b int r; do { r = a % b; a = b; b = r; } while (r > 0); return a; }


a385char.cpp

// nuovi concetti: espressione come argomento // nuovi elementi: void, isdigit(), islower(), ecc... #include <iostream> using namespace std; void printCharCategory(char c, int noprint) { cout << "Il carattere ["; if (noprint) cout << "---"; else cout << c; cout << "] e' un carattere "; if (isdigit(c)) cout << "numerico.\n"; else if (islower(c)) cout << "lettera minuscola.\n"; else if (isupper(c)) cout << "lettera maiuscola.\n"; else if (isspace(c)) cout << "di spaziatura.\n"; else if (iscntrl(c)) cout << "di controllo.\n"; else if (ispunct(c)) cout << "d'interpunzione.\n"; else cout << "Errore.\n"; return; } int main() { for (int c = 0; c < 128; c++) { cout << c << ": "; printCharCategory(c,c==8||c==10||c==13||c==26); if (c%20 == 19) getchar(); // funziona anche con tasti speciali! } return 0; }


a390rife.cpp

// nuovi concetti: passaggio dei parametri per riferimento #include <iostream> using namespace std; void swap(float & x, float & y) { float temp = x; x = y; y = temp; } int main() { float a = 27, b = -5.041; cout << a << " " << b << endl; swap(a,b); cout << a << " " << b << endl; return 0; } /* Output: 27 -5.041 -5.041 27 */


a395fraz.cpp

// nuovi elementi: /=, ignore() #include <iostream> using namespace std; void leggi(int&, int&, int&, int&); int min_com_mul(int, int); int mas_com_div(int, int); void semplifica(int&, int&); void scrivi(int, int); int main() { int n1, d1, n2, d2, num, den ; char c; do { leggi(n1,d1,n2,d2); cout << endl; cout << n1 << "/" << d1 << " + " << n2 << "/" << d2 << " = "; den = min_com_mul(d1,d2); num = den / d1 * n1 + den / d2 * n2; semplifica(num,den); scrivi(num,den); cout << endl << endl; do { cout << "Ancora? (S/N)"; c = toupper(cin.get()); cin.ignore(80,'\n'); } while ((c != 'S') && (c != 'N')); cout << endl << endl; } while (c == 'S'); cout << "The End!" << endl; } void leggi(int& n1, int& d1, int& n2, int& d2) { do { cout << "Introduci numeratore e denominatore della prima frazione" << endl; cout << "diversi da 0 e separati da uno spazio" << endl; cin >> n1 >> d1; } while (n1*d1 == 0); cin.ignore(80,'\n'); // salta (ignora) fino a 80 caratteri o fino al newline do { cout << "Introduci numeratore e denominatore della seconda frazione" << endl; cout << "diversi da 0 e separati da uno spazio" << endl; cin >> n2 >> d2; } while (n2*d2 == 0); cin.ignore(80,'\n'); } int min_com_mul(int d1, int d2) { int ma = d1, mb = d2; while ( ma != mb ) ma > mb ? (mb += d2) : (ma += d1); return ma; } int mas_com_div(int nn, int dd) { while ( dd ) { int resto = nn % dd; nn = dd; dd = resto; } return nn; } void semplifica(int& num, int& den) { int mcd = mas_com_div(num,den); num /= mcd; den /= mcd; } void scrivi(int num, int den) { cout << num; if ( den != 1 ) cout << "/" << den; }


a400para.cpp

// nuovi concetti: confronto fra il passaggio dei parametri // per valore e per riferimento #include <iostream> using namespace std; int n; void P(int x) { x += 1; cout << n << " " << x << " "; } void Q(int& x) { x += 1; cout << n << " " << x << " "; } int main() { n = 3; P(n); cout << n << endl; n = 3; Q(n); cout << n << endl; } /* Output: 3 4 3 4 4 4 */


a405ambi.cpp

// nuovi concetti: ambito degli identificatori #include <iostream> using namespace std; int a, b; void P(void) { int a = b+1; b = a+1; } void Q() { int b = a-1; a = b-1; } int main() { b = a = 10; P(); Q(); cout << "a = " << a << ", b = " << b << endl; } /* Output: a = 8, b = 12 */


a410scop.cpp

// nuovi concetti: visibilita' #include <iostream> using namespace std; int x; void P1() { cout << x << endl; } void P2() { int x = 23; x++; P1(); } int main() { x = 12; P2(); } /* Output: 12 */


a415visi.cpp

// nuovi concetti: variabile globale, ambiti di visibilita' #include <iostream> using namespace std; void f(); void g(); int x = 11; int main() { int x = 22; { int x = 33; cout << "Nel blocco interno a main(): x = " << x << endl; } cout << "In main(): x = " << x << endl; f(); g(); } void f() { int x = 44; cout << "In f(): x = " << x << endl; } void g() { cout << "In g(): x = " << x << endl; } /* Output: Nel blocco interno a main(): x = 33 In main(): x = 22 In f(): x = 44 In g(): x = 11 */


a420side.cpp

// nuovi concetti: effetti collaterali // nuovi elementi: *= #include <iostream> using namespace std; int f(int& a) { a *= 2; return a; } int main() { int b = 1; cout << 2*f(b) << " "; b = 1; cout << f(b) + f(b) << endl; } /* Output: 4 6 */


a425prim.cpp

// nuovi elementi: bool //********************************************************************** //* * //* Controlla se "n" e' un numero primo (2<=n<=nmax). * //* * //********************************************************************** #include <iostream> using namespace std; const int NMAX = 10000; bool datobuono (int& n, int massimo) { //***************************************************************** //* * //* Ottiene il successivo dato valido, se esiste, saltando * //* eventuali valori che siano al di fuori dell'intervallo * //* permesso. Il valore trovato, se c'e', ritorna attraverso * //* il parametro riferimento "n". Se si preme ^Z, o si * //* introduce un carattere non accettabile come intero, la * //* funzione restituisce "falso". Il parametro valore * //* "massimo" determina l'intervallo accettabile dei dati. * //* * //***************************************************************** bool trovato = false; // abbiamo trovato un "n" valido? while ( (!trovato) && (cin >> n) ) if ( (n>=2) && (n<=massimo) ) trovato = true; else cout << n << " fuori limiti: ignorato\n"; return trovato; } // datobuono bool decidi (int n) { //**************************************************************** //* * //* Determina se "n" e' un numero primo. * //* Questo sottoprogramma ha un parametro valore; usa due * //* variabili locali, ma non fa riferimento a nessuna * //* variabile globale. * //* * //**************************************************************** int provadivisore, // possibili divisori di "n" limite= int(sqrt(float(n))); // il piu' grande divisore possibile di "n" for (provadivisore = 2; (provadivisore<=limite) && (n % provadivisore); provadivisore++); return (provadivisore > limite); } // decidi void mostra (int numero, bool estprimo) { //*************************************************************** //* * //* Mostra la decisione del programma ("estprimo") sul * //* numero corrente. Questo sottoprogramma ha due parametri * //* valore; non usa variabili locali ne' fa riferimento * //* a variabili globali * //* * //*************************************************************** cout << numero << (estprimo ? "" : " non") << " e' un numero primo" << endl; } // mostra int main() { // programma principale int n; // il valore da controllare (dato) cout << "Controlla se numeri positivi non superiori a " << NMAX << " sono primi (^Z per finire):\n\n"; while (datobuono(n,NMAX)) mostra(n,decidi(n)); }


a430prim.cpp

// nuovi concetti: funzione con diversi punti di uscita #include <iostream> using namespace std; int NumeroPrimo(int n) { float sqrtp = sqrt(float(n)); if (n < 2) return 0; if (n == 2) return 1; if (n % 2 == 0) return 0; for (int d = 3; d <= sqrtp; d += 2) if (n % d == 0) return 0; return 1; } int main() { for (int n = 1; n < 50; n++) if (NumeroPrimo(n)) cout << n << " "; cout << endl; }


a435leap.cpp

// nuovi concetti: funzione con una sola istruzione (return) // precedenza degli operatori #include <iostream> using namespace std; bool bisestile(int y) { return y % 4 == 0 && (y % 100 != 0 || y % 400 == 0); } int main() { int anno; do { cout << "Introdurre anno (0 per finire): "; cin >> anno; if (anno > 0) cout << anno << (bisestile(anno) ? " " : " non ") << "e' un anno bisestile.\n"; } while (anno > 0); }


a440retu.cpp

// nuovi concetti: while (true) ... // nuovi elementi: \a (segnale sonoro - beep) #include <iostream> using namespace std; int age(void) { int n; while (true) { cout << "Introdurre l'eta': "; cin >> n; if (n < 0) cout << "\a\tL'eta' non puo' essere negativa."; else if (n > 120) cout << "\a\tL'eta' non puo' essere oltre 120."; else return n; cout << "\n\tProva ancora.\n"; } } int main() { int a = age(); cout << "\nL'eta' e' " << a <<" anni.\n"; }


a445csnt.cpp

// nuovi concetti: parametri costanti #include <iostream> using namespace std; void f(int x, int& y, const int z) { x += z; y += z; // z++; // questa istruzione produrrebbe un errore di compilazione! cout << "x = " << x << ", y = " << y << ", z = " << z << endl; } int main() { int a = 22, b = 33, c = 44; cout << "a = " << a << ", b = " << b << ", c = " << c << endl; f(a,b,c); cout << "a = " << a << ", b = " << b << ", c = " << c << endl; } /* Output: a = 22, b = 33, c = 44 x = 66, y = 77, z = 44 a = 22, b = 77, c = 44 */


a450aray.cpp

// nuovi concetti: passaggio di array a funzioni #include <iostream> using namespace std; const int size = 100; void getArray(double [], int&); void printArray(const double [], const int); int main() { double a[size]; int n; getArray(a,n); cout << "L'array ha " << n << " elementi.\nQuesti sono:\n"; printArray(a,n); } void getArray(double a[], int& n) { cout << "Introduci i dati. Termina con 0:\n"; for (n = 0; n < size; n++) { cout << n << ": "; cin >> a[n]; if (a[n] == 0) break; } } void printArray(const double a[], const int n) { for (int i = 0; i < n; i++) cout << '\t' << i << ": " << a[i] << endl; }


a455sovr.cpp

// nuovi concetti: sovrapposizione di funzioni (function overloading) #include <iostream> using namespace std; int max(int, int); int max(int, int, int); double max(double, double); int main() { cout << max(99,77) << " " << max(55,66,33) << " " << max(3.4,7.2) << endl; } int max(int x, int y) { return (x > y ? x : y); } int max(int x, int y, int z) { int m = (x > y ? x : y); return (z > m ? z : m); } double max(double x, double y) { return (x > y ? x : y); } /* Output: 99 66 7.2 */


a460exit.cpp

// nuovi elementi: exit() #include <iostream> using namespace std; double inverso(double x) { if (x == 0) exit(1); return 1.0/x; } int main() { double x; cout << "Introdurre un numero: "; cin >> x; cout << "1/" << x << " = " << inverso(x) << endl; }


a465dflt.cpp

// nuovi concetti: argomenti di default #include <iostream> using namespace std; double p(double, double, double =0, double =0, double =0); int main() { double x = 2.0003; cout << "p(x,7) = " << p(x,7) << endl; cout << "p(x,7,6) = " << p(x,7,6) << endl; cout << "p(x,7,6,5) = " << p(x,7,6,5) << endl; cout << "p(x,7,6,5,4) = " << p(x,7,6,5,4) << endl; } double p(double x, double a0, double a1, double a2, double a3) { return a0 + (a1 + (a2 + a3*x)*x)*x; } /* Output: p(x,7) = 7 p(x,7,6) = 19.0018 p(x,7,6,5) = 39.0078 p(x,7,6,5,4) = 71.0222 */


a470peek.cpp

// nuovi elementi: cin.peek() #include <iostream> using namespace std; int nextInt(); int main() { int m = nextInt(), n = nextInt(); cin.ignore(80,'\n'); cout << m << " + " << n << " = " << m+n << endl; } int nextInt() { char ch; int n = 0; while ((ch = cin.peek()) != EOF) if (ch >= '0' && ch <= '9') { cin >> n; break; } else cin.get(ch); return n; }


a475ofst.cpp

// nuovi elementi: <fstream>, ofstream, close // nuovi concetti: scrittura su file #include <fstream> using namespace std; int main() { ofstream fout("miofile.txt"); // apro il file fout << "Ho preso 10 nel quiz e 18 nella prova pratica!" << endl; // scrivo sul file fout.close(); // chiudo il file }


a480ifst.cpp

// nuovi elementi: ifstream // nuovi concetti: lettura da file #include <iostream> #include <fstream> using namespace std; int main() { ifstream fin("miofile.txt"); // apro il file char testo[80]; fin.getline(testo, 80); // leggo una riga dal file fin.close(); // chiudo il file cout << testo << endl; // visualizzo la riga letta }


a485peek.cpp

// nuovi concetti: fin.peek() #include <iostream> #include <fstream> using namespace std; int nextInt(); ifstream fin("miofile.txt"); // apro il file int main() { int m = nextInt(), n = nextInt(); fin.close(); cout << m << " + " << n << " = " << m+n << endl; } int nextInt() { char ch; int n = 0; while ((ch = fin.peek()) != EOF) if (ch >= '0' && ch <= '9') { fin >> n; break; } else fin.get(ch); return n; }


a490ofst.cpp

// nuovi elementi: cerr #include <iostream> #include <fstream> using namespace std; int main() { ofstream outfile("voti.dat"); if (!outfile) { cerr << "Errore: file output non puo' venire aperto.\n"; exit(1); } char matricola[9], name[16]; int voto; cout << "nome matricola voto (^Z per finire)\n"; cout << "\t1: "; int n = 1; while (cin >> name >> matricola >> voto) { outfile << name << " " << matricola << " " << voto << endl; cout << '\t' << ++n << ": "; } outfile.close(); }


a495ifst.cpp

#include <iostream> #include <fstream> using namespace std; int main() { ifstream infile("voti.dat"); if (!infile) { cerr << "Errore: file input non puo' venire aperto.\n"; exit(1); } char nmatr[9], name[16]; int voto, sum = 0, count = 0; while (infile >> name >> nmatr >> voto) { cout << name << "," << nmatr << "," << voto << endl; sum += voto; ++count; } infile.close(); cout << "La votazione media e' " << float(sum)/count << endl; }


a500fapp.cpp

// nuovi elementi: ios::app // nuovi concetti: aggiunta a un file #include <fstream> using namespace std; int main() { ofstream fout("miofile.txt", ios::app); // il file e' aperto in modalita' append fout << "Questa e' l'unica riga del file?" << endl; fout.close(); }


a505cont.cpp

// nuovi concetti: ricorsione #include <iostream> using namespace std; void conta(int n) { if ( n > 0 ) { cout << n << " "; conta(n-1); // chiamata ricorsiva } } int main() { conta(10); cout << endl; } /* Output: 10 9 8 7 6 5 4 3 2 1 */


a510cont.cpp

#include <iostream> using namespace std; void conta(int n) { if ( n > 0 ) { conta(n-1); cout << n << " "; } } int main() { conta(10); cout << endl; } /* Output: 1 2 3 4 5 6 7 8 9 10 */


a515mcdr.cpp

#include <iostream> using namespace std; int MCD(int m, int n) { int r = m % n; if (r == 0) return n; else return MCD(n,r); } int main() { int a, b; cout << "----- Massimo Comune Divisore -----\n"; cout << "Introdurre due numeri interi positivi (0 0 per finire):\n"; cin >> a >> b; while (a > 0 && b > 0) { /* il ciclo termina quando almeno uno dei due numeri e' 0 */ cout << "MCD (" << a << "," << b << ") = " << MCD(a,b) << endl << endl; cin >> a >> b; } }


a520fact.cpp

/* prova di due sottoprogrammi per il calcolo del fattoriale: uno non ricorsivo, l'altro ricorsivo */ // nuovi elementi: long double #include <iostream> using namespace std; long double fattoriale1 (int n) { /***********************************************/ /* */ /* Calcola n! per "n" intero positivo. */ /* Questo sottoprogramma e' non ricorsivo */ /* */ /***********************************************/ long double partfact; for (partfact = 1; n > 1; partfact *= n--) ; return partfact; } long double fattoriale2 (int n) { /***********************************************/ /* */ /* Calcola n! per "n" intero positivo. */ /* Questo sottoprogramma e' ricorsivo */ /* */ /***********************************************/ return n == 1 ? 1 : n*fattoriale2(n-1); } int main() { int n; cout << "Calcolo del fattoriale\n"; do { cout << "Introdurre un numero intero positivo: "; cin >> n; if (n>0) { cout << n << "! calcolato in due modi:" << endl; cout << fattoriale1(n) << " - non ricorsivo" << endl; cout << fattoriale2(n) << " - ricorsivo" << endl; } } while (n>0); }


a525indi.cpp

#include <iostream> using namespace std; void AllIndietro() { int numero; cout << "Dammi un numero (0 per finire): "; cin >> numero; if (numero) AllIndietro(); cout << numero << endl; } int main() { AllIndietro(); }


a530indi.cpp

#include <iostream> using namespace std; int numero; void AllIndietro() { cout << "Dammi un numero (0 per finire): "; cin >> numero; if (numero) AllIndietro(); cout << numero << endl; } int main() { AllIndietro(); }


a535hano.cpp

/* Scrive la sequenza richiesta per risolvere il problema */ /* della "Torre di Hanoi" */ #include <iostream> using namespace std; unsigned long numeromosse; /* numero di mosse */ void muovidisco (int, int); void muovitorre (int, int, int); int main() { int totale; /* numero di dischi */ cout << "Torre di Hanoi\n"; cout << "Quanti dischi? "; cin >> totale; numeromosse = 0; muovitorre (totale,1,3); cout << "\nNumero totale mosse per " << totale << " dischi = " << numeromosse << endl; } void muovitorre (int altezza, int partenza, int arrivo) { /* Muove una torre di altezza pari ai dischi dalla partenza */ /* all'arrivo */ if (altezza > 0) { int ausiliario = 6-partenza-arrivo; muovitorre (altezza - 1,partenza,ausiliario); muovidisco (partenza,arrivo); muovitorre (altezza - 1,ausiliario,arrivo); } } void muovidisco (int sorgente, int destinazione) { /* Scrive e muove da sorgente a destinazione */ numeromosse++; cout << numeromosse << ": " << sorgente << " -> " << destinazione << endl; }


a540bino.cpp

/* Coefficienti binomiali o Triangolo di Pascal o Triangolo di Tartaglia */ #include <iostream> #include <iomanip> using namespace std; const int NROWS = 10; int binomial (int n, int k) { return k==0 || k==n ? 1 : binomial(n-1,k-1) + binomial(n-1,k); } int main() { cout << endl; for (int i = 0; i < NROWS; i++) { int j; for (j = 0; j<(NROWS-i)*3+1; j++) cout << " "; for (j = 0; j <= i; j++) cout << setw(6) << binomial(i,j); cout << endl; } }


a545bina.cpp

/****************************************************************************/ /* */ /* Visualizza la rappresentazione in base 2 di un intero "n". */ /* */ /****************************************************************************/ #include <iostream> using namespace std; void binary (int n) { if (n > 0) { binary(n / 2); cout << n % 2; } } int main() { cout << "Conversione di numeri interi positivi da decimale a binario\n"; cout << "-----------------------------------------------------------\n"; int n; do { cout << "Introdurre numero (<=0 per finire): "; cin >> n; if (n > 0) binary(n); cout << endl; } while (n > 0); }


a550rice.cpp

// nuovi concetti: algoritmo di ricerca sequenziale #include <iostream> using namespace std; int main() { const int n = 10; int i, x, a[n]; for (i=0; i<n; i++) { a[i] = rand()%20; // genera un numero intero a caso tra 0 e 19 cout << a[i] << " "; } cout << "\nIntroduci un numero intero: "; cin >> x; for (i = 0; i < n && a[i] != x; i++) // il corpo del for e' vuoto // se i >= n, l'espressione a[i] != x non viene valutata ; if (i < n) cout << "Trovato al posto " << i+1 << endl; else cout << "Non trovato" << endl; }


a555rice.cpp

#include <iostream> using namespace std; int main() { const int n = 10; int i, x, a[n+1]; for (i=0; i<n; i++) { cout << (a[i] = rand()%20) << " "; } cout << "\nIntroduci un numero intero: "; cin >> x; a[n] = x; for (i=0; a[i]!=x; i++); // il ciclo termina quando a[i] == x if (i<n) cout << "Trovato al posto " << (i+1) << endl; else cout << "Non trovato" << endl; }


a560rice.cpp

// nuovi concetti: algoritmo di ricerca binaria #include <iostream> using namespace std; int main() { const int n = 200; int i, max, min, med, x, trovato=0, a[n]; for (i=0; i<n; i++) { a[i] = i+1; cout << a[i] << (i%10 == 9 ? "\n" : " "); } cout << "\nIntroduci un numero intero: "; cin >> x; max = n-1; min = 0; while (!trovato && max>=min) { med = (max+min)/2; if (a[med] == x) trovato = 1; else if (a[med] > x) max = med-1; else min = med+1; } if (trovato) cout << x << " si trova nell'insieme alla posizione " << (med+1) << endl; else cout << x << " non si trova nell'insieme" << endl; }


a565rice.cpp

// nuovi concetti: ricerca binaria ricorsiva #include <iostream> using namespace std; int ricerca (int [], int, int, int, int&); int main() { const int N = 1000; int i, x, pos, a[N]; for (i=0; i<N; i++) { a[i] = i+1; cout << a[i] << " "; } cout << endl; cout << "Introdurre un numero intero: "; cin >> x; if (ricerca(a,0,N-1,x,pos)) cout << x << " si trova nell'insieme alla posizione " << (pos+1) << endl; else cout << x << " non presente nell'insieme!" << endl; } int ricerca (int a[], int min, int max, int val, int& pos) { if (min > max) return 0; pos = (max+min) / 2; if (a[pos] == val) return 1; return (a[pos] > val) ? ricerca(a,min,pos-1,val,pos) : ricerca(a,pos+1,max,val,pos); }


a570ordi.cpp

// nuovi concetti: algoritmo di ordinamento ingenuo #include <iostream> using namespace std; int main() { const int n=400; int i, j, a[n]; srand(time(0)); // Genera array for (i=0; i<n; i++) a[i]=i+1; // Mescola gli elementi dell'array for (i=0; i<n; i++) { j = rand()%n; int t = a[i]; a[i] = a[j]; a[j] = t; } // Visualizza array mescolato for (i=0; i<n; i++) cout << a[i] << (i%20 == 19 ? "\n" : " "); // Ordina array cout << "\nInizio ordinamento\n"; for (i=0; i<n-1; i++) for (j=i+1; j<n; j++) if (a[j] < a[i]) { int t = a[i]; a[i] = a[j]; a[j] = t; } cout << "Fine ordinamento. Premere Invio...\n"; cin.get(); // Visualizza array ordinato for (i=0; i<n; i++) cout << a[i] << (i%20 == 19 ? "\n" : " "); }


a575bubl.cpp

// nuovi concetti: algoritmo di ordinamento "Bubble Sort" #include <iostream> using namespace std; int main() { const int n=400; int i, j, sup, ultimo_scambiato, t, a[n]; srand(time(0)); for (i=0; i<n; i++) a[i]=i+1; for (i=0; i<n; i++) { t = a[i]; j = rand()%n; a[i] = a[j]; a[j] = t; } for (i=0; i<n; i++) cout << a[i] << (i%20 == 19 ? "\n" : " "); cout << "\nInizio ordinamento\n"; sup = n-1; while (sup >= 0) { ultimo_scambiato = -1; for (i=0; i<sup; i++) if (a[i]>a[i+1]) { t = a[i]; a[i] = a[i+1]; a[i+1] = t; ultimo_scambiato = i; } sup = ultimo_scambiato; } cout << "Fine ordinamento. Premere Invio...\n"; cin.get(); for (i=0; i<n; i++) cout << a[i] << (i%20 == 19 ? "\n" : " "); }


a580quik.cpp

// nuovi concetti: algoritmo "quick sort" #include <iostream> using namespace std; int X[] = {54,6,26,73,1,69,36,70,14,76,81,85,99,8,16,38,45}; int n = sizeof(X)/sizeof(int); void mostra_sequenza(char intestazione[]) { cout << "\n" << intestazione; for (int i = 0; i < n; i++) cout << " " << X[i]; cout << "\n"; } void quick_sort(int primo, int ultimo) { int temp; // variabile temporanea per lo scambio if (primo < ultimo) { //prendiamo come pivot il primo elemento della sequenza int pivot = X[primo]; int i = primo; int j = ultimo; while (i < j) { // cerca, partendo da sinistra, il primo elemento > pivot while (i < ultimo && X[i] <= pivot) i++; // cerca, partendo da destra, il primo elemento < pivot while (j > primo && X[j] >= pivot) j--; if (i < j) //scambio(X[i],X[j]) { temp = X[i]; X[i] = X[j]; X[j] = temp; } } //scambio(X[j],X[primo]) temp = X[primo]; X[primo] = X[j]; X[j] = temp; //applico ricorsivamente quick sort alle due parti quick_sort(primo, j-1); quick_sort(j+1, ultimo); } } int main(void) { mostra_sequenza("Sequenza da ordinare:\n"); quick_sort(0,n-1); mostra_sequenza("Sequenza ordinata con 'quick sort':\n"); }


a585size.cpp

#include <iostream> using namespace std; int main() { cout << "Numero di byte occupati\n"; cout << "\t char: " << sizeof(char) << endl; cout << "\t short: " << sizeof(short) << endl; cout << "\t int: " << sizeof(int) << endl; cout << "\t long: " << sizeof(long) << endl; cout << "\t unsigned char: " << sizeof(unsigned char) << endl; cout << "\tunsigned short: " << sizeof(unsigned short) << endl; cout << "\t unsigned int: " << sizeof(unsigned int) << endl; cout << "\t unsigned long: " << sizeof(unsigned long) << endl; cout << "\t signed char: " << sizeof(signed char) << endl; cout << "\t float: " << sizeof(float) << endl; cout << "\t double: " << sizeof(double) << endl; cout << "\t long double: " << sizeof(long double) << endl; return 0; }


a590punt.cpp

// nuovi concetti: indirizzo di una variabile #include <iostream> using namespace std; int main() { int n = 33; cout << "n = " << n << endl; cout << "&n = " << &n << endl; } /* Output: n = 33 &n = 0x48172890 */


a595alia.cpp

// nuovi concetti: riferimento indipendente #include <iostream> using namespace std; int main() { int n = 33; int& r = n; // r e' adesso un alias di n cout << "n = " << n << ", r = " << r << endl; --n; cout << "n = " << n << ", r = " << r << endl; r *= 2; cout << "n = " << n << ", r = " << r << endl; } /* Output: n = 33, r = 33 n = 32, r = 32 n = 64, r = 64 */


a600alia.cpp

#include <iostream> using namespace std; int main() { int n = 33; int& r = n; cout << "&n = " << &n << ", &r = " << &r << endl; } /* Output: &n = 0x0e272892, &r = 0x0e272892 */


a605indi.cpp

// nuovi concetti: variabile puntatore #include <iostream> using namespace std; int main() { int n = 33; int* p = &n; cout << "n = " << n << ", &n = " << &n << ", p = " << p << endl; cout << "&p = " << &p << endl; } /* Output: n = 33, &n = 0x0edf289e, p = 0x0edf289e &p = 0x0edf289a */


a610inin.cpp

#include <iostream> using namespace std; int main() { int n = 33; int* p = &n; cout << "*p = " << *p << endl; } /* Output: *p = 33 */


a615rife.cpp

#include <iostream> using namespace std; int main() { int n = 33; int* p = &n; // p punta a n int& r = *p; // r e' un riferimento per n cout << "r = " << r << endl; } /* Output: r = 33 */


a620puar.cpp

// nuovi concetti: array come puntatori #include <iostream> using namespace std; int main() { double a[4] = {22.2, 44.4, 66.6, 88.8}; cout << a << endl; cout << *a << endl; cout << *(a+1) << endl; for (int i = 0; i < 4; i++) cout << "a[" << i << "] = " << a[i] << endl; for (int i = 0; i < 4; i++) cout << "*(a+" << i << ") = " << *(a+i) << endl; } /* Output: 0x22ff48 22.2 44.4 a[0] = 22.2 a[1] = 44.4 a[2] = 66.6 a[3] = 88.8 *(a+0) = 22.2 *(a+1) = 44.4 *(a+2) = 66.6 *(a+3) = 88.8 */


a625aray.cpp

// nuovi concetti: aritmetica dei puntatori #include <iostream> using namespace std; int main() { short a[] = {22, 33, 44}; int size = sizeof(a) / sizeof(short); cout << "a = " << a << endl; cout << "size = " << size << endl; cout << "sizeof(short) = " << sizeof(short) << endl; short* end = a + size; short sum = 0; for (short* p = a; p < end; p++) { sum += *p; cout << "\t p = " << p; cout << "\t *p = " << *p; cout << "\t sum = " << sum << endl; } cout << "end = " << end << endl; }


a630indx.cpp

#include <iostream> using namespace std; int main() { short a[] = {22, 33, 44, 55, 66}; cout << "a = " << a << ", *a = " << *a << endl << endl; for (short* p = a; p < a+5; p++) cout << "p = " << p << ", *p = " << *p << endl; }


a635sequ.cpp

#include <iostream> using namespace std; short* loc(short* a1, short* a2, int n1, int n2) { short* end1 = a1 + n1 - n2; for (short* p1 = a1; p1 <= end1; p1++) if (*p1 == *a2) { int j; for (j = 0; j < n2; j++) if (p1[j] != a2[j]) break; if (j == n2) return p1; } return NULL; } int main() { short a1[9] = {11, 11, 11, 11, 11, 22, 33, 44, 55}; short a2[5] = {11, 11, 11, 22, 33}; cout << "L'array a1 inizia all'indirizzo \t" << a1 << endl; cout << "L'array a2 inizia all'indirizzo \t" << a2 << endl; short* p = loc(a1, a2, 9, 5); if (p) { cout << "L'array a2 trovato all'indirizzo \t" << p << endl; for (int i = 0; i < 5; i++) cout << '\t' << &p[i] << ": " << p[i] << '\t' << &a2[i] << ": " << a2[i] << endl; } else cout << "Non trovato.\n"; }


a640new.cpp

// nuovi elementi: new, delete // nuovi concetti: allocazione dinamica della memoria #include <iostream> using namespace std; int main() { short * pi = new short; // alloca spazio per uno short int *pi = 1001; // memorizza un valore in quello spazio cout << "int: "; cout << "*pi = " << *pi << ", pi = " << pi << "\n"; cout << "sizeof pi = " << sizeof pi; cout << ", sizeof *pi = " << sizeof *pi << "\n"; delete pi; // libera lo spazio allocato double * pd = new double; // alloca spazio per un double *pd = 10000001.0; // memorizza un valore in quello spazio cout << "double: "; cout << "*pd = " << *pd << ", pd = " << pd << "\n"; cout << "sizeof pd = " << sizeof pd; cout << ", sizeof *pd = " << sizeof *pd << "\n"; delete pd; // libera lo spazio allocato return 0; }


a645ardi.cpp

// nuovi concetti: riferimento a puntatore #include <iostream> using namespace std; void get(double*&, int&); void print(double*, int); int main() { double* a; int n; get(a,n); print(a,n); delete [] a; get(a,n); print(a,n); delete [] a; } void get(double*& a, int& n) { // a e' un puntatore passato per riferimento cout << "Introduci numero di elementi: "; cin >> n; a = new double[n]; cout << "Introduci elementi, uno per linea:\n"; for (int i = 0; i < n; i++) { cout << i+1 << ": "; cin >> a[i]; } } void print(double* a, int n) { for (int i = 0; i < n; i++) cout << a[i] << " "; cout << endl; }


a650ordi.cpp

#include <iostream> using namespace std; void sort(long double [], int); int main() { const int n=400; int i; long double a[n]; srand(time(0)); for (i=0; i<n; i++) a[i]=i+1; for (i=0; i<n; i++) { int j = rand()%n; long double t = a[i]; a[i] = a[j]; a[j] = t; } for (i=0; i<n; i++) cout << a[i] << (i%20 == 19 ? "\n" : " "); cout << "\nInizio ordinamento\n"; sort(a,n); cout << "Fine ordinamento. Premere Invio...\n"; cin.get(); for (i=0; i<n; i++) cout << a[i] << (i%20 == 19 ? "\n" : " "); } void sort(long double a[], int n) { for (int i=0; i<n-1; i++) for (int j=i+1; j<n; j++) if (a[j] < a[i]) { // sposto long double (12 byte) long double t = a[i]; a[i] = a[j]; a[j] = t; } }


a655ordi.cpp

#include <iostream> using namespace std; void sort(long double* [], int); int main() { const int n=400; int i; long double *a[n]; srand(time(0)); for (i=0; i<n; i++) a[i]=new long double(i+1); for (i=0; i<n; i++) cout << *a[i] << (i%20 == 19 ? "\n" : " "); cout << "Premere Invio...\n"; cin.get(); for (i=0; i<n; i++) { int j = rand()%n; long double* t = a[i]; a[i] = a[j]; a[j] = t; } for (i=0; i<n; i++) cout << *a[i] << (i%20 == 19 ? "\n" : " "); cout << "\nInizio ordinamento\n"; sort(a,n); cout << "Fine ordinamento. Premere Invio...\n"; cin.get(); for (i=0; i<n; i++) cout << *a[i] << (i%20 == 19 ? "\n" : " "); } void sort(long double* a[], int n) { for (int i=0; i<n-1; i++) for (int j=i+1; j<n; j++) if (*a[j] < *a[i]) { // sposto puntatori a long double (4 byte) long double* t = a[i]; a[i] = a[j]; a[j] = t; } }


a660strn.cpp

// nuovi concetti: stringa come puntatore costante a char #include <iostream> using namespace std; int main() { char animale[] = "cavallo"; char * pesce = "tonno"; cout << animale << ", " << strlen(animale) << endl; cout << pesce << ", " << strlen(pesce) << endl; cout << animale[2] << ' ' << *(animale+2) << endl; cout << pesce[1] << ' ' << *(pesce+1) << endl; }


a665inas.cpp

// nuovi concetti: inizializzazione di array di stringhe #include <iostream> using namespace std; int main() { char* name[] = { "George Washington", "John Adams", "Thomas Jefferson" }; int dim = sizeof(name)/sizeof(char*); cout << "I nomi sono:\n"; for (int i = 0; i < dim; i++) cout << '\t' << i << ". [" << name[i] << "]" << endl; }


a670argv.cpp

// nuovi elementi: argc, argv #include <iostream> using namespace std; int main(int argc, char* argv[]) { cout << "Il comando " << argv[0]; if (argc < 2) // ovvero, argc == 1 cout << " non ha argomenti!" << endl; else { if (argc == 2) cout << " ha il seguente argomento:\n"; else // argc > 2 cout << " ha i seguenti " << argc-1 << " argomenti:\n"; for (int i=1; i<argc; i++) cout << argv[i] << endl; } }


a675piuf.cpp

// nuovi elementi: open() #include <iostream> #include <fstream> using namespace std; int main(int argc, char * argv[]){ if (argc == 1){ // termina se non ci sono argumenti cerr << "Uso: " << argv[0] << " <nomifile>\n"; exit(1); } ifstream fin; // apri stream long conto; long totale = 0; char ch; for (int file = 1; file < argc; file++) { fin.open(argv[file]); // connetti stream a argv[file] if (!fin) { cerr << "Non sono riuscito ad aprire il file " << argv[file] << "\n"; fin.clear(); continue; } for (conto = 0; fin.get(ch); conto++) if (ch=='\n') conto++; // togliere l'if per Unix e Mac cout << conto << " caratteri in " << argv[file] << "\n"; totale += conto; fin.close(); // disconnetti file fin.clear(); // resetto flag EOF } cout << totale << " caratteri in totale nei file\n"; return 0; }


a680rubr.cpp

#include <iostream> #include <fstream> using namespace std; const char * const file = "rubrica.txt"; const int Lun = 40; void acapo() { while (cin.get() != '\n') continue; } int main() { char ch; ifstream fin(file); if (fin) { cout << "Questo e' il contenuto del file " << file << ":\n"; while (fin.get(ch)) cout << ch; } fin.close(); ofstream fout(file, ios::app); if (!fout) { cerr << "Non e' possibile aprire il file " << file << " in output.\n"; exit(1); } char nome[Lun]; do { cout << "Introdurre un nome (riga vuota per terminare):\n"; cin.get(nome,Lun); if (nome[0]) { acapo(); fout << nome << "\t"; cout << "Numero telefonico: "; cin.get(nome,Lun); acapo(); fout << nome << "\n"; } } while (nome[0]); fout.close(); fin.clear(); fin.open(file); if (fin) { cout << "Questo e' il nuovo contenuto del file " << file << ":\n"; while (fin.get(ch)) cout << ch; } fin.close(); }


a685fstr.cpp

// nuovi elementi: fstream, ios::in, ios::out, ios::binary, |, seekp(), ios::cur // nuovi concetti: lettura-scrittura su file // ATTENZIONE: ACCERTARSI CHE I FILE FORNITI COME ARGOMENTO POSSANO ESSERE MODIFICATI #include <iostream> #include <fstream> using namespace std; int main(int argc, char* argv[]) { if (argc < 2) { cout << "Bisogna fornire il nome di un file (modificabile) come argomento!" << endl; exit(1); } fstream iofile(argv[1], ios::in | ios::out | ios::binary); if (!iofile) { cerr << "Errore: file in/out non puo' venire aperto.\n"; exit(2); } else { cout << "Il file " << argv[1] << " esiste gia': posso modificarlo? (s/N)"; char ch = toupper(cin.get()); if (ch != 'S') exit(3); } cout << "\nSto modificando il file " << argv[1] << ".....\n"; char c; while (iofile.get(c)) if (islower(c)) { iofile.seekp(-1, ios::cur); // torna indietro di un byte c = toupper(c); iofile.put(c); iofile.seekg(0, ios::cur); // curiosamente, senza questa istruzione non funziona! } iofile.close(); cout << "Il file " << argv[1] << " e' stato modificato!" << endl; }


a690strc.cpp

// nuovi elementi: strchr(), strrchr(), strstr() // nuovi concetti: localizzazione di caratteri e sottostringhe // all'interno di una stringa #include <iostream> using namespace std; int main() { char s[] = "The Mississippi is a long river."; cout << "s = \"" << s << "\"\n"; char* p = strchr(s,' '); cout << "strchr(s,' ') punta a s[" << p-s << "].\n"; p = strchr(s,'s'); cout << "strchr(s,'s') punta a s[" << p-s << "].\n"; p = strrchr(s,'s'); cout << "strrchr(s,'s') punta a s[" << p-s << "].\n"; p = strstr(s,"is"); cout << "strstr(s,\"is\") punta a s[" << p-s << "].\n"; p = strstr(s,"isi"); if (p == NULL) cout << "strstr(s,\"isi\") restituisce NULL\n"; }


a695stok.cpp

// nuovi concetti: isolare le parole da una frase // nuovi elementi: strtok() #include <iostream> using namespace std; int main() { char s[] = "Today's date is March 12, 1995."; char* p; cout << "La stringa e': [" << s << "]\nI token sono:\n"; p = strtok(s," "); while (p) { cout << "\t[" << p << "]\n"; p = strtok(NULL, " "); } cout << "Ora la stringa e': [" << s << "]\n"; }


a700cplx.cpp

// nuovi elementi: struct #include <iostream> using namespace std; struct Complesso { float re, im; }; void leggi (Complesso& c) { cout << " parte reale: "; cin >> c.re; cout << " parte immag: "; cin >> c.im; } void scrivi (Complesso c) { cout << c.re << " "; if (c.im) if (c.im > 0) cout << " +i" << c.im; else cout << " -i" << -c.im; cout << endl; } Complesso add (Complesso c1, Complesso c2) { Complesso sum; sum.re = c1.re + c2.re; sum.im = c1.im + c2.im; return sum; } Complesso sub (Complesso c1, Complesso c2) { Complesso diff; diff.re = c1.re - c2.re; diff.im = c1.im - c2.im; return diff; } Complesso mul (Complesso c1, Complesso c2) { Complesso prod; prod.re = c1.re * c2.re - c1.im * c2.im; prod.im = c1.re * c2.im + c1.im * c2.re; return prod; } float modquad (Complesso c) { return c.re * c.re + c.im * c.im; } Complesso divi (Complesso c1, Complesso c2) { Complesso divis; float m = modquad(c2); divis.re = ( c1.re * c2.re + c1.im * c2.im) / m; divis.im = ( c1.im * c2.re - c1.re * c2.im) / m; return divis; } int main() { Complesso a, b; cout << "Operazioni elementari con numeri complessi\n\n"; cout << "primo numero\n"; leggi(a); cout << "secondo numero\n"; leggi(b); cout << "\nprimo numero = "; scrivi(a); cout << "secondo numero = "; scrivi(b); cout << "somma = "; scrivi(add(a,b)); cout << "sottrazione = "; scrivi(sub(a,b)); cout << "moltiplicazione = "; scrivi(mul(a,b)); cout << "divisione = "; if (modquad(b)) scrivi(divi(a,b)); else cout << " divisione per zero\n"; }


a705cplx.cpp

// nuovi concetti: incapsulamento, metodi, metodi inline #include <iostream> using namespace std; struct Complesso { float re, im; void leggi(); void scrivi(); Complesso add(Complesso); Complesso sub(Complesso); Complesso mul(Complesso); Complesso divi(Complesso); float modquad() {return re * re + im * im;} }; void Complesso::leggi() { cout << " parte reale: "; cin >> re; cout << " parte immag: "; cin >> im; } void Complesso::scrivi() { cout << re << " "; if (im) if (im > 0) cout << " +i" << im; else cout << " -i" << -im; cout << endl; } Complesso Complesso::add (Complesso c) { Complesso sum; sum.re = re + c.re; sum.im = im + c.im; return sum; } Complesso Complesso::sub (Complesso c) { Complesso diff; diff.re = re - c.re; diff.im = im - c.im; return diff; } Complesso Complesso::mul (Complesso c) { Complesso prod; prod.re = re * c.re - im * c.im; prod.im = re * c.im + im * c.re; return prod; } Complesso Complesso::divi (Complesso c) { Complesso divis; float m = c.modquad(); divis.re = ( re * c.re + im * c.im) / m; divis.im = ( im * c.re - re * c.im) / m; return divis; } int main() { Complesso a, b; cout << "Operazioni elementari con numeri complessi\n\n"; cout << "primo numero\n"; a.leggi(); cout << "secondo numero\n"; b.leggi(); cout << endl; cout << "primo numero = "; a.scrivi(); cout << "secondo numero = "; b.scrivi(); cout << "somma = "; a.add(b).scrivi(); cout << "sottrazione = "; a.sub(b).scrivi(); cout << "moltiplicazione = "; a.mul(b).scrivi(); cout << "divisione = "; if (b.modquad()) a.divi(b).scrivi(); else cout << " divisione per zero" << endl; }


a710read.cpp

// nuovi elementi: cin.read() #include <iostream> using namespace std; int main() { char buffer[] = "????????????????????"; cin.read(buffer,8); cout << "[" << buffer << "]" << endl; cin.read(buffer,4); cout << "[" << buffer << "]" << endl; }


a715writ.cpp

// nuovi elementi: cout.write() #include <iostream> using namespace std; int main() { cout.write("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 8); cout << endl; char * stringa = "0123456789"; cout.write(stringa,4); cout << endl; }


a720binf.cpp

// nuovi elementi: ios::binary, clear() // nuovi concetti: file binario #include <iostream> #include <fstream> #include <iomanip> using namespace std; void acapo() { while (cin.get() != '\n') continue; } struct tfilm { char titolo[36]; // titolo del film char regista[22]; // nome del regista short int anno; // anno di uscita float valutazione; // valutazione del film }; void contenuto(ifstream&); const char * const file = "films.dat"; int main() { // cout.setf(ios::showpoint); cout.setf(ios::fixed, ios::floatfield); cout << setprecision(1); // mostra il contenuto iniziale ifstream fin; fin.open(file, ios::in | ios::binary); // file binario if (fin) { cout << "Il contenuto del file " << file << " e' il seguente:\n"; contenuto(fin); } fin.close(); // aggiungi altri dati ofstream fout(file, ios::out | ios::app | ios::binary); if (!fout) { cerr << "Non riesco ad aprire il file " << file << " in scrittura!\n"; exit(1); } tfilm film; cout << "Introdurre il titolo del film (<Invio> per terminare):\n"; cin.get(film.titolo, 36); while (film.titolo[0] != '\0') { acapo(); cout << "Regista: "; cin.get(film.regista,22); acapo(); cout << "Anno: "; cin >> film.anno; cout << "Valutazione (0-10): "; cin >> film.valutazione; fout.write((char *) &film, sizeof film); acapo(); cout << "Introdurre il titolo del film" " (<Invio> per terminare):\n"; cin.get(film.titolo, 36); } fout.close(); // mostra il file modificato // fin.clear(); // probabilmente serve col Dev C++ fin.open(file, ios::in | ios::binary); if (fin) { cout << "Il seguente e' il contenuto del file " << file << " dopo l'aggiornamento:\n"; contenuto(fin); } fin.close(); return 0; } void contenuto(ifstream& file) { tfilm film; while (file.read((char *) &film, sizeof film)) { cout.setf(ios::left, ios::adjustfield); cout << setw(30) << film.titolo << ": " << setw(20) << film.regista; cout.setf(ios::right, ios::adjustfield); cout << setw(8) << film.anno << setw(8) << film.valutazione << "\n"; } }


a725dump.cpp

// nuovi elementi: fill(), isgraph() #include <iostream> #include <fstream> #include <iomanip> using namespace std; /* dump esadecimale e ASCII di un file */ int main(int argc, char * argv[]) { if (argc == 1){ // termina se non ci sono argumenti cerr << "Uso: " << argv[0] << " <nomefile>\n"; exit(1); } char b; unsigned short a; int c=0, r=0; unsigned int ind=0; char riga[17] = " "; // 16 spazi ifstream fin(argv[1]); if (!fin) { cerr << "Non sono riuscito ad aprire il file " << argv[1] << "\n"; exit(2); } cout.fill('0'); cout << " " << hex << setw(4) << ind << " "; while (fin.get(b)) { (a=b) &= 0xFF; // converto b in numero e ne prendo gli 8 bit meno significativi ind++; cout << " " << setw(2) << a; riga[c] = isgraph(b) ? b : ' '; if (++c==8) cout << " "; else if (c==16) { cout << " " << riga << endl; c=0; if (++r==16) { cin.get(); cout << endl; r=0; } if (fin.peek() != EOF) cout << " " << setw(4) << ind << " "; } } fin.close(); if (c<16) { for (r=c; r < 16; r++) { cout << " "; riga[r] = ' '; } if (c<8) cout << " "; cout << " " << riga << endl; } return 0; }


a730dstr.cpp

#include <iostream> #include <fstream> using namespace std; int main(int argc, char * argv[]) { if (argc == 1) // termina se non ci sono argumenti { cerr << "Uso: " << argv[0] << " <nomefile>\n"; exit(1); } ifstream fin(argv[1]); if (!fin) { cerr << "Non sono riuscito ad aprire il file " << argv[1] << "\n"; exit(2); } char riga[80]; char * righe[1000]; int n; for (n=0; fin.getline(riga,80); n++) { righe[n] = new char[strlen(riga)+1]; strcpy(righe[n],riga); } fin.close(); for (n--;n>=0;n--) { cout << righe[n] << endl; delete [] righe[n]; } }


a735invl.cpp

// nuovi elementi: operatore freccia ( -> ) // nuovi concetti: lista dinamica #include <iostream> using namespace std; struct Lnodo { char dato; Lnodo *succ; }; int main () { Lnodo *base=NULL, *p; cout << "Introdurre una sequenza di caratteri (^Z per terminare):" << endl; char ch; while (cin.get(ch)) { p = new Lnodo; p->dato = ch; // p->dato equivale a (*p).dato p->succ = base; base = p; } while (p) { cout << p->dato; base = p; p = p->succ; delete base; } }


a740invl.cpp

#include <iostream> using namespace std; struct Lnodo { char dato; Lnodo *succ; }; void MostraLista(Lnodo*); int main () { Lnodo *base=NULL, *p; cout << "Introdurre una sequenza di caratteri (^Z per terminare):" << endl; char ch; while (cin.get(ch)) { p = new Lnodo; p->dato = ch; p->succ = base; base = p; } MostraLista(base); } void MostraLista(Lnodo* lista) { while (lista) { cout << lista->dato; lista = lista->succ; } }


a745invl.cpp

// nuovi concetti: liste e ricorsione #include <iostream> using namespace std; struct Lnodo { char dato; Lnodo *succ; }; void MostraLista(Lnodo*); int main () { Lnodo *base=NULL, *p; cout << "Introdurre una sequenza di caratteri (^Z per terminare):" << endl; char ch; while (cin.get(ch)) { p = new Lnodo; p->dato = ch; p->succ = base; base = p; } MostraLista(base); } void MostraLista(Lnodo* lista) { if (lista) { cout << lista->dato; MostraLista(lista->succ); } }


a750copl.cpp

#include <iostream> using namespace std; struct Lnodo { char dato; Lnodo *succ; }; void AggiungiNodo(Lnodo*&); void MostraLista(Lnodo*); void DistruggiLista(Lnodo*&); int main () { Lnodo *base; cout << "Introdurre una sequenza di caratteri (^Z per terminare):" << endl; base = NULL; while (cin.peek() != EOF) AggiungiNodo(base); MostraLista(base); DistruggiLista(base); } void AggiungiNodo(Lnodo*& lista) { if (lista) AggiungiNodo(lista->succ); else { lista = new Lnodo; lista->succ = NULL; cin.get(lista->dato); } } void MostraLista(Lnodo* lista) { if (lista) { cout << lista->dato; MostraLista(lista->succ); } } void DistruggiLista(Lnodo*& testa) { if (testa) { DistruggiLista(testa->succ); delete testa; } }


a752list.cpp

// nuovi concetti: manipolazione di liste // parametro stream #include <iostream> #include <fstream> using namespace std; struct Lnodo { int dato; Lnodo *succ; }; void writelist(Lnodo*); void InserisciPrima(Lnodo*&, Lnodo*, Lnodo*); void InserisciDopo(Lnodo*&, Lnodo*, Lnodo*); void InvertiLista(Lnodo*&); bool ListeUguali(Lnodo*, Lnodo*); void LeggiInTesta(ifstream&, Lnodo*&); void LeggiInCoda(ifstream&, Lnodo*&); void DistruggiLista(Lnodo*&); int main () { Lnodo *lista1=NULL, *lista2=NULL; ifstream fin("lista.txt"); cout << "\nDati letti dal file:\n"; LeggiInTesta(fin,lista1); cout << "Dati come inseriti nella lista N. 1:\n"; writelist(lista1); fin.clear(); fin.seekg(0); cout << "\nDati letti dal file:\n"; LeggiInCoda(fin,lista2); fin.close(); cout << "Dati come inseriti nella lista N. 2:\n"; writelist(lista2); InvertiLista(lista2); cout << "\nContenuto della lista N. 2 rovesciata:" << endl; writelist(lista2); if (ListeUguali(lista1,lista2)) cout << "OK"; else cout << "Oh Oh...!!!"; cout << endl; DistruggiLista(lista2); DistruggiLista(lista1); } void writelist(Lnodo* ptr) { while (ptr) { cout << ptr->dato << " "; ptr = ptr->succ; } cout << endl; } void InserisciPrima(Lnodo* &testa, Lnodo* posto, Lnodo* nuovo) { // Inserisce il nodo 'nuovo' nella lista 'testa' prima di 'posto' if (testa == NULL) { nuovo->succ = NULL; testa = nuovo; } else if (posto==testa) { nuovo->succ = testa; testa = nuovo; } else { Lnodo* precedente; for(precedente=testa;precedente->succ!=posto;precedente=precedente->succ) continue; nuovo->succ = posto; precedente->succ = nuovo; } } void InserisciDopo(Lnodo* &testa, Lnodo* posto, Lnodo* nuovo) { // Inserisce il nodo 'nuovo' nella lista 'testa' dopo 'posto' if (testa == NULL) { nuovo->succ = NULL; testa = nuovo; } else { nuovo->succ = posto->succ; posto->succ = nuovo; } } void InvertiLista(Lnodo*& testa) { // Inverte la lista 'testa' (il nodo di coda diventa il nodo di testa e viceversa) Lnodo *prima=NULL, *corrente=testa, *dopo; while (corrente) { dopo = corrente->succ; corrente->succ = prima; prima = corrente; corrente = dopo; } testa = prima; } bool ListeUguali(Lnodo* l1, Lnodo* l2) { // Restituisce true se le due liste sono uguali, cioe' // se le due liste sono entrambe vuote, oppure // il contenuto della testa coincide e le liste private della testa // sono uguali return (!(l1 || l2) || l1 && l2 && l1->dato==l2->dato && ListeUguali(l1->succ,l2->succ)); } void LeggiInTesta(ifstream& fin, Lnodo*& testa) { int n; Lnodo *ptr; testa = NULL; while (fin >> n) { ptr = new Lnodo; ptr->dato = n; cout << n << " "; InserisciPrima(testa, testa, ptr); } cout << endl; } void LeggiInCoda(ifstream& fin, Lnodo*& testa) { int n; Lnodo *ptr, *ultimo; testa = NULL; while (fin >> n) { ptr = new Lnodo; ptr->dato = n; cout << n << " "; InserisciDopo(testa, ultimo, ptr); ultimo = ptr; } cout << endl; } void DistruggiLista(Lnodo*& testa) { while (testa) { Lnodo* ptr = testa; testa = testa->succ; delete ptr; } }


a755albe.cpp

#include <iostream> #include <fstream> using namespace std; typedef int Tipo; struct Tnodo { Tipo info; Tnodo *sin, *des; }; void inserisci(Tnodo*&, Tnodo*); void InOrdine(Tnodo*); void EliminaAlbero(Tnodo*&); int main () { Tnodo *albero=NULL, *ptr; ifstream fin("lista.txt"); cout << "\nDati letti dal file:\n"; Tipo n; while (fin >> n) { cout << n << " "; ptr = new Tnodo; ptr->info = n; ptr->sin = ptr->des = NULL; inserisci(albero,ptr); } fin.close(); cout << "\nVisita InOrdine:\n"; InOrdine(albero); EliminaAlbero(albero); return 0; } void inserisci(Tnodo*& radice, Tnodo* elemento) { if (radice) if (radice->info >= elemento->info) inserisci(radice->sin,elemento); else inserisci(radice->des,elemento); else radice = elemento; } void InOrdine(Tnodo* radice) { if (radice) { InOrdine(radice->sin); cout << radice->info << endl; InOrdine(radice->des); } } void EliminaAlbero(Tnodo*& radice) { if (radice) { EliminaAlbero(radice->sin); EliminaAlbero(radice->des); delete radice; } }