util.cpp

//__INSERT_LICENSE__
// $Id$
/* 
   COMIENZO DE DESCRIPCION 
   Utilitarios varios. 
   keywords: lista, cola
   FIN DE DESCRIPCION 
*/
#include <cmath>
#include <cstdlib>
#include <cstdio>
#include <list>
#include <iostream>
#include "./util.h"

using namespace std;

// -----------------------------------------------------------------
double drand() {
  return double(rand())/double(RAND_MAX);
}

//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
int modulo(int n,int m) {
  int r = n%m;
  if (r<0) r+= m;
  return r;
}

// -----------------------------------------------------------------
int irand(int m) {
  return int(double(m)*drand());
}
// -----------------------------------------------------------------
void randl(list<int> &l,int m,int n) {
  for (int j=0;j<n;j++) l.insert(l.end(),irand(m));
}
// -----------------------------------------------------------------
void randl (list<int> &l,int m,double n) {
  // define una probabilidad de detenerse
  double lambda=1.0/(n+1.0);
  while (true) {
    if (drand()<lambda) break;
    l.insert(l.end(),irand(m));
  } 
} 

//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
// llena un vector "vl" de "n" listas con listas "l_i" de longitudes 
// aleatorias "n_i" y contenidos tambien aleatorios (numeros enteros)
template <typename t>
void generar_vl(vector< list <t> > &vl) {
  typename  list< list<t> >::iterator p;
  int  k,z,n;
  n=vl.size();
  for (int i=0;i<n;i++) {
    z=irand(10);
    for (int j=0;j<z;j++) {
      k=irand(100);
      vl[i].insert(vl[i].end(),k);      
    }
  }
}

//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
// imprime vector de listas
template <typename t>
void imprime_vl(vector< list <t> > &vl) {
  typename list<t>::iterator q,z;
  int n;
  n=vl.size();
  // imprime cada lista
  for (int i=0;i<n;i++) {
    cout << "lista l [" << i << "]: "; printl(vl[i]);
  }
}

//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
void add_to_list(list<int> &L,int term,va_list elems) {
  int count=0;
  while (1) {
    int x = va_arg(elems, int);
    if (x==term) break;
    count++;
    L.push_back(x);
  }
}

//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
void add_to_list(list<int> &L,int term,...) {
  // Funcion auxiliar que carga elementos hasta llegar al
  // terminador `term'. Usa macros `variadicos'
  // http://www.gnu.org/software/libc/manual/html_node/Variadic-Functions.html#Variadic-Functions
  va_list elems;
  va_start(elems,term);
  add_to_list(L,term,elems);
  va_end(elems);
}

//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
void add_to_set(set<int> &s,int term,va_list elems) {
  int count=0;
  while (1) {
    int x = va_arg (elems, int);
    if (x==term) break;
    count++;
    s.insert(x);
  }
}

//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
void add_to_set(set<int> &s,int term,...) {
  // Funcion auxiliar que carga elementos hasta llegar al
  // terminador `term'. Usa macros `variadicos'
  // http://www.gnu.org/software/libc/manual/html_node/Variadic-Functions.html#Variadic-Functions
  va_list elems;
  va_start (elems,term);
  add_to_set(s,term,elems);
}

//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
void print_map(map<int,list<int> > &M,const char *s) {
  // Funcion auxiliar que imprime el map
  map<int,list<int> >::iterator q = M.begin();
  if (s) printf("%s:\n",s);
  while (q!=M.end()) {
    printf("%d -> [",q->first);
    list<int> &L = q->second;
    list<int>::iterator p = L.begin();
    while (p!=L.end()) printf("%d,",*p++);
    printf("]\n");
    q++;
  }
}

//---:---<*>---:---<*>---:---<*>---:---<*>---:---<*>
void print_stack(stack<int> &S) {
  stack<int> S2;
  int x;
  printf("S: ");
  while (!S.empty()) {
    x = S.top(); S.pop();
    printf(" %d",x);
    S2.push(x);
  }
  printf("\n");

  while (!S2.empty()) {
    x = S2.top(); S2.pop();
    S.push(x);
  }
}

Generated by GNU Enscript 1.6.6.