Advertisement
JosepRivaille

X57900: Implementació de la classe llista_paraules

Oct 15th, 2015
317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. #include "llista_paraules.hh"
  2.  
  3.  
  4. // CREADORES //
  5.  
  6. llista_paraules::llista_paraules(unsigned int m) {
  7.   midaBloc = m;
  8.   vector<paraula> u(midaBloc);
  9.   v = u;
  10.   posicio = 0;
  11. }
  12.  
  13.  
  14. // DESTRUCTORES //
  15.  
  16. llista_paraules::~llista_paraules() {}
  17.  
  18.  
  19.  
  20. // CONSULTORES //
  21.  
  22. int cerca_dicot(const vector<paraula> &v, int left, int right, const paraula& par) {
  23.   int i;
  24.   paraula parau = par;
  25.   while (left <= right) {
  26.     i = (left + right)/2;
  27.     if (parau < v[i]) right = i-1;
  28.     else if (parau > v[i]) left = i + 1;
  29.     else return i;
  30.   }
  31.   return left;
  32. }
  33.  
  34. retorn llista_paraules::cerca (const paraula& par) {
  35.   retorn r;
  36.   r.posicio = cerca_dicot(v, 0, posicio - 1, par);
  37.   if (r.posicio < 0 || r.posicio >= midaBloc) r.trobat = false;
  38.   else{
  39.     if (v[r.posicio] == par) r.trobat = true;
  40.     else r.trobat = false;
  41.   }
  42.   return r;
  43. }
  44.  
  45. long int llista_paraules::frequencia (const string& s) {
  46.   paraula par(s);
  47.   retorn r = cerca(par);
  48.   if (r.trobat) return v[r.posicio].freq();
  49.   else return 0;
  50. }
  51.  
  52.  
  53.  
  54.  
  55. // MODIFICADORES //
  56.  
  57. void llista_paraules::insereix(const paraula& par, unsigned int pos) {
  58.   for (unsigned int i = posicio; i > pos; --i) {
  59.     v[i] = v[i - 1];
  60.   }
  61.   v[pos] = par;
  62.   ++posicio;
  63. }
  64.  
  65. void llista_paraules::redimensiona() {
  66.   midaBloc *= 2;
  67.   vector<paraula> u(midaBloc);
  68.   for (int i = 0; i < posicio; ++i) {
  69.     u[i] = v[i];
  70.   }
  71.   v = u;
  72. }
  73.  
  74. void llista_paraules::afegeix (const paraula& par) {
  75.   retorn r = cerca(par);
  76.   if (r.trobat) ++v[r.posicio];
  77.   else {
  78.     if (this->posicio == midaBloc) redimensiona();
  79.     insereix(par, r.posicio);
  80.   }
  81. }
  82.  
  83.  
  84.  
  85.  
  86. // JA IMPLEMENTADES //
  87.  
  88. void llista_paraules::operator+= (const paraula& par) {
  89.  
  90.     afegeix (par);
  91.     return;
  92. }
  93.  
  94. ostream & operator<< (ostream &output, const llista_paraules &l)        
  95. {
  96.     for (unsigned int i = 0 ; i < l.posicio ; i++)
  97.         output << i << "\t" << l.v[i] << endl;
  98.     return output;
  99. };
  100.  
  101. //JosepRivaille
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement