// Esercizio 1 /* * File: main.cpp * Author: maurizio * * Created on 27 aprile 2010, 18.59 */ #include #include using namespace std; /* * */ const int MAX=20; int massimo(int v[], int n); void cercaPiuGiovani(string nomi[],int anni[], int n, string giovani[], int& m); void stampa(string v[], int n); int main(int argc, char** argv) { string nomi[MAX]={"Giovanni","Maurizio","Serena", "Martina","Alessia","Teresa","Paolo"}; int anni[MAX]={1965,2003,1968,2004,2003,2004,2004}; // numero di elementi effettivamente presenti nell'array int n=7; if (n>MAX) return (EXIT_FAILURE); cout << "Ci sono " << n << " persone nella lista." << endl; // creiamo l'array giovani di lunghezza n string giovani[n]; // non ci sono adesso giovani, m serve per contarli int m=0; cercaPiuGiovani(nomi, anni, n, giovani, m); if (m==1) cout << "C'è solo una persona più giovane: " << giovani[m-1] << endl; else if(m==2) { cout << "Ecco le due persone più giovani: " << endl; stampa(giovani, m); } else { cout << "Ecco tutte le persone più giovani. Ce ne sono " << m << "." << endl; stampa(giovani, m); } return (EXIT_SUCCESS); } int massimo(int v[], int n) { // fisso il primo elemento dell'array come // valore minimo di confronto int m=v[0]; // partendo dal secondo elemento (indice 1) scorro // l'array fino alla fine for (int i=1; im) m=v[i]; // è una funzione quindi restituisco il valore contenuto in m return m; } void cercaPiuGiovani(string nomi[],int anni[], int n, string giovani[], int& m) { // trovo il massimo dell'array anni int max=massimo(anni,n); // cerco in anni il valore max for (int i=0; i #include // serve per la costante ULONG_MAX #include using namespace std; /* * */ const int MAX=32; void decToBin(unsigned long x, int b[], int& n); void stampaRev(int v[],int n); int main(int argc, char** argv) { //unsigned long x=ULONG_MAX; // ULONG_MAX vale 4294967295 unsigned long x=2156556; cout << x << endl; int n=0; int b[MAX]; decToBin(x,b,n); stampaRev(b,n); return (EXIT_SUCCESS); } void decToBin(unsigned long x, int b[], int& n) { n=0; do { int q=x/2; int r=x%2; b[n]=r; //cout << r << endl; n++; if (n>MAX) return; if (q==0) break; x=q; } while(true); } void stampaRev(int v[], int n) { for (int i=n-1; i>=0; i--) cout << v[i]; cout << endl; } // Esercizio 3 versione alternativa /* * File: main.cpp * Author: maurizio * * Created on 28 aprile 2010, 11.39 */ #include #include // necessario per il tipo ostringstream #include using namespace std; /* * */ string decToBin(int x); char intToChar(int); string intToString(int n); int main(int argc, char** argv) { int x=12541; // cout << "inttochar "<< intToChar(0) << endl; cout << x << endl; string s=decToBin(x); cout << s << endl; return (EXIT_SUCCESS); } // trasforma un intero con una sola cifra nel carattere corrispondente char intToChar(int a) { if (a==0) return '0'; else if (a==1) return '1'; return ' '; } // trasforma un numero intero nella stringa corrispondente string intToString(int n) { ostringstream a; a << n; return a.str(); } string inverti(string s) { string t=""; int l=s.length(); for (int i=l-1; i>=0; i--) t=t+s.at(i); return t; } string decToBin(int x) { string s=""; do { int q=x/2; int r=x%2; char c=intToChar(r); //string t=intToString(r); s=s+c; //s=s+t; // le istruzioni commentate si possono // usare al posto delle istruzioni delle righe 72 e 74 if (q==0) break; x=q; } while(true); return inverti(s); } // Esercizio 4 /* * File: main.cpp * Author: maurizio * * Created on 28 aprile 2010, 23.52 */ #include #include #include using namespace std; /* * */ void scambia(double& x, double& y); void ordina2(double& x, double& y); void ordina3(double& x, double& y, double& z); double area(double& x, double& y, double& z); double semiPerimetro(double x, double y, double z); int main(int argc, char** argv) { double a=3.0; double b=2.4; double c=4.2; ordina3(a,b,c); cout << a << endl; cout << b << endl; cout << c << endl; double sup=area(a,b,c); if (sup==0.0) cout << "Non si tratta di un triangolo (può esserci un valore nullo nei lati o i lati non sono tra loro compatibili)." << endl; else cout << "Area triangolo: " << sup << endl; return (EXIT_SUCCESS); } void scambia(double& x, double& y) { double temp=x; x=y; y=temp; } void ordina2(double& x, double& y) { if (x>y) scambia(x,y); } void ordina3(double& x, double& y, double& z) { ordina2(x,y); ordina2(x,z); ordina2(y,z); } double semiPerimetro(double x, double y, double z) { return (x+y+z)/2; } double area(double& x, double& y, double& z) { if (x<=0.0 || y<=0.0 || z<=0.0) return 0.0; ordina3(x,y,z); if (z>=x+y) return 0.0; double s=semiPerimetro(x,y,z); return sqrt(s*(s-x)*(s-y)*(s-z)); } // Fine