bool Competencia::operator==(const Competencia& c) const{ bool result = mismasAtletas(c.participantes() , participantes()) && c.categoria() == categoria() && c.finalizada() == finalizada(); if(result && finalizada()){ result = c.ranking() == ranking() && mismasAtletas(c.lesTocoControlAntidoping(),lesTocoControlAntidoping()); if(result){ int i = 0; while( i < c.lesTocoControlAntidoping().longitud() && result){ result = result && c.leDioPositivo(c.lesTocoControlAntidoping().iesimo(i)) == leDioPositivo(c.lesTocoControlAntidoping().iesimo(i)); i++; } } } return result; }
void JJOO::liuSong(const Atleta& a, const Pais p) { Atleta atletaNacionalizado(a.nombre(), a.sexo(), a.anioNacimiento(), p, a.ciaNumber()); int i = 0; while(i<a.deportes().longitud()) { atletaNacionalizado.entrenarNuevoDeporte(a.deportes().iesimo(i), a.capacidad(a.deportes().iesimo(i))); i++; } //Saco el atleta y lo agrego nacionalizado en atletas; _atletas.sacar(a); _atletas.agregarAtras(atletaNacionalizado); i=0; int j = 0; //Lista que va a reemplazar a la vieja lista de listas competencias Lista<Lista<Competencia> > nuevaCompetenciasPorDia; while(i<_competenciasPorDia.longitud()) { //Lista de competencias que va a reemplazar a la anterior en ese dia Lista<Competencia> nuevaCompetenciasEnDia; j = 0; while(j<_competenciasPorDia.iesimo(i).longitud()) { Competencia viejaCompe = _competenciasPorDia.iesimo(i).iesimo(j); //Me fijo si esa competencia tiene al atleta, si no, la dejo como estaba if(viejaCompe.participantes().pertenece(a)) { //Creo la nueva lista de participantes Lista<Atleta> nuevosParticipantes = viejaCompe.participantes(); nuevosParticipantes.sacar(a); nuevosParticipantes.agregarAtras(atletaNacionalizado); // //Guardo la categoria Deporte dep = viejaCompe.categoria().first; Sexo sex = viejaCompe.categoria().second; // //Creo lo que va a ser la nueva competencia con el atleta cambiado // Competencia nuevaCompe(dep, sex, nuevosParticipantes); //Si esta finalizada, asigno el ranking y el doping if(viejaCompe.finalizada()) { int h = 0; Lista<int> ranking; Lista<pair<int, bool> > control; while(h<viejaCompe.ranking().longitud()) { ranking.agregarAtras(viejaCompe.ranking().iesimo(h).ciaNumber()); h++; } h = 0; while(h<viejaCompe.lesTocoControlAntidoping().longitud()) { bool leToco = viejaCompe.leDioPositivo(viejaCompe.lesTocoControlAntidoping().iesimo(h)); int suCiaNumber = viejaCompe.lesTocoControlAntidoping().iesimo(h).ciaNumber(); pair<int, bool> par = make_pair(suCiaNumber, leToco); control.agregarAtras(par); h++; } //Finalizo nuevaCompe.finalizar(ranking, control); } //Agrego a lo que va a ser mi nueva lista de competencias en ese dia nuevaCompetenciasEnDia.agregarAtras(nuevaCompe); } else { nuevaCompetenciasEnDia.agregarAtras(viejaCompe); } j++; } i++; nuevaCompetenciasPorDia.agregarAtras(nuevaCompetenciasEnDia); } _competenciasPorDia = nuevaCompetenciasPorDia; }
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 MenuCompetencia() { int maximaOpcion = 2; cout << "Creando competencia" << endl << "0. Volver al Menu Principal" << endl << "1. Crear competencia" << endl << "2. Cargar competencia" << endl; if (competenciaCreada) { maximaOpcion = 15; cout << "3. Finalizar competencia" << endl << "4. LinfordChristie" << endl << "5. ¿Ganan los mas capaces?" << endl << "6. Sancionar Tramposos" << endl << "7. ¿Le Dio positivo?" << endl << "8. Ranking" << endl << "9. Atletas que les toco control" << endl << "10. ¿Finalizada?" << endl << "11. Guardar" << endl << "12. Mostrar" << endl << "13. Participantes" << endl << "14. Categoria" << endl << "15. Clasifico tarde" << endl; } int opt = LeerOpcion(maximaOpcion); LimpiarPantalla(); switch(opt) { case 0: { LimpiarPantalla(); break; } case 1: { LimpiarPantalla(); competencia = MenuCrearCompetencia(); competenciaCreada = true; LimpiarPantalla(); MenuCompetencia(); break; } case 2: { LimpiarPantalla(); ifstream archivoEntrada; AbrirArchivoParaLeer(archivoEntrada); competencia.cargar(archivoEntrada); archivoEntrada.close(); competenciaCreada = true; LimpiarPantalla(); MenuCompetencia(); break; } case 3: { int id; string doping; Lista<int> posiciones = Lista<int>(); Lista< pair<int, bool> > resultados = Lista< pair<int, bool> >(); MostrarAtletas(competencia.participantes(), "Lista de participantes :"); cout << competencia.participantes() << endl; cout << "Ingrese la lista de atletas segun id de la lista, seguido del resultado de doping del mismo."<< endl; for (int i = 0; i < competencia.participantes().longitud(); i++) { cout << "Puesto numero " << i+1 << " : "; cin >> id; cin >> doping; posiciones.agregarAtras(competencia.participantes().iesimo(id).ciaNumber()); resultados.agregar(pair<int, bool>(competencia.participantes().iesimo(id).ciaNumber(), doping == "s")); } competencia.finalizar(posiciones, resultados); LimpiarPantalla(); MenuCompetencia(); break; } case 4: { int id; string nombre; LimpiarPantalla(); MostrarAtletas(competencia.participantes(), "Lista de participantes :"); cout << "Indique que atleta desea descalificar : " << endl; cin >> id; nombre = competencia.participantes().iesimo(id).nombre(); competencia.linfordChristie(competencia.participantes().iesimo(id).ciaNumber()); cout << "El atleta " << nombre <<" fue descalificado"; Pausar(); LimpiarPantalla(); MenuCompetencia(); break; } case 5: { LimpiarPantalla(); cout << "¿Ganan los más capaces? " << competencia.gananLosMasCapaces() << endl; Pausar(); LimpiarPantalla(); break; } case 6: { cout << "Sancionando tramposos" << endl; competencia.sancionarTramposos(); cout << "Tramposos sancionados" << endl; Pausar(); LimpiarPantalla(); break; } case 7: { int id; MostrarAtletas(competencia.participantes(), "Lista de participantes :"); cout << "Indique el id de atleta del que desea saber su resultado de doping :"; cin >> id; cout << "Su resultado fue: " << competencia.leDioPositivo(competencia.participantes().iesimo(id)) << endl; Pausar(); LimpiarPantalla(); break; } case 8: { MostrarAtletas(competencia.ranking(), "Ranking de la competencia :"); Pausar(); LimpiarPantalla(); break; } case 9: { MostrarAtletas(competencia.lesTocoControlAntidoping(), "Atletas a los que le toco control antidoping :"); Pausar(); LimpiarPantalla(); break; } case 10: { cout << "¿Está finalizada la competencia? " << competencia.finalizada() << endl; Pausar(); LimpiarPantalla(); break; } case 11: { LimpiarPantalla(); ofstream archivoSalida; AbrirArchivoParaEscribir(archivoSalida); competencia.guardar(archivoSalida); archivoSalida.close(); LimpiarPantalla(); MenuCompetencia(); break; } case 12: { LimpiarPantalla(); competencia.mostrar(cout); Pausar(); LimpiarPantalla(); MenuCompetencia(); break; } case 13: { MostrarAtletas(competencia.participantes(), "Participantes de la competencia: "); Pausar(); LimpiarPantalla(); MenuCompetencia(); break; } case 14: { cout << "Categoria: " << "[ Deporte: " << competencia.categoria().first << "| Sexo: " << competencia.categoria().second << "]" << endl; Pausar(); LimpiarPantalla(); MenuCompetencia(); break; } case 15: { cout << "Ingresando nuevo participante" << endl; Atleta nuevoAtleta = MenuCrearAtleta(); competencia.clasificoTarde(nuevoAtleta); LimpiarPantalla(); MenuCompetencia(); break; } } }