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 $] }
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; }
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; }
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; }
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); }
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); }