示例#1
0
Conj<Posicion> campus::Vecinos(Posicion p)
{// retorna vecinos validos dentro dela grilla,no importa si estan ocupados.
    Posicion posArriba;//( p.x ,p.y-1);
    posArriba.x = p.x;
    posArriba.y = p.y-1;

    Posicion posAbajo;//( p.x,p.y+1);
    posAbajo.x = p.x;
    posAbajo.y = p.y+1;

    Posicion posDer;//(p.x+1,p.y);
    posDer.x = p.x+1;
    posDer.y = p.y;

    Posicion posIzq;//(p.x-1,p.y);
    posIzq.x = p.x-1;
    posIzq.y = p.y;

    Conj<Posicion> res;
    // Agrego las posiciones validas:
    if (Valida(posArriba)){  res.AgregarRapido(posArriba); }
    if (Valida(posAbajo)) {  res.AgregarRapido(posAbajo);  }
    if (Valida(posDer))   {  res.AgregarRapido(posDer);    }
    if (Valida(posIzq))   {  res.AgregarRapido(posIzq);    }
    return res;
}
示例#2
0
Conj<Posicion> campus::IngresosCercanos(Posicion p)
{
Conj<Posicion> res;
Posicion posIngresoFilaUno;//(p.x,0); // ACA LA PRIMER FILA ES LA 0 (CAPAZ HAY QUE MODIFICARLO)
posIngresoFilaUno.x = p.x;
posIngresoFilaUno.y = 0;

Posicion posIngresoUltimaFila;//(p.x,Filas()-1); // LA ULTIMA FILA ES LA CANTIDAD DE FILAS - 1 (CAPAZ HAY QUE MODIFICARLO)
posIngresoUltimaFila.x = p.x;
posIngresoUltimaFila.y = Filas()-1;
if( Distancia(p,posIngresoFilaUno) < Distancia(p,posIngresoUltimaFila) ) // caso <
{
    res.AgregarRapido(posIngresoFilaUno);
}
else
{
    if(  Distancia(p,posIngresoFilaUno) > Distancia(p,posIngresoUltimaFila)  ) // caso >
    {
       res.AgregarRapido(posIngresoUltimaFila);
    }
    else
    {//caso ==
        res.AgregarRapido(posIngresoFilaUno);
        res.AgregarRapido(posIngresoUltimaFila);
    }
}
return res;
}
示例#3
0
Conj<Posicion> Campus::Vecinos(Posicion pos) {
    Conj<Posicion> conjPosiciones = Conj<Posicion>();

    if (PosValida(ProxPosicion(pos, abajo))) {
        conjPosiciones.AgregarRapido(ProxPosicion(pos, abajo));
    } else {
        conjPosiciones.AgregarRapido(Posicion(-1, -1));
    }

    if (PosValida(ProxPosicion(pos, arriba))) {
        conjPosiciones.AgregarRapido(ProxPosicion(pos, arriba));
    } else {
        conjPosiciones.AgregarRapido(Posicion(-1, -1));
    }

    if (PosValida(ProxPosicion(pos, der))) {
        conjPosiciones.AgregarRapido(ProxPosicion(pos, der));
    } else {
        conjPosiciones.AgregarRapido(Posicion(-1, -1));
    }

    if (PosValida(ProxPosicion(pos, izq))) {
        conjPosiciones.AgregarRapido(ProxPosicion(pos, izq));
    } else {
        conjPosiciones.AgregarRapido(Posicion(-1, -1));
    }

    return conjPosiciones;

}
示例#4
0
Conj<Registro_tp3> BaseDeDatos::busquedaCriterio(Registro_tp3 crit, string t) const {
    assert( _nombreATabla.def(t) );

    Tabla & tabla = _nombreATabla.obtener(t);
    bool termine = false;
    Conj<Registro_tp3> res;
    class Lista<struct tupString<Dato> >::const_Iterador itCrit = crit.vistaDicc();
    while (itCrit.HaySiguiente() && !termine) {
        string campoCrit = itCrit.Siguiente().clave;
        if (! tabla.campos().Pertenece(campoCrit) ) {
            termine = true;
        }
        itCrit.Avanzar();
    }
    Conj<string> indices = tabla.indices();
    Conj<string>::Iterador itIndices = indices.CrearIt();
    while (itIndices.HaySiguiente() && !termine) {
        if (crit.def(itIndices.Siguiente())) {
            string campoIndice = itIndices.Siguiente();
            Dato valorCampo = crit.obtener(campoIndice);
            Lista<Registro_tp3> coincis = tabla.buscar(campoIndice, valorCampo);
            Lista<Registro_tp3>::const_Iterador itCoincis = coincis.CrearIt();
            while (itCoincis.HaySiguiente()) {

                if (coincidenTodosCrit(crit, itCoincis.Siguiente())) {
                    Dato det = itCoincis.Siguiente().obtener(campoIndice);
                    res.AgregarRapido(itCoincis.Siguiente());
                }
                itCoincis.Avanzar();
            }
            termine = true;
        }
        itIndices.Avanzar();
    }

    if (!termine) {
        Conj<Registro_tp3>::const_Iterador itRegs =  tabla.registros().CrearIt();
        while (itRegs.HaySiguiente()) {
            if (coincidenTodosCrit(crit, itRegs.Siguiente())){
                res.AgregarRapido(itRegs.Siguiente());

            }
            itRegs.Avanzar();
        }
    }

    return res;
}
示例#5
0
Conj<Registro_tp3> BaseDeDatos::combinarRegistros(string t1, string t2, string campo) const {
    assert( _nombreATabla.def(t1) && _nombreATabla.def(t2) );
    assert( _nombreATabla.obtener(t1).campos().Pertenece(campo) );
    assert( _nombreATabla.obtener(t2).campos().Pertenece(campo) );

    Tabla tabla1 = _nombreATabla.obtener(t1);
    Tabla tabla2 = _nombreATabla.obtener(t2);
    Conj<Registro_tp3>::const_Iterador it;

    Tabla tablaIt = (tabla1.indices().Pertenece(campo))? tabla2 : tabla1;
    Tabla tablaBusq = (tabla1.indices().Pertenece(campo))? tabla1 : tabla2;
    it = tablaIt.registros().CrearIt();

    Conj<Registro_tp3> res;

    while (it.HaySiguiente()) {
        Registro_tp3 regMergeado;
        Dato d = it.Siguiente().obtener(campo);
        Lista<Registro_tp3> coincis = tablaBusq.buscar(campo, d);
        if (!coincis.EsVacia()) {
            if (tablaBusq.nombre() == t1) {
                regMergeado = Merge(coincis.Primero(), it.Siguiente());
            } else {
                regMergeado = Merge(it.Siguiente(), coincis.Primero());
            }
        }
        Lista<struct tupString<Dato> >::const_Iterador ver_Vacio = regMergeado.vistaDicc();
        if (ver_Vacio.HaySiguiente()) res.AgregarRapido(regMergeado);
        it.Avanzar();
    }
    return res;
}
示例#6
0
Conj<Gremio> SistemaLaboral::obtenerGremios() const
{
    Conj<Gremio> result;
    for (Nat i = 0; i < sl.Longitud(); i++)
        result.AgregarRapido(sl[i]);

    return result;
}
示例#7
0
Conj<String> Registro::Campos() const{
	Conj<String> res;
	typename Dicc<String,Dato>::const_Iterador it = dic.CrearIt();
	while (it.HaySiguiente()){
		res.AgregarRapido(it.SiguienteClave());
		it.Avanzar();
	}
	return res;
}
示例#8
0
Conj<Gremio> Temporada::gremiosNegociando() const{
	Conj<Gremio> res;
	Conj<Paritaria>::const_Iterador it = this->paritariasAbiertas.CrearIt();
	while(it.HaySiguiente()){
		Paritaria pa = it.Siguiente();
		res.AgregarRapido(pa.obtenerGremio());
		it.Avanzar();
	}
	return res;
}
示例#9
0
文件: red.cpp 项目: julifgo/tp3
	Conj<Lista<Compu> >& Red::CaminosQueEmpiezanConPcx(const Conj<Lista<Compu> >& caminos, const Compu& pcx) const {
		Conj<Lista<Compu> >* res = new Conj<Lista<Compu> >();
		Conj<Lista<Compu> >::const_Iterador it = caminos.CrearIt();
		while(it.HaySiguiente()) {
			if(it.Siguiente()[0] == pcx) {
				res->AgregarRapido(it.Siguiente());
			}
			it.Avanzar();
		}
		return *res;
	}
