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 main() { Lista l; l.agregar(new Perro(5,"hola")); l.agregar(new Perro(5,"adios")); l.agregar(new Perro(8,"valemadre")); l.insertar(new Lora(4,"blu"),9); cout<<l.buscar("adios")->edad<<endl; return 0; }
Lista<int> JJOO::generarRanking(const Competencia& competencia) const { // Guardo acá el ranking construído. Lista<int> ranking; Lista<Atleta> participantesSinRankear = competencia.participantes(); // Rankeo todos los participantes hasta quedarme sin participantes para rakear. while(participantesSinRankear.longitud() > 0) { // Busco el participante con menos capacidad entre los que aún no fueron rankeados. Atleta peorParticipante; int i = 0; while(i < participantesSinRankear.longitud()) { Deporte deporte = competencia.categoria().first; Atleta participante = participantesSinRankear.iesimo(i); // En caso de ser el peor hasta el momento, me quedo con el participante i-ésimo. if(i == 0 || participante.capacidad(deporte) < peorParticipante.capacidad(deporte)) { peorParticipante = participante; } i++; } // Agrego el peor participante hallado al principio del ranking. ranking.agregar(peorParticipante.ciaNumber()); // Lo elimino de la lista de participantes sin rankear. participantesSinRankear.eliminarPosicion(participantesSinRankear.posicion(peorParticipante)); } return ranking; }
int main() { Lista<string> l; l.agregar("Hola"); l.agregar("Mundo"); l.agregar("Ejemplo"); l.imprimir(); Lista<int> l2; l2.agregar(5); l2.agregar(21); l2.agregar(2); l2.imprimir(); return 0; }
Lista<Pelicula> Cine::peliculasC() const { Lista<std::pair<Pelicula,Sala> > ps=peliculas_; Lista<Pelicula> res; int i=0; while (i<ps.longitud()) { res.agregar((ps.iesimo(i)).first); i++; } return res; }
Lista<pair<int,bool> > JJOO::generarAntidoping(const Competencia& competencia) const { Lista<pair<int,bool> > antidoping; // Tomo al primer participante y lo agrego al control, con resultado falso. if(competencia.participantes().longitud() > 0) { antidoping.agregar(make_pair(competencia.participantes().cabeza().ciaNumber(), false)); } return antidoping; }
Lista<Atleta> Competencia::lesTocoControlAntidoping() const{ int largo = _controlAntidoping.longitud(); int i = 0; Lista<Atleta> atletas = Lista<Atleta> (); while(i<largo){ atletas.agregar(findAtletaByCiaNumber(_controlAntidoping.iesimo(i).first)); i++; } return atletas; }
Lista<Atleta> JJOO::dePaseo() const { Lista<Atleta> result; int i = 0; while (i < _atletas.longitud()) { if (!participantes().pertenece(_atletas.iesimo(i))) { result.agregar(_atletas.iesimo(i)); } i++; } return result; }
Lista<Competencia> JJOO::competenciasFinalizadasConOroEnPodio() const { Lista<Competencia> result; int i = 0; while (i < competencias().longitud()) { Competencia actual = competencias().iesimo(i); if (actual.finalizada() && actual.ranking().longitud() > 0) { result.agregar(actual); } i++; } return result; }
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 main(int argc, char const *argv[]) { Lista *l; l = new Lista(); Nodo *a = new Nodo(1); l->agregarInicio(a); l->agregarFinal(new Nodo(3)); l->agregarFinal(new Nodo(4)); l->agregar(new Nodo(2), 2); l->agregar(new Nodo(7), 3); l->imprimir(); return 0; }
void grafica::calcular_ruta_corta(int a , int b){ caja1 *p; caja2 *q,*limite; caja3 *r; existe_ruta=false; principio.agregar(a); q=principio.get_lugar_agregado(); while(q){ q->bandera=2; printf("\nerror1!!"); if(q->num_nodo==b){ existe_ruta=true; } (q->salientes).iniciar_recorrido(); p=(q->salientes).recorrer(); printf("\nerror2!!"); while(p&&existe_ruta==false){ printf("\nerror3.1!!"); printf("\ndireccion = %p",p->direccion); if((p->direccion)->bandera==0){ printf("\nerror3.1.1!!"); (p->direccion)->bandera=1; printf("\nerror3.1.1.1!!"); // printf("\nmi direccion es : %p y mi longitud tot : %f",p->direccion,q->ruta_corta+p->longitud); A.agregar(p->direccion,q->ruta_corta+p->longitud); printf("\nerror3.1.2!!"); r=A.get_lugar_agregado(); (p->direccion)->antecesor=q; (p->direccion)->ruta_corta=q->ruta_corta+p->longitud; printf("\nerror3.2!!"); }else if((p->direccion)->bandera==1&&(q->ruta_corta+p->longitud)<(p->direccion)->ruta_corta){ (p->direccion)->antecesor=q; (p->direccion)->ruta_corta=q->ruta_corta+p->longitud; A.ajustar((p->direccion)->lugar,q->ruta_corta+p->longitud); printf("\nerror3.3!!"); } printf("\nerror3.4!!"); p=(q->salientes).recorrer(); printf("\nerror3.5!!"); } q=A.sacar(); printf("\nerror4!!"); if(q){ limite=q; } printf("\nerror5!!"); } printf("\nEl proceso de encontrar la ruta mas corta ha terminado :)"); pintar_ruta(limite,a,b); printf("\nerror6!!"); }
Lista<pair<Pais, Lista<int> > > JJOO::medallero() const { Lista<Pais> paises = this->paises(); Lista<pair<Pais, Lista<int> > > medallero; // Recorro la lista de países. int i = 0; while(i < paises.longitud()) { Pais pais = paises.iesimo(i); int oros = 0; int platas = 0; int bronces = 0; // Recorro los rankings de todas las competencias y acumulo las medallas del país actual. int j = 0; while(j < competencias().longitud()) { Lista<Atleta> ranking = competencias().iesimo(j).ranking(); if(ranking.longitud() > 0 && ranking.iesimo(0).nacionalidad() == pais) oros++; if(ranking.longitud() > 1 && ranking.iesimo(1).nacionalidad() == pais) platas++; if(ranking.longitud() > 2 && ranking.iesimo(2).nacionalidad() == pais) bronces++; j++; } // Si el país ganó alguna medalla, agrego al medallero la tupla país/medallas. if(oros + platas + bronces > 0) { Lista<int> medallas; medallas.agregarAtras(oros); medallas.agregarAtras(platas); medallas.agregarAtras(bronces); medallero.agregar(make_pair(pais, medallas)); } i++; } // Devuelvo el medallero ordenado return ordenarMedallero(medallero); }
Lista<Pais> JJOO::sequiaOlimpica() const { Lista<Pais> paises = this->paises(); // Guardo acá una lista de tuplas país/máxima cantidad de días que pasaron sin ganar medallas. Lista<pair<Pais,int> > paisDiasSinGanar; // Recorro todos los países. int i = 0; while (i < paises.longitud()) { Pais pais = paises.iesimo(i); // Armo una lista con las jornadas ganadoras de ese país. Lista<int> jornadasGanadoras; // Agrego un cero al principio de la lista para poder calcular // las diferencias entre días (como en la especificación.) jornadasGanadoras.agregar(0); // Recorro las jornadas hasta la actual, excluyéndola. int j = 1; while (j < jornadaActual()){ // Si el país ganó alguna medalla en la jornada // actual, agrego la jornada a la lista. if(ganoMedallasEseDia(pais, j)) { jornadasGanadoras.agregarAtras(j); } j++; } // Agrego la jornada actual al final de la lista, para poder calcular // las diferencias entre días (otra vez, como en la especificación.) jornadasGanadoras.agregarAtras(jornadaActual()); // Calculo la máxima diferencia entre días, y agrego // la tupla país/diferencia de días a la lista. paisDiasSinGanar.agregarAtras(make_pair(pais, maximaDistanciaEntreJornadas(jornadasGanadoras))); i++; } // Busco la máxima cantidad de días que algún país pasó sin ganar medallas. int maximosDiasSinGanar; i = 0; while(i < paisDiasSinGanar.longitud()) { if(i == 0 || paisDiasSinGanar.iesimo(i).second > maximosDiasSinGanar) { maximosDiasSinGanar = paisDiasSinGanar.iesimo(i).second; } i++; } // Me quedo con los países cuya mayor cantidad de días sin ganar medallas // es mayor o igual que la del resto de los países. Lista<Pais> secos; i = 0; while (i < paisDiasSinGanar.longitud()) { if(paisDiasSinGanar.iesimo(i).second == maximosDiasSinGanar) { secos.agregar(paisDiasSinGanar.iesimo(i).first); } i++; } return secos; }
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; } } }