home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 78 / IOPROG_78.ISO / soft / Codice / Lezione21.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2004-01-29  |  2.5 KB  |  102 lines

  1. // CORSO DI C++ - LEZIONE 21
  2.  
  3. #include <iostream>
  4. #include <numeric>
  5. #include <vector>
  6. #include <algorithm>
  7. #include <time.h>
  8.  
  9. using namespace std;
  10.  
  11. //genera un numero random tra 0 e 15
  12. int numeroRandom() {
  13.    /* La generazione di numeri random e'
  14.    sempre un grosso problema: la seguente
  15.    funzione non e' comunque una buona 
  16.    generatrice di numeri random... */
  17.  
  18.    int n,m;
  19.  
  20.    n = rand();
  21.    /* per avere un intero casuale 
  22.    fra 0 e 15, estremi inclusi */
  23.    m = n%16;
  24.    
  25.    return m;
  26. }
  27.  
  28. //classe per la definizione del function object
  29. class numeroCasuale {
  30.  
  31.    public:
  32.       void operator()(int &x) {
  33.          x = numeroRandom();
  34.       }
  35.  
  36. };
  37.  
  38. //funzione per l'eliminazione degli elementi duplicati in un contenitore
  39. template <class C>
  40. void EliminaDuplicati(C& c) {
  41.      sort(c.begin(),c.end()); //ordino il contenitore per rendere 
  42.               //"adiacenti" i suoi elementi duplicati
  43.      C::iterator p = unique(c.begin(),c.end());
  44.               // ho creato la sotto-sequenza di
  45.               // elementi non duplicati
  46.      c.erase(p,c.end());
  47.               // cancellazione manuale degli 
  48.               // elementi superflui     
  49. }   
  50.  
  51.  
  52. int main() {
  53.    
  54.     //inizializzo il generatore di random
  55.     srand(time(0));
  56.  
  57.     //istanzio il vettore di interi a una dimensione casuale
  58.     int N = numeroRandom();
  59.     vector<int> v(N);
  60.     numeroCasuale f;
  61.        cout << "elementi da processare: " << N << endl << endl;
  62.     
  63.     //inizializzo v con numeri random utilizzando il function object f
  64.     for_each(v.begin(),v.end(),f);
  65.  
  66.     cout << "v contiene i seguenti elementi" << endl;
  67.     for(int k=0;k<v.size();k++)
  68.         cout << v[k] << " ";
  69.     cout << endl << endl;
  70.     
  71.     //conto le occorrenze del numero 9
  72.     int quanti_nove = count(v.begin(),v.end(),9);
  73.     cout
  74.         << "9 compare nella sequenza "
  75.         << quanti_nove
  76.         << " volte!" << endl;
  77.    
  78.     //puntatore al "9" tramite find()
  79.     if (quanti_nove>0)
  80.         cout << "l'indirizzo del primo 9 e' " 
  81.             << find(v.begin(),v.end(),9) << endl;
  82.     cout << endl;
  83.  
  84.     //copio v in v2
  85.     vector<int> v2(N);
  86.     copy(v.begin(),v.end(),v2.begin());
  87.  
  88.     cout << "v2 contiene i seguenti elementi" << endl;
  89.     for(k=0;k<v2.size();k++)
  90.         cout << v2[k] << " ";
  91.     cout << endl << endl;
  92.  
  93.     //elimino i doppioni tramite la funzione EliminaDuplicati() definita sopra
  94.     EliminaDuplicati(v2);
  95.     cout << "eliminando i duplicati v2 contiene i seguenti elementi" << endl;
  96.     for(k=0;k<v2.size();k++)
  97.         cout << v2[k] << " ";
  98.     cout << endl << endl;    
  99.     
  100.     return 0;
  101. }
  102.