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; }
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 MenuAtleta() { int maximaOpcion = 2; cout << "Creando atleta" << endl << "0. Volver al Menu Principal" << endl << "1. Crear atleta" << endl << "2. Cargar atleta" << endl; if (atletaCreado) { maximaOpcion = 10; cout << "3. Entrenar nuevo deporte" << endl << "4. Guardar atleta" << endl << "5. Mostrar" << endl << "6. Nombre" << endl << "7. Sexo" << endl << "8. Anio de nacimiento" << endl << "9. Nacionalidad" << endl << "10. CIA Number" << endl; } int opt = LeerOpcion(maximaOpcion); LimpiarPantalla(); switch(opt) { case 0: { LimpiarPantalla(); break; } case 1: { LimpiarPantalla(); atleta = MenuCrearAtleta(); atletaCreado = true; LimpiarPantalla(); MenuAtleta(); break; } case 2: { LimpiarPantalla(); ifstream archivoEntrada; AbrirArchivoParaLeer(archivoEntrada); atleta.cargar(archivoEntrada); archivoEntrada.close(); atletaCreado = true; LimpiarPantalla(); MenuAtleta(); break; } case 3: { int cantidad; //TODO: Chequear si la capacidad era un parametro más string nuevoDeporte; cout << "Indicar el deporte que desea entrenar y cuanto :"; cin >> nuevoDeporte; cin >> cantidad; atleta.entrenarNuevoDeporte(nuevoDeporte, cantidad); LimpiarPantalla(); MenuAtleta(); break; } case 4: { LimpiarPantalla(); ofstream archivoSalida; AbrirArchivoParaEscribir(archivoSalida); atleta.guardar(archivoSalida); archivoSalida.close(); LimpiarPantalla(); MenuAtleta(); break; } case 5: { LimpiarPantalla(); atleta.mostrar(cout); Pausar(); LimpiarPantalla(); MenuAtleta(); break; } case 6: { cout << "Nombre: " << atleta.nombre() << endl; Pausar(); LimpiarPantalla(); MenuAtleta(); break; } case 7: { cout << "Sexo: " << ((atleta.sexo()==Femenino)? "Femenino" : "Masculino") << endl; Pausar(); LimpiarPantalla(); MenuAtleta(); break; } case 8: { cout << "Anio de nacimiento: " << atleta.anioNacimiento() << endl; Pausar(); LimpiarPantalla(); MenuAtleta(); break; } case 9: { cout << "Nacionalidad: " << atleta.nacionalidad() << endl; Pausar(); LimpiarPantalla(); MenuAtleta(); break; } case 10: { cout << "CIA Number: " << atleta.ciaNumber() << endl; Pausar(); LimpiarPantalla(); MenuAtleta(); break; } } }