示例#10
0
Conj<Nat> SistemaLaboral::obtenerAliados(const Nat idGremio) const
{
    Nat idGrupoTarget = sl[idGremio].obtenerIdGrupo();

    Conj<Nat> result;
    for (Nat i = 0; i < sl.Longitud(); i++)
        if ((i != idGremio) && (sl[i].obtenerIdGrupo() == idGrupoTarget))
            result.AgregarRapido(i);

    return result;
}
示例#11
0
Conj<nat> Temporada::obtenerGremiosConAcuerdos() const{
	Conj<nat> res;
	for(nat j=0;j<this->acuerdosPorGrupo.Longitud();j++){
		Lista<Acuerdo>::const_Iterador acuerdosDeGrupo = this->acuerdosPorGrupo[j].CrearIt();
		while(acuerdosDeGrupo.HaySiguiente()){
			Acuerdo ac = acuerdosDeGrupo.Siguiente();
			res.AgregarRapido(ac.obtenerGremio().obtenerIdGremio());
			acuerdosDeGrupo.Avanzar();
		}
	}
	return res;
}
示例#12
0
文件: red.cpp 项目: julifgo/tp3
	Conj<Lista<Compu> >& Red::CaminosQueTerminanConPcx(const Conj<Lista<Compu> >& caminos, const Compu& pcx) const {
		Conj<Lista<Compu> >* res = new Conj<Lista<Compu> >();
		Conj<Lista<Compu> >::const_Iterador it = caminos.CrearIt();
		while(it.HaySiguiente()) {
			Lista<Compu>::const_Iterador itUlt = it.Siguiente().CrearItUlt();
			if(itUlt.Anterior() == pcx) {
				res->AgregarRapido(it.Siguiente());
			}
			it.Avanzar();
		}
		return *res;
	}
