Пример #1
0
bool JJOO::mismoCronograma(const JJOO& j) const {
    bool igual = true;

    // Verifico misma cantidad de días.
    if(cantDias() == j.cantDias()) {

        // Recorro el cronograma día por día.
        int i = 1;
        while(i < cantDias()) {

            // Verifico misma cantidad de competencias en la jornada i-ésima.
            if(cronograma(i).longitud() == j.cronograma(i).longitud()) {

                // Recorro competencias de la instancia de JJOO a comparar.
                int k = 0;
                while(k < j.cronograma(i).longitud()) {

                    // Verifico que ambos cronogramas tengan las mismas competencias.
                    if(!cronograma(i).pertenece(j.cronograma(i).iesimo(k))) {
                        igual = false;
                    }

                    k++;
                }
            } else {
                igual = false;
            }
            i++;
        }
    } else {
        igual = false;
    }

    return igual;
}
Пример #2
0
bool JJOO::mismosAtletas(const JJOO& j) const {
    bool igual = true;

    // Verifico misma cantidad de atletas.
    if(_atletas.longitud() == j.atletas().longitud()) {

        // Recorro lista de atletas de instancia a comparar.
        int i = 0;
        while(i < _atletas.longitud()) {

            // Verfico que ambas instancias tengan los mismos atletas.
            if(!j.atletas().pertenece(_atletas.iesimo(i))) {
                igual = false;
            }
            i++;
        }
    } else {
        igual = false;
    }

    return igual;
}
Пример #3
0
Atleta atletaProdigio(const JJOO & j) {

    Atleta a = j.competenciasFinalizadasConOroEnPodio().cabeza().ranking().iesimo(0);
    int i= 1;

    // vale Pc: |competenciasConOroEnPodio(j)| > 0 && i == 1 && |competenciasConOroEnPodio(j)| >0
    // && a == cab ([campeon(c)| c <- competenciasConOroEnPodio(j)]);

    // Quiero ver: Pc -> I;
    // implica 1 <= i <= |competenciasConOroEnPodio|;
    // implica (∀c ∈ competenciasConOroEnPodio(j)[0..1)) añoNacimiento(a) >= añoNacimiento(campeon(c));
    // implica 1 <= i <= |competenciasConOroEnPodio| && esCampeon(a,j)
    // && (∀c ∈ competenciasConOroEnPodio(j)[0..i)) añoNacimiento(a) >= añoNacimiento(campeon(c));
    // Luego, Pc -> I;

    while (i<j.competenciasFinalizadasConOroEnPodio().longitud()) {
        // B: i < |competenciasConOroEnPodio(j)|
        // I: 1 <= i <= |competenciasConOroEnPodio(j)| && esCampeon(a,j)
        //&& (∀c ∈ competenciasConOroEnPodio(j)[0..i)) añoNacimiento(a) >= añoNacimiento(campeon(c));

        // variante V: |competenciasConOroEnPodio(j)| - i;
        // cota C: 0;

        // Estado E1;
        // vale I && B;

        if (a.anioNacimiento()
                <= j.competenciasFinalizadasConOroEnPodio().iesimo(i).ranking().iesimo(0).anioNacimiento() ) {
            // Estado IF1;
            // vale i == i@E1
            // && añoNacimiento(a@E1) <= añoNacimiento(campeon(competenciasConOroEnPodio(j)[i]));

            a = j.competenciasFinalizadasConOroEnPodio().iesimo(i).ranking().iesimo(0);
            // Estado G
            // vale i == i@E1
            // && añoNacimiento(a@E1) <= añoNacimiento(campeon(competenciasConOroEnPodio(j)[i]))
            // && a == campeon(competenciasConOroEnPodio(j)[i]);
        }

        // Estado E2;
        // vale G || H;
        // implica (añoNacimiento(a@E1) <= añoNacimiento(campeon(competenciasConOroEnPodio(j)[i]))
        // && a == campeon(competenciasConOroEnPodio(j)[i]))
        // || (añoNacimiento(a@E1) > añoNacimiento(campeon(competenciasConOroEnPodio(j)[i]))
        // && a == a@E1);
        // implica añoNacimiento(a) > añoNacimiento(campeon(competenciasConOroEnPodio(j)[i]));
        // implica esCampeon(a,j);
        // implica (∀c ∈ competenciasConOroEnPodio(j)[0..i]) añoNacimiento(a) >= añoNacimiento(campeon(c))

        i++;

        // Estado E3;
        // vale i == i@E2 + 1 && esCampeon(a,j)
        // && (∀c ∈ competenciasConOroEnPodio(j)[0..i@E2])
        // añoNacimiento(a) >= añoNacimiento(campeon(c));
        // implica 1 < i;
        // implica i == i@E2 + 1 < |competenciasConOroEnPodio(j)| + 1 <= |competenciasConOroEnPodio(j)|;
        // implica 1 <= i <= |competenciasConOroEnPodio(j)|;
        // implica i@E2 == i - 1;
        // implica (∀c ∈ competenciasConOroEnPodio(j)[0..i - 1])
        // añoNacimiento(a) >= añoNacimiento(campeon(c));
        // implica 1 <= i <= |competenciasConOroEnPodio(j)| && esCampeon(a)
        // && (∀c ∈ competenciasConOroEnPodio[0..i)) añoNacimiento(a) >= añoNacimiento(campeon(c));

        // Luego, E3 -> I;
        // (El invariante se mantiene)
        //
        // Quiero ver que la función variante disminuye
        // vale V = |competenciasConOroEnPodio(j)| - i@E3;
        // implica V = |competenciasConOroEnPodio(j)| - (i@E1 + 1);
        // implica V = |competenciasConOroEnPodio(j)| - i@E1 - 1 <
        // |competenciasConOroEnPodio(j)| - i@E1 == V@E1;
        // luego, V@E3 < V@E1.

        // Quiero Ver: (I && (V <= C)) -> ¬B.
        // Si V <= C, entonces vale I && (V <= C);
        // implica 1 <= i <= |competenciasConOroEnPodio(j)| && esCampeon(a,j)
        //&& ((∀c ∈ competenciasConOroEnPodio(j)[0..i)) añoNacimiento(a) >= añoNacimiento(campeon(c)))
        // && (|competenciasConOroEnPodio(j)| - i <= 0);

        // implica |competenciasConOroEnPodio(j)| <= i;
        // implica i == |competenciasConOroEnPodio(j)|;
        // implica ¬(i < |competenciasConOroEnPodio(j)|);
        //
        // Luego, (I && (V <= C)) -> ¬B.
    }

    // vale Qc: i == |competenciasConOroEnPodio(j)| && esCampeon(a,j)
    // && (∀c ∈ competenciasConOroEnPodio(j)) añoNacimiento(a) >= añoNacimiento(campeon(c));

    // Quiero Ver: (I && ¬B) -> Qc.
    // vale I && ¬B
    // implica 1 <= i <= |competenciasConOroEnPodio(j)| && esCampeon(a,j)
    //&& ((∀c ∈ competenciasConOroEnPodio(j)[0..i)) añoNacimiento(a) >= añoNacimiento(campeon(c)))
    // && ¬(i < |competenciasConOroEnPodio(j)|)

    // implica i >= |competenciasConOroEnPodio(j)|
    // implica i == |competenciasConOroEnPodio(j)|
    // implica (∀c ∈ competenciasConOroEnPodio(j)[0..|competenciasConOroEnPodio(j)|)) añoNacimiento(a) >=
    // añoNacimiento(campeon(c))
    // implica (∀c ∈ competenciasConOroEnPodio(j)) añoNacimiento(a) >= añoNacimiento(campeon(c))
    // implica i == |competenciasConOroEnPodio(j)| && esCampeon(a,j)
    // && (∀c ∈ competenciasConOroEnPodio(j)) añoNacimiento(a) >= añoNacimiento(campeon(c))
    // luego, (I && ¬B) -> Qc.

    return a;

    // vale      result == a
    // implica   esCampeon(result,j)
    // && (∀c ∈ competenciasConOroEnPodio(j)) añoNacimiento(result) >= añoNacimiento(campeon(c))
}
Пример #4
0
bool JJOO::operator==(const JJOO& j) const {
    return _anio == j.anio() && _jornadaActual == j.jornadaActual() && mismosAtletas(j) && mismoCronograma(j);
}
Пример #5
0
void MenuJJOO()
{
    int maximaOpcion = 2;

    cout << "Creando competencia" << endl
            << "0. Volver al Menu Principal" << endl
            << "1. Crear JJOO" << endl
            << "2. Cargar JJOO" << endl;
    if (jjooCreado)
    {
        maximaOpcion = 19;
        cout << "3. Transcurrir dia" << endl
            << "4. StevenBradbury" << endl
            << "5. LiuSong" << endl
            << "6. Los mas fracasados" << endl
            << "7. Medallero" << endl
            << "8. De paseo" << endl
            << "9. Sequia olimpica" << endl
            << "10. ¿Ordenados asi hay un patron?" << endl
            << "11. Boicot por disciplina" << endl
            << "12. Guardar" << endl
            << "13. Mostrar" << endl
            << "14. Ver anio" << endl
            << "15. Ver Jornada actual" << endl
            << "16. Ver atletas" << endl
            << "17. Cantidad de dias" << endl
            << "18. Atleta Prodigio" << endl
			<< "19. Deportes no olimpicos" << endl;
    }

    int opt = LeerOpcion(maximaOpcion);

    LimpiarPantalla();
    switch(opt)
    {
        case 0:
        {
            LimpiarPantalla();
            break;
        }
        case 1:
        {
            LimpiarPantalla();
            jjoo = MenuCrearJJOO();
            jjooCreado = true;
            LimpiarPantalla();
            MenuJJOO();
            break;
        }
        case 2:
        {
            LimpiarPantalla();
            ifstream archivoEntrada;
            AbrirArchivoParaLeer(archivoEntrada);
            jjoo.cargar(archivoEntrada);
            archivoEntrada.close();
            jjooCreado = true;
            LimpiarPantalla();
            MenuJJOO();
            break;
        }
        case 3:
        {
            LimpiarPantalla();
            cout << "Comenzando a transcurrir dia" << endl;
            jjoo.transcurrirDia();
            cout << "Dia transcurrido" << endl;
            Pausar();
            LimpiarPantalla();
            MenuJJOO();
            break;
        }
        case 4:
        {
            LimpiarPantalla();
            cout << "Nombre: " << jjoo.stevenBradbury().nombre() <<  "CIA Number: " << jjoo.stevenBradbury().ciaNumber() << endl;
            Pausar();
            LimpiarPantalla();
            MenuJJOO();
            break;
        }
        case 5:
        {
            int id;
            string pais;
            LimpiarPantalla();
            MostrarAtletas(jjoo.atletas(), "Atletas del Juego Olimpico: ");
            cout << "Indique el atleta y el pais al cual sera nacionalizado :" << endl;
            cin >> id;
            cin >> pais;
            jjoo.liuSong(jjoo.atletas().iesimo(id), pais);
            Pausar();
            LimpiarPantalla();
            MenuJJOO();
            break;
        }
        case 6:
        {
            string pais;
            cout << "Indique el pais del cual desea conocer sus atletas mas fracasados: ";
            cin >> pais;
            MostrarAtletas(jjoo.losMasFracasados(pais), "Los mas fracasados: ");
            Pausar();
            LimpiarPantalla();
            MenuJJOO();
            break;
        }
        case 7:
        {
            cout << "Medallero olimpico" << endl;
            cout << "Pais" << "     " << "Medallas" << endl;
            for (int i = 0; i < jjoo.medallero().longitud(); i++)
            {
                cout << jjoo.medallero().iesimo(i).first << "       " << jjoo.medallero().iesimo(i).second << endl;
            }
            Pausar();
            LimpiarPantalla();
            MenuJJOO();
            break;
        }
        case 8:
        {
            MostrarAtletas(jjoo.dePaseo(), "Atletas de paseo :");
            Pausar();
            LimpiarPantalla();
            MenuJJOO();
            break;
        }
        case 9:
        {
            cout << "Sequia olimpica: " << endl;
            for (int i = 0; i < jjoo.sequiaOlimpica().longitud(); i++)
            {
                cout << jjoo.sequiaOlimpica().iesimo(i) << " ";
            }
            Pausar();
            LimpiarPantalla();
            MenuJJOO();
            break;
        }
        case 10:
        {
            cout << "¿Hay un patron? " << jjoo.uyOrdenadoAsiHayUnPatron() << endl;
            Pausar();
            LimpiarPantalla();
            MenuJJOO();
            break;
        }
        case 11:
        {
            string deporte, sexo, pais;
            Sexo sexoFinal;
            cout << "Indique el deporte y sexo de la categoria y el pais que desea boicotear : ";
            cin >> deporte;
            cin >> sexo;
            cin >> pais;

            if (sexo == "f" || sexo == "F" || sexo == "femenino" || sexo == "Femenino")
            {
                sexoFinal = Femenino;
            }
            if (sexo == "m" || sexo == "M" || sexo == "masculino" || sexo == "Masculino")
            {
                sexoFinal = Masculino;
            }
            jjoo.boicotPorDisciplina(pair<Deporte, Sexo>(deporte, sexoFinal), pais);
            cout << "Boicot aplicado" << endl;
            Pausar();
            LimpiarPantalla();
            MenuJJOO();
            break;
        }
        case 12:
        {
            LimpiarPantalla();
            ofstream archivoSalida;

            AbrirArchivoParaEscribir(archivoSalida);
            jjoo.guardar(archivoSalida);
            archivoSalida.close();

            LimpiarPantalla();
            MenuJJOO();
            break;
        }
        case 13:
        {
            LimpiarPantalla();
            jjoo.mostrar(cout);
            Pausar();
            LimpiarPantalla();
            MenuJJOO();
            break;
        }
        case 14:
        {
            cout << "Anio: " << jjoo.anio() << endl;
            Pausar();
            LimpiarPantalla();
            MenuJJOO();
            break;
        }
        case 15:
        {
            cout << "Jornada actual: " << jjoo.jornadaActual() << endl;
            Pausar();
            LimpiarPantalla();
            MenuJJOO();
            break;
        }
        case 16:
        {
            MostrarAtletas(jjoo.atletas(), "Atletas del Juego olimpico: ");
            Pausar();
            LimpiarPantalla();
            MenuJJOO();
            break;
        }
        case 17:
        {
            cout << "Cantidad de dias: " << jjoo.cantDias() << endl;
            Pausar();
            LimpiarPantalla();
            MenuJJOO();
            break;
        }
        case 18:
        {
            cout << "El Atleta prodigio es: " << endl;
            atletaProdigio(jjoo).mostrar(cout);
            Pausar();
            LimpiarPantalla();
            MenuJJOO();
            break;
        }
		case 19:
		{
			cout << "Deportes no olimpicos" << endl;
			Lista<Deporte> deportes = jjoo.deportesNoOlimpicos();
			cout << "[ ";
			for(int i = 0; i < deportes.longitud(); i++)
			{
				cout << deportes.iesimo(i) << " ";
			}
			cout << "]";
		}
    }
}