/*****************************
 * Practica 3 MP
 * Curso 2008-2009
 *
 * Vicente Lujan Mansilla
 * Lorena Margareto Bisquert
 *****************************/

#include <time.h>
#include <list>
#include "DataGenerator.h"

using namespace std;

DataGenerator::DataGenerator()
{
	srand(time(NULL));
}

void DataGenerator::vectorOrdRep(vector<VElement> &v, float veces)
{
      int j = 0;
      int p;
      int i = 0;
      veces = veces * 100;
        
    
    while (j < v.size())
    {
          v[j] = i;
          p = rand()%100; 
          if(p < veces)
          {
               v[j + 1]= i;
               i++;
               j+= 2;
          }                   
          else
          {
          i++;
          j++;
          }
    }
}

void DataGenerator::vectorOrd(vector<VElement> &v)
{
    for(int i = 0; i < v.size() ; i++)
        v[i]=i;
}

void DataGenerator::vectorOrdInv(vector<VElement> &v)
{
    for (int i=0 ;i < v.size();i++)
        v[i] = v.size()-i-1;
}

int DataGenerator::numAleat(int max)
{
	return(rand() % max);
}

void DataGenerator::intercambiarElem(vector<VElement> &v, float porcentaje)
{
	int cambio, inter;
	VElement aux;
	int elem1, elem2;
	
	cambio = v.size() * int(porcentaje/100); //Elementos que tiene que intercambiar
	inter = cambio/2;

	for(int i = 0; i<inter; i++)
	{
		//Calculo dos posiciones aleatorias del vector
		elem1 = numAleat(v.size()-1);
		elem2 = numAleat(v.size()-1);
		//Intercambio
		aux = v[elem1];
		v[elem1] = v[elem2];
		v[elem2] = aux;
	}	
}

bool DataGenerator::ordenado(const vector<VElement> & v)
{
    bool ok = false;
    for(int i = 0; i<v.size() ; i++)
    {
	if(v[i]<v[i+1])
	  ok = true;
	else
	  ok = false;


    }
    return ok;
}

void DataGenerator::printVector(const vector<VElement> & v)
{
	//Imprime el vector
	for(int i=0; i<v.size(); i++)
	{
		cout << v[i].get() << " ";
	}
}