示例#13
0
Conj<String> Registro::DiferenciaSimetrica(const Registro r2) const{
	Conj<String> res;
	Conj<String> c2(r2.Campos());
	typename Conj<String>::Iterador it = c2.CrearIt();
	Conj<String> c1(Campos());
	while(it.HaySiguiente()){
		if(!(c1.Pertenece(it.Siguiente()))){
			res.AgregarRapido(it.Siguiente());
		}
		it.Avanzar();
	}
	return res;
}
示例#14
0
Conj<empresa> Temporada::empresasNegociando() const{
	Conj<empresa> res;
	Conj<Paritaria>::const_Iterador it = this->paritariasAbiertas.CrearIt();
	while(it.HaySiguiente()){
		Paritaria pa = it.Siguiente();
		Conj<empresa> empresasParitaria = pa.obtenerGremio().obtenerEmpresas();
		Conj<empresa>::const_Iterador itEmpresas = empresasParitaria.CrearIt();
		while(itEmpresas.HaySiguiente()){
			res.AgregarRapido(itEmpresas.Siguiente());
			itEmpresas.Avanzar();
		}
		it.Avanzar();
	}
	return res;
}
示例#15
0
aed2::Conj<Columna> Driver::columnasDeTabla(const NombreTabla& tabla) const
{
  Conj<Columna> res;
  modulos::Registro r = b.DameTabla(tabla).Columnas();
  Conj<String> c = b.DameTabla(tabla).Columnas().Campos();
  typename Conj<String>::Iterador it = c.CrearIt();
  while(it.HaySiguiente()){
    Columna c;   
    c.nombre = it.Siguiente();
    if (r.Obtener(it.Siguiente()).EsNat()){
      c.tipo = NAT;
    }else{
      c.tipo = STR;
    }
    res.AgregarRapido(c);
    it.Avanzar();
  }
  return res;
  //assert(false);
}
示例#16
0
Conj<Lista<Compu> > Red::CaminosDeLargoN(Compu c1, Compu c2, Nat n){
  Conj<Lista<Compu> > caminos;	
  if(n == 0){
    Lista<Compu> camino;
    camino.AgregarAtras(c1);
    caminos.AgregarRapido(camino);
  } else {
    Conj<Compu> vec = this->Vecinos(c1);
    Conj<Compu>::Iterador itVecinos(vec);
    while(itVecinos.HaySiguiente()){
      Compu v = itVecinos.Siguiente();
      Conj<Lista<Compu> > cams = this->CaminosDeLargoN(v, c2, n-1);

      Conj<Lista<Compu> >::Iterador itCaminos(cams);

      while(itCaminos.HaySiguiente()){
        Lista<Compu> camino = itCaminos.Siguiente();
        if(camino.Ultimo() == c2){
          Lista<Compu> camino2 = camino;
          camino2.AgregarAdelante(c1);
          caminos.Agregar(camino2);
        } 
        itCaminos.Avanzar();
      }
      itVecinos.Avanzar();
    }
  }

  Conj<Lista<Compu> >::Iterador itCaminos2(caminos);
  while(itCaminos2.HaySiguiente()){
    if(itCaminos2.Siguiente().Ultimo() != c2){
      itCaminos2.EliminarSiguiente();
    }
	   
		if(itCaminos2.HaySiguiente()) itCaminos2.Avanzar(); //esta linea faltaba en el tp
  }

  return caminos;
}
示例#17
0
文件: red.cpp 项目: julifgo/tp3
	void Red::ActualizarCaminosMasCortos(const Compu& pc1, const Compu& pc2) {
		Conj<Lista<Compu> >& aux = CaminosQueTerminanConPcx(this->caminos, pc2);
		Conj<Lista<Compu> >& caminosRes = CaminosQueEmpiezanConPcx(aux, pc1);
 		Conj<Lista<Compu> > caminosAAgregar;

		Conj<Lista<Compu> >::Iterador itConjCamino = caminosRes.CrearIt();

		if(itConjCamino.HaySiguiente()) {

			Nat cantidadDeComputadorasEnCaminoMinimo = itConjCamino.Siguiente().Longitud();
			while(itConjCamino.HaySiguiente()) {
				if(cantidadDeComputadorasEnCaminoMinimo > itConjCamino.Siguiente().Longitud()) {
					cantidadDeComputadorasEnCaminoMinimo = itConjCamino.Siguiente().Longitud();
				}
				itConjCamino.Avanzar();
			}

			while(itConjCamino.HayAnterior()) {
				if(cantidadDeComputadorasEnCaminoMinimo == itConjCamino.Anterior().Longitud()) {
					caminosAAgregar.AgregarRapido(itConjCamino.Anterior());
				}
				itConjCamino.Retroceder();
			}
			
			if(this->caminosMasCortos.definido(pc1.Ip())){
				this->caminosMasCortos.obtener(pc1.Ip())->definir(pc2.Ip(), caminosAAgregar);
			}
			else{
				DiccString<Conj<Lista<Compu> > > hasta;	
				hasta.definir( pc2.Ip(), caminosAAgregar );
				this->caminosMasCortos.definir( pc1.Ip(), hasta );
			}
		}
		
		delete &caminosRes;
		delete &aux;
	}
