00001 00007 #include <cassert> 00008 #include <conjunto_reales.h> 00009 00010 /* _________________________________________________________________________ */ 00011 00012 bool Conjunto_Reales::posicion_elemento(int& pos, float val) const 00013 { 00014 int izq=0, der=nelementos-1,centro; 00015 00016 while (der-izq>=0) { 00017 centro=(izq+der)/2; 00018 if (val<v[centro]) 00019 der=centro-1; 00020 else if (val>v[centro]) 00021 izq=centro+1; 00022 else { 00023 pos=centro; 00024 return true; 00025 } 00026 } 00027 pos= izq; 00028 00029 return false; 00030 } 00031 00032 /* _________________________________________________________________________ */ 00033 00034 bool Conjunto_Reales::insertar(float f) 00035 { 00036 int pos; 00037 if (posicion_elemento(pos,f)) 00038 return false; 00039 else { 00040 if (v.size()==nelementos) 00041 if (v.size()==0) 00042 v.resize(1); 00043 else v.resize(2*v.size()); 00044 for (int j=nelementos; j>pos; --j) 00045 v[j]=v[j-1]; 00046 v[pos]= f; 00047 nelementos++; 00048 return true; 00049 } 00050 } 00051 /* _________________________________________________________________________ */ 00052 00053 bool Conjunto_Reales::borrar(float f) 00054 { 00055 int pos; 00056 if (posicion_elemento(pos,f)) { 00057 nelementos--; 00058 for (int j=pos;j<nelementos;++j) 00059 v[j]=v[j+1]; 00060 if (nelementos<v.size()/4) 00061 v.resize(v.size()/2); 00062 return true; 00063 } 00064 else return false; 00065 }