refina.cpp

// $Id$

/* 
  COMIENZO DE DESCRIPCION

  (a) Escriba una funci\'on
  void refina (list<double> &L, double delta) tal que dada una 
  lista inicial de reales clasificados de menor a mayor {\tt L}, 
  refina inserta elementos entre los de {\tt L}, de tal modo que 
  la diferencia m\'axima entre elementos de la lista final
  sea menor o igual que delta;
  (b) Escriba una funci\'on
  void desrefina (list<double> &L, double delta) tal que dada 
  una lista inicial de reales clasificados de menor a mayor
  {\tt L}, desrefina suprime elementos de {\tt L}, de tal modo 
  que la diferencia minima entre elementos de la lista final
  sea mayor o igual que delta.
  keywords: lista

  FIN DE DESCRIPCION 
*/
// -----------------------------------------------------------------
#include <list>
#include <iostream>
#include "./util.h"
using namespace std;

// -----------------------------------------------------------------
void refina (list<double> &L, double delta) {
  list<double>::iterator p;
  double x, y ;
  p = L.begin ();
  while (p != L.end () ) {
    x = (*p) + delta; p++ ;
    if (p == L.end () ) break;
    y = (*p) ;
    while (x < y) {
      p = L.insert (p,x); p++;
      x = x + delta ;
    } // end while
  } // end while
}

// -----------------------------------------------------------------
void desrefina (list<double> &L, double delta) {
  list <double> :: iterator p, q ;
  p = L.begin () ;
  while (p != L.end ()) {
    q = p ; q++ ;
    while (q != L.end () && (*q) < (*p) + delta ) {
      q = L.erase (q) ;
    } // end while
    p++;
  } // end while
}

// -----------------------------------------------------------------
int main () {
  list<double> L;
  double delta1 = 5.0, delta2 = 5.0 * delta1;
  int ni = 2, nj = 3 ;
  double x ;
  for (int i = 0 ; i < ni ; i++) {
    cout << endl;
    cout << "pasada i = " << i << endl ;
    L.clear ();
    x = 0.0 ;
    for (int j = 0 ; j < nj ; j++) {
      x = x + drand () * delta2 ;
      L.insert (L.end (), x);
    } // end for
    cout << endl;
    cout << "Antes de refinar     : ";
    printl (L);

    refina (L, delta1);
    cout << endl;
    cout << "Despues de refinar   : ";
    printl (L);

    cout << endl;
    cout << "Antes de desrefinar  : ";
    printl (L);
    desrefina (L, delta2);

    cout << endl;
    cout << "Despues de desrefinar: ";
    printl (L);

    cout << endl;
  } // end for
  return 0 ;
} // end main
// -----------------------------------------------------------------

Generated by GNU Enscript 1.6.6.