示例#18
0
campusSeguro::campusSeguro(campus c, Dicc<Agente,Posicion> d)
{
    campus camp = c;
    DiccPalabra<Posicion> estyHip;// creo un DiccTrie vacio.
    campusSeguro::DatosPos tup;
    tup.id = 4;
    tup.tag = "libre";
    tup.placa = 0;
    Nat cantidadFilas=c.Filas();
    Nat cantidadColumnas=c.Columnas();
    diccMatriz<campusSeguro::DatosPos> datosMatriz(cantidadFilas,cantidadColumnas,tup);
    diccHash<Agente,campusSeguro::Datos> dicc(d.CantClaves()); // creo dicchash de tamaño d.Claves().Cardinal()
    diccHash<Agente,campusSeguro::Datos>::Iterador itHashVacio = dicc.CrearIt();
    tup.datosAgente = itHashVacio;
    ConjsEqu<Agente>  equSan; // creo un EqusEqu vacio y lo guardo en la variable equSan.
    campusSeguro::DatosSanciones KSan;
    Nat i = 0;
    Nat j = 0;
      while( i < c.Filas() )
      {
            while( j< c.Columnas())
            {
              //Posicion pos(i,j); // creo una posicion (i,j).
                Posicion p;
                p.x = i;
                p.y = j;
                campusSeguro::DatosPos data;  // ESTA VARIABLE NO SE SI VA DENTRO DEL SCOPE DEL WHILE, xq SE BORRA.
                if( _campus.Posocupada(p))
                {
                    data.id = 0;
                    data.tag = "ocupada";
                    data.placa = 0;
                    data.datosAgente = itHashVacio;
                    datosMatriz.Definir(p, data);
                }
                j++;
            }// endwhile
            i++;
      }// endwhile

    Dicc<Agente,Posicion>::Iterador it;
    it = d.CrearIt();

  while( it.HaySiguiente() )
  {
        campusSeguro::DatosPos data;  // ESTA VARIABLE NO SE SI VA DENTRO DEL SCOPE DEL WHILE, xq SE BORRA.
        campusSeguro::Datos dataH;
        Posicion pos;
        Agente plak;
        ConjsEqu<Agente>::Iterador itEqu;

        plak = it.SiguienteClave();
        pos = it.SiguienteSignificado();
        itEqu = equSan.relacionar(0, plak);
        dataH.pos = pos;
        dataH.Sanciones = 0;
        dataH.hippiesAtrapados = 0;
        dataH.claseConMismasSanciones = itEqu;
        data.id = 3;
        data.tag = "agente";
        data.placa = plak;
        data.datosAgente = dicc.Definir(plak, dataH); // definir retorna un iterador de Dicc.
        datosMatriz.Definir(pos, data);
        it.Avanzar();
  }
    Arreglo<TuplaAgYSan> nuevoArreglo(1); // creo array de 1 posicion
    KSan.arreglo = nuevoArreglo; // meto el arreglo en el campo arreglo de KSan.
    KSan.buffer = false;
    KSan.itMenosSanciones = equSan.CrearIt();

     // el masvigilante al comienzo de la instancia campusSeguro es cualquier vigilante:
    campusSeguro::DatosAgentesyAtrapados elMas;
    Dicc<Agente,Posicion>::Iterador itAgts = d.CrearIt();
    elMas.agente = itAgts.SiguienteClave();// el primer agente que encuentre.
    elMas.cantAtrapados = 0;

     // incio la instancia:
    _campus = camp;
    _estudiantes = estyHip;
    _hippies = estyHip;
    Conj<Agente> conjuntoDeAgentes; // conjunto vacio que almacenará agentes
    Dicc<Agente,Posicion>::Iterador itDiccAgentes = d.CrearIt();

    while(itDiccAgentes.HaySiguiente()) // voy llenando el conjunto con los agentes del diccionario.
    {
        conjuntoDeAgentes.AgregarRapido(itDiccAgentes.SiguienteClave());
        itDiccAgentes.Avanzar();
    }

    _agentes = conjuntoDeAgentes;
    datosAgentes = dicc;
    grilla = datosMatriz;
    _masVigilante = elMas;
    equivalenciaSanciones = equSan;
    KSanciones = KSan;
    Dicc<Agente,Posicion>::Iterador it2;
    it2 = d.CrearIt();

} // fin funcion constructora (rastrillaje).