예제 #1
0
Lista<DNI> Hotel::sacarRepetidos(const Lista<DNI>& dnis) const {
	Lista<DNI> result;
	int i = 0;
	int longitud = dnis.longitud();    
	//Pc: i == 0 $ \land $ longitud == $ |dnis| $ $ \land $ result == []
	//B: i < longitud
	while( i < longitud ){		
		//Fv: longitud - i
		//Cota: 0
		//I: 0$ \leq $i$ \leq $longitud $ \land $ longitud == $ |dnis| $ $ \land $ result == [$ dnis_k $| k$ \selec $[0..i), ($ \lnot $$ \exists $j$ \selec $[0..k)) $ dnis_j $ == $ dnis_k $]
		//Estado e1 
		//Vale B $ \land $ I
		if( !result.pertenece(dnis.iesimo(i)) ){
			result.agregarAtras(dnis.iesimo(i));
		}
		//Qif:(($ dnis_i $ $ \in $ result) $ \land $ (result == result@e1) )$ \lor $( ($ dnis_i $ $ \notin $ result) $ \land $ (result == result@e1 ++ [$ dnis_i $]))
		//estado e2
		//vale Qif $ \land $ i == i@e1
		i++;
		//estado e3
		//vale i == i@e2 + 1 $ \land $ result == result@e2
	}
	//Qc: result == [$ dnis_i $| i$ \selec $[0..longitud), ($ \lnot $$ \exists $j$ \selec $[0..i)) $ dnis_j $ == $ dnis_i $]
	return result;
	//vale result == [$ dnis_i $| i$ \selec $[0..longitud), ($ \lnot $$ \exists $j$ \selec $[0..i)) $ dnis_j $ == $ dnis_i $]
}
예제 #2
0
Lista<Atleta> JJOO::losMasFracasados(const Pais p) const {
//Crea una lista con los atletas que ganaron medallas
    int h=0;
    Lista<Atleta> rank;
    while(h<competenciasFinalizadasConOroEnPodio().longitud()){
        if (competenciasFinalizadasConOroEnPodio().iesimo (h).ranking().longitud()<3){
            rank.concatenar(competenciasFinalizadasConOroEnPodio().iesimo(h).ranking());
        }else{
            // 0, 1 y 2 en vez de 1,2,3
            rank.agregar(competenciasFinalizadasConOroEnPodio().iesimo (h).ranking().iesimo(0));
            rank.agregar(competenciasFinalizadasConOroEnPodio().iesimo (h).ranking().iesimo(1));
            rank.agregar(competenciasFinalizadasConOroEnPodio().iesimo (h).ranking().iesimo(2));
        }
        h++;
    }
//Este ciclo me da una lista de atletas del pais p que no ganaron ninguna medalla
    Lista<Atleta> atles;
    int n = 0;
    while (n < atletas().longitud()){
        Atleta competidor = atletas().iesimo(n);
        if ((competidor.nacionalidad()== p) && !rank.pertenece(competidor)) {
            atles.agregar(competidor);
        }
        n++;
    }
//Divido en dos casos, si la lista es vacia o si tiene al menos un elemento
    Lista<Atleta> atlesFracasados;
    if (atles.longitud()==0){
        atlesFracasados=atles;
    }
    else{
//Acá me fijo cual es el atleta que participó en mas competencias
        int k = 0, j=0;
        Atleta maxAp = atles.iesimo(k);
        Lista<Atleta> atlecomp= participantes();
        while (j < atles.longitud()){
            if (atlecomp.cantidadDeApariciones(maxAp)>atlecomp.cantidadDeApariciones(atles.iesimo(j))){
                    maxAp = atles.iesimo(j);
                }
            j++;
        }
//Acá creo la lista con todos los atletas que aparecen tantas veces como maxAp
        atlesFracasados.agregar(maxAp);
        int m=0;
        while (m < atles.longitud()){
            //No estabas viendo si el que tenia la misma cantidad de apariciones era el mismo
            if(   atlecomp.cantidadDeApariciones(maxAp) == atlecomp.cantidadDeApariciones(atles.iesimo(m)) &&
                !(atles.iesimo(m) == maxAp)) {
                atlesFracasados.agregar(atles.iesimo(m));
            }
            m++;
        }
    }
  return atlesFracasados;
}
예제 #3
0
Lista<Pais> JJOO::paises() const {
    Lista<Pais> paises;
    int i = 0;
    while(i < _atletas.longitud()) {
        Pais actual = _atletas.iesimo(i).nacionalidad();
        if(!paises.pertenece(actual)) {
            paises.agregar(actual);
        }
        i++;
    }
    return paises;
}
예제 #4
0
int JJOO::boicotPorDisciplina(const Categoria categoria, const Pais pais) {
    int sacados = 0;

    // Guardo acá las nuevas competencias por día después de boicotear al país.
    Lista<Lista<Competencia> > nuevaCompetenciasPorDia;

    // Recorro todas las jornadas.
    int i = 0;
    while(i < _competenciasPorDia.longitud()) {

    	// Guardo acá las competencias finales de la jornada i-ésima.
        Lista<Competencia> competenciasEnElDia;

        // Recorro las competencias de la jornada i-ésima.
        int j = 0;
        while(j < _competenciasPorDia.iesimo(i).longitud()) {
			Competencia competencia = _competenciasPorDia.iesimo(i).iesimo(j);

        	// Si es la competencia de la categoría buscada, la boicoteo.
            if(competencia.categoria() == categoria) {

            	// Guardo acá el ciaNumber de los atletas boicoteados
                Lista<int> ciaNumberDeSacados;

                // Guardo acá los participantes que no boicoteé.
                Lista<Atleta> participantes;

                // Recorro la lista de participantes de la competencia actual.
                int h = 0;
                while(h < competencia.participantes().longitud()) {
                	Atleta participante = competencia.participantes().iesimo(h);

                	// Si el participante actual es de la nacionalidad a boicotear, lo dejo
                	// fuera de la nueva lista de participantes y guardo su ciaNumber.
                    if(participante.nacionalidad() == pais) {
                        ciaNumberDeSacados.agregarAtras(participante.ciaNumber());
                        sacados++;
                    }

                    // En caso contrario, lo agrego a la lista de nuevos participantes.
                    else {
                    	participantes.agregarAtras(participante);
                    }

                    h++;
                }

                // Creo la nueva competencia con los participantes boicoteados.
                Competencia competenciaBoicoteada(competencia.categoria().first,
                		                          competencia.categoria().second,
                		                          participantes);

                // Finalizo la nueva competencia de ser necesario.
                if(competencia.finalizada()) {

                	// Guardo acá el ranking de la nueva competencia.
                    Lista<int> ranking;

                    // Recorro el ranking de la competencia original.
                    int h = 0;
                    while(h < competencia.ranking().longitud()) {
                    	int ciaNumberAtletaActual = competencia.ranking().iesimo(h).ciaNumber();

                    	// Si el atleta actual no fue boicoteado, lo agrego al ranking en la posición que estaba.
                        if(!ciaNumberDeSacados.pertenece(ciaNumberAtletaActual)) {
                            ranking.agregarAtras(ciaNumberAtletaActual);
                        }

                        h++;
                    }

                    // Guardo acá el control antidoping de la nueva competencia.
                    Lista<pair<int, bool> > antidoping;

                    // Recorro el control antidoping de la competencia original.
                    h = 0;
                    while(h < competencia.lesTocoControlAntidoping().longitud()) {
                    	Atleta controladoActual = competencia.lesTocoControlAntidoping().iesimo(h);

                    	// Si el atleta controlado actual no fue boicoteado, lo agrego al control antidoping.
                        if(!ciaNumberDeSacados.pertenece(controladoActual.ciaNumber())) {
                            antidoping.agregarAtras(make_pair(controladoActual.ciaNumber(),
                            		                       competencia.leDioPositivo(controladoActual)));
                        }

                        h++;
                    }

                    // Finalizo la competencia con el ranking y antidoping boicoteados.
                    competenciaBoicoteada.finalizar(ranking, antidoping);
                }

                // Agrego la competencia boicoteada a la nueva lista de competencias para la jornada i-ésima.
                competenciasEnElDia.agregarAtras(competenciaBoicoteada);
            }

            // Si no es la que quiero boicotear, la dejo como está.
            else {
                competenciasEnElDia.agregarAtras(competencia);
            }

            j++;
        }

        // Agrego las nuevas competencias del día actual a la nueva lista de competencias por día.
        nuevaCompetenciasPorDia.agregarAtras(competenciasEnElDia);

        i++;
    }

    _competenciasPorDia = nuevaCompetenciasPorDia;
    return sacados;
}
예제 #5
0
void TestPelicula()
{

  Actor actor[5] = {"Actor1","Actor2","Actor3","Actor4","Actor5"};
  Lista<Genero> gen1,gen2,gen3;
  gen1.agregarAtras((Genero)1);
  gen1.agregarAtras((Genero)2);
  gen2.agregarAtras((Genero)2);
  gen2.agregarAtras((Genero)3);
  gen3.agregarAtras((Genero)4);
  Lista<Actor> act1,act2,act3;
  act1.agregarAtras(actor[0]);
  act1.agregarAtras(actor[2]);
  act1.agregarAtras(actor[3]);
  act2.agregarAtras(actor[1]);
  act3.agregarAtras(actor[1]);
  act3.agregarAtras(actor[2]);
  act3.agregarAtras(actor[3]);
  act3.agregarAtras(actor[4]);

  Pelicula a("Peli1",gen1,act1,0);
  Pelicula b("Peli2",gen2,act2,0);
  Pelicula c("Peli3",gen3,act3,1);

  if(a.nombreP()!="Peli1") fallo=1,cout << "Falla nombreP"<< endl;
  if(b.nombreP()!="Peli2") fallo=1,cout << "Falla nombreP"<< endl;
  if(c.nombreP()!="Peli3") fallo=1,cout << "Falla nombreP"<< endl;

  if(!(a.generosP()==gen1)) fallo=1,cout<<"Falla generosP"<<endl;
  if(!(b.generosP()==gen2)) fallo=1,cout<<"Falla generosP"<<endl;
  if(!(c.generosP()==gen3)) fallo=1,cout<<"Falla generosP"<<endl;

  if(a.es3DP()) fallo=1,cout<<"Falla es3DP" << endl;
  if(b.es3DP()) fallo=1,cout<<"Falla es3DP" << endl;
  if(!c.es3DP()) fallo=1,cout<<"Falla es3DP" << endl;

  if(!(a.actoresP()==act1)) fallo=1,cout<<"Falla actoresP" << endl;
  if(!(b.actoresP()==act2)) fallo=1,cout<<"Falla actoresP" << endl;
  if(!(c.actoresP()==act3)) fallo=1,cout<<"Falla actoresP" << endl;

  Lista<Pelicula> ps;
  ps.agregarAtras(a);
  ps.agregarAtras(b);
  ps.agregarAtras(c);
  Lista<std::pair<Genero,Lista<Pelicula> > > ans1,ans2,ans3;

  Lista<std::pair<Genero,Lista<Pelicula> > > res = a.agruparPelisPorGeneroP(ps);
  if(res.longitud()!=4) fallo=1,cout << "Falla agruparPelis" << endl;
  Lista<Pelicula> l1,l2,l3,l12,l21;
  l1.agregarAtras(a);
  l2.agregarAtras(b);
  l3.agregarAtras(c);
  l12.agregarAtras(a);
  l12.agregarAtras(b);
  l21.agregarAtras(b);
  l21.agregarAtras(a);

  if(!(res.pertenece(make_pair((Genero) 1, l1)))) fallo=1,cout << "Falla agruparPelis" << endl;
  if(!(res.pertenece(make_pair((Genero) 3, l2)))) fallo=1,cout << "Falla agruparPelis" << endl;
  if(!(res.pertenece(make_pair((Genero) 4, l3)))) fallo=1,cout << "Falla agruparPelis" << endl;
  if(!(res.pertenece(make_pair((Genero) 2, l12)) || res.pertenece(make_pair((Genero) 2, l21)))) fallo=1,cout << "Falla agruparPelis" << endl;

  Lista<Nombre> noms;
  noms.agregarAtras("P1");
  noms.agregarAtras("P2");
  noms.agregarAtras("P3");

  if(a.generarSagaDePeliculasP(act1,gen2,noms).longitud()!=3) fallo=1,cout<<"Falla generarSagaDePeliculas" << endl;

  pelis.push_back(a);
  pelis.push_back(b);
  pelis.push_back(c);
}
예제 #6
0
JJOO MenuCrearJJOO()
{
    int anio;

    Lista<Atleta> atletas = Lista<Atleta>();
    Lista< Lista<Competencia> > cronograma = Lista< Lista<Competencia> >();

    cout << "Ingrese el año del Juego olimpico: " << endl;
    cin >> anio;


    bool otraFecha;
    string eleccion;

    cout << "¿Desea ingresar una fecha al JJOO? [s/n] ";
    cin >> eleccion;
    otraFecha = eleccion == "s";

    while(otraFecha)
    {
        cout << endl;
        cout<< "Ingresando nueva Fecha" << endl;

        Lista<Competencia> nuevaLista = Lista<Competencia>();
        bool otraCompetencia;

        cout << "Desea ingresar una competencia? [s/n] ";
        cin >> eleccion;
        otraCompetencia = eleccion == "s";

        while(otraCompetencia)
        {
            nuevaLista.agregarAtras(MenuCrearCompetencia());
            cout << "Desea ingresar otra competencia? [s/n] ";
            cin >> eleccion;
            cout << endl;
            otraCompetencia = eleccion == "s";
        }
        cronograma.agregarAtras(nuevaLista);

        cout << "¿Desea ingresar otra fecha al JJOO? [s/n] ";
        cin >> eleccion;
        otraFecha = eleccion == "s";
    }
    cout << "¿Desea ingresar todos los participantes de las competencias ingresadas? :" << endl;
    cin >> eleccion;

    if (eleccion == "s")
    {
        for (int i = 0; i < cronograma.longitud(); i++)
        {
            for (int j = 0; j < cronograma.iesimo(i).longitud(); j++)
            {
                for(int k = 0; k < cronograma.iesimo(i).iesimo(j).participantes().longitud(); k++)
                {
                    if (!atletas.pertenece(cronograma.iesimo(i).iesimo(j).participantes().iesimo(k)))
                    {
                        atletas.agregarAtras(cronograma.iesimo(i).iesimo(j).participantes().iesimo(k));
                    }
                }
            }
        }
    }

    bool otroAtleta;
    cout << "Desea ingresar otro atleta? [s/n] " << endl;
    cin >> eleccion;
    otroAtleta = eleccion == "s";

    while(otroAtleta)
    {
        atletas.agregarAtras(MenuCrearAtleta());
        cout << "Desea ingresar otro atleta? [s/n] ";
        cin >> eleccion;
        cout << endl;
        otroAtleta = eleccion == "s";
    }




    return JJOO(anio, atletas, cronograma);
}