예제 #1
0
void MainWindow::on_actionOpen_Disk_triggered()
{
    QString disco = QFileDialog::getOpenFileName(this, "Seleccione un disco", "", "*.disk");
    if(disco == "")
        return;
    QFileInfo file(disco);
    QString name = file.baseName();
    name.append(".disk");
    Lista<string>* canciones = disk.openDisk(name.toStdString());
    this->cant_bloques_previo = disk.super.used_blocks;

    if(canciones != NULL)
    {
        for(int i = 0; i < canciones->getCantidad(); i++)
        {
            string cancion = canciones->obtenerValor(i);
            ui->cmbSongs->addItem(cancion.c_str());
        }
    }

    enableButtons();
    ui->tableWidget->setRowCount(disk.super.cant_block / ui->tableWidget->columnCount());
    loadTable();
}
예제 #2
0
/* Método calculaProbabilidade
* Irá calcular a probabilidade de um carro virar em uma pista, de acordo com um valor randômico
* gerado na classe Carro.
* @see retornaTamanho
* @see getProbabilidade
* @return i retornará um valor entre 0 e o tamanho da lista de pistas, que representará qual foi a pista
* que o carro escolheu.
* @return -1 Caso, ocorra algo que de erro, poderá ser identificado para posterior solução.
*/
	int calculaProbabilidade(Carro* c) {
		int *prob = probabilidades;
		int numPistas = pistas->retornaTamanho();
		int probabilidadeDoCarro = c->getProbabilidade();
		int valorComp[numPistas];
		valorComp[0] = prob[0];					
		for (int i = 1; i < numPistas; i++) {
			valorComp[i] = valorComp[i - 1] + prob[i];
		}
		for (int i = 0; i < numPistas; i++) {
			if (probabilidadeDoCarro <= valorComp[i]) {
				return i;
			}
		}
		return -1;
	}
예제 #3
0
int _tmain(int argc, _TCHAR* argv[])
{


	srand(time(NULL));

	Lista l;
	cout << "Crear una lista l con los valores, 2,3,6,7" << endl;
	l.insertarFinal(new ElementoInt(2));
	l.insertarFinal(new ElementoInt(3));
	l.insertarFinal(new ElementoInt(6));
	l.insertarFinal(new ElementoInt(7));
	cout << "La lista l es: " << l << endl;
	cout << endl;
	
	cout << "Insertar el elemento 12, al inicio" << endl;
	l.insertarInicio(new ElementoInt(12));
	cout <<"La lista l es: "<< l << endl;
	cout << endl;

	cout << "Insertar el elemento 67, en la posicion 2" << endl;
	l.insertar(new ElementoInt(67), 2);
	cout << "La lista l es: " << l << endl;
	cout << endl;

	cout << "Remover el elemento del final" << endl;
	l.removerFinal();
	cout << "La lista l es: " << l << endl;
	cout << endl;

	cout << "Remover el elemento del inicio" << endl;
	l.removerInicio();
	cout << "La lista l es: " << l << endl;
	cout << endl;

	cout << "Remover el elemento de la posicion 2" << endl;
	l.remover(2);
	cout << "La lista l es: " << l << endl;
	cout << endl;

	system("pause");
	return 0;

}
예제 #4
0
	Conn_Server* ServerTCP::accetta(Address* client){	//L'indirizzo verrà compilato dalla funzione
		Conn_Server* conn;
		int id;
		int len_addr;

		len_addr = sizeof(struct sockaddr_in);	//Per evitare errori per i valori non impostati bisogna impostare prima
		id = accept(get_sock_id(), (struct sockaddr*) client->get_addr(),(socklen_t*) &len_addr);		//Aspetta e accetta la connessione da un client scrivendo il suo indirizzo nei parametri client->get_addr

		if(id<=0){
			return NULL;
		}

		conn=new Conn_Server(id);	//Crea la connessione in base all'id

		lista_connessione->add_Nodo(conn);
		return conn;	//Ritorna la connessione per l'utilizzo separato dalla lista
	}	
예제 #5
0
파일: Controller.cpp 프로젝트: ximarx/asd
/**
 * Riempie ricorsivamente un sotto-albero in base all'elemento
 * da inserire
 * [FUNZIONE_PRIVATA]
 */
void private_riempiAlbero(Lista lista, int lunghezzaLista, Albero &t, nodoBin nodoRiferimento) {
	
	tipoelem elemento;
	posizione p;
	nodoBin nuovoRiferimentoSx, nuovoRiferimentoDx;
	Lista listaSx, listaDx;
	int lSottolistaSx, lSottolistaDx;
	
	// 1: calcola il mediano e lo scrive nel nodo di riferimento
	p = mediano(lista,lista.primoLista(), lista.pos(lunghezzaLista));
	lista.leggiLista(elemento, p);
	t.scriviNodo(nodoRiferimento, elemento);
	// :1
	// 2: calcola la sottolista sinistra in base al mediano
	listaSx = creaSottoLista(lista, lista.primoLista(), p);
	lSottolistaSx = lunghezza(lista, lista.primoLista(), p);
	// 2.1: controlla che abbia senso avviare una ricorsione
	if ( lSottolistaSx > 0 ) {
		t.insFiglioSx(nodoRiferimento);
		nuovoRiferimentoSx = t.figlioSx(nodoRiferimento);
		// 2.1.1 Se la lista ha 1 solo elemento, allora è una foglia
		if ( lSottolistaSx == 1 ) {
			listaSx.leggiLista(elemento, listaSx.primoLista());
			t.scriviNodo(nuovoRiferimentoSx, elemento);
		// :2.1.1
		// 2.1.2 Se la lista ha piu di un elemento allora avvia la ricorsione
		} else {
			private_riempiAlbero(listaSx, lSottolistaSx, t, nuovoRiferimentoSx);
		}
		// :2.1.2
	}
	// :2.1
	// 3: calcola la sottolista destra analogamente a quella sinistra
	listaDx = creaSottoLista(lista, lista.succLista(p), salta(lista, lista.primoLista(), lunghezzaLista));
	lSottolistaDx = lunghezzaLista / 2;
	if ( lSottolistaDx > 0 ) {		
		t.insFiglioDx(nodoRiferimento);
		nuovoRiferimentoDx = t.figlioDx(nodoRiferimento);
		if ( lSottolistaDx == 1 ) {
			listaDx.leggiLista(elemento, listaDx.primoLista());
			t.scriviNodo(nuovoRiferimentoDx, elemento);
		} else {
			private_riempiAlbero(listaDx, lSottolistaDx, t, nuovoRiferimentoDx );
		}
	}
	// :3
	return;
}
예제 #6
0
/* Método passaCarro.
* Este método será responsável por fazer um carro passar pelo semáforo, adicionando-o em outra fila (outra pista) e
* removendo o mesmo da fila atual.
* @see FilaEnc::primeiro
* @see calculaProbabilidade
* @see estaCheia
* @see removeCarro
* @see adicionaCarro
* @exception ExcecaoSinalVermelho Se o sinal estiver vermelho o carro não poderá passar para outra pista.
* @return proxima Retornará qual será a próxima pista em que o carro estará.
*/
	Pista* passaCarro() {
		Carro* c = pistaLocal->primeiro();

		int pistaEscolhida = calculaProbabilidade(c);
		Pista* proxima = pistas->mostra(pistaEscolhida);
		if(isAberto()) {
			if (!proxima->estaCheia(c)) {
				pistaLocal->removeCarro();
				proxima->adicionaCarro(c);
				return proxima;
			} else {
				proxima = pistaLocal;
			}
		} else {
			throw ExcecaoSinalVermelho;
		}
		return proxima;
	}
예제 #7
0
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;
}
int main()
{
    int iPuntuacion = 0, iNumCorte = 0;
    string Entrada;

    Lista Jugadores;
    while( cin >> Entrada >> iPuntuacion ) {
        if( Entrada == "corte" ) {
            iNumCorte++;
            for( Lista::iterator it = Jugadores.begin(); it != Jugadores.end(); it++ ) {
                if( it->second.first < iPuntuacion && it->second.second == 0 ) {
                    it->second.second = iNumCorte;
                }
            }
        } else {
            if( iNumCorte == 0 ) {
                Jugadores[Entrada].first += iPuntuacion;
            } else {
                if( Jugadores.find( Entrada ) == Jugadores.end() ) {
                    cout << Entrada << "?" << endl;
                } else {
                    if( Jugadores[Entrada].second != 0 ) {
                        cout << Entrada << " OUT" << endl;
                    } else {
                        Jugadores[Entrada].first += iPuntuacion;
                    }
                }
            }
        }
    }

    vector<Pareja> Ordenar;
    for( Lista::iterator it = Jugadores.begin(); it != Jugadores.end(); it++ ) {
            Ordenar.push_back( Pareja(it->second.first, it->first) );
    }
    sort( Ordenar.begin(), Ordenar.end(), Comparar );

    for( int i = 0; i < int(Ordenar.size()); i++ ) {
        if( Jugadores[Ordenar[i].second].second == 0 )
            cout << "** " << Ordenar[i].second << " " << Ordenar[i].first << endl;
        else
            cout << "C" << Jugadores[Ordenar[i].second].second << " " << Ordenar[i].second << " " << Ordenar[i].first << endl;
    }

    return 0;
}
예제 #9
0
파일: socket.hpp 프로젝트: PeiPei97/TDP_C
ConnessioneServer* ServerTCP::accetta() {
	Address addr;
	ConnessioneServer* conn;
	
	struct sockaddr_in sAddr = addr.get_sockaddr();
	
	socklen_t len = sizeof(struct sockaddr);
	
	int sock = accept(_sockId, (struct sockaddr*)&sAddr, (socklen_t*)&len);
#ifdef DEBUG
	printf("%s\n", strerror(errno));
#endif
	if(sock < 0)
		return NULL;
	addr.set_sockaddr(sAddr);
		
	conn = new ConnessioneServer(sock, addr);
	
	connessioni->add(conn);
	
	return conn;
}
예제 #10
0
PertCpm<Actividade*, int>
Projecto::load_pert()
{
    PertCpm<Actividade*, int> p;
    Lista<Actividade*> l = this->l_actividades;
    Actividade *a;
    Lista<Actividade*> lp = this->l_actividades;
    Actividade *b;
    int x = 1;
    int y = 1;
    while( ! l.vazia() ){
        l.remove( x, a);
        lp = a->getPrecedencias();
        while( ! lp.vazia() ){
            lp.remove(y, b);    
            p.juntar_ramo(y, b , a);
        }
    }
    return p; 
}
예제 #11
0
int main(){
	srand(time(NULL));
	int ilosc;
	//wczytywanie od uzytkownika informacji
	//o ilosci elementow dodanych do listy
	printf("Podaj ilosc elementow: ");
	scanf("%d",&ilosc);
	Lista zadanie;
 
	//dodawanie elementow do listy
	for(int i=0; i<ilosc; i++){
		if(!zadanie.AddSort(rand()%200+1)){
			printf("Klucz o podanym indexie juz istnieje!\n");
		}
	}
 
	zadanie.Wyswietl(true);
	int szuk;
	printf("Szukaj elementu: ");
	scanf("%d",&szuk);
 
	pole*sz=zadanie.Szukaj(szuk);
	//jezeli znalazlo
	if(sz){
		printf("Znalazlem klucz: %d\n",sz->klucz);
	}
	//jesli nie znalazlo
	else printf("Nie znalazlem podanego klucza!\n");
 
	int usun;
	printf("Usun element: ");
	scanf("%d",&usun);
 
	if(zadanie.Usun(usun)){
		printf("Usunalem klucz: %d\n",usun);
	}
	//jesli nie znalazlo
	else printf("Nie znalazlem podanego klucza!\n");
	zadanie.Wyswietl(false);
	return 0;
}
예제 #12
0
파일: Lista.cpp 프로젝트: 209163/PAMSI
 void Lista::quickSort(Lista list, int left, int right)
 {
 	int i=left;
 	int j=right;
 	int mid=(left+right)/2;
 	int x=list.getName(mid);
 	while(i<=j)
 	{
 		while(list.getName(i)<x) i++;
 		while(list.getName(j)>x) j--;
 		if (i<=j)
 		{
 			swap(list.getName(i), list.getName(j));
 			swap(list.getNext(i), list.getNext(j));
 			i++;
 			j--;
 		}
 	}
 	if(left<j) quickSort(list, left, j);
 	if(right>i) quickSort(list, i, right);
 }
예제 #13
0
bool Competencia::gananLosMasCapaces() const{
    Deporte d = categoria().first;
    Lista<Atleta> rank = ranking();
    int i = 0;
    bool res;

    while (i<_ranking.longitud()){
        if (rank.longitud()<=1){
            res = true;
            i = _ranking.longitud();
        } else {
            if(rank.iesimo(0).capacidad(d) >= rank.iesimo(1).capacidad(d)){
                rank.sacar(rank.iesimo(0));
            } else {
                res = false;
                i = _ranking.longitud();
            }
        }
    }
    return res;
}
예제 #14
0
void caminos_simples(const Grafo<C> & grafo, int origen, int destino,
		     bool visitado[], Lista<Lista<int> > & caminos, Lista<int> & camino_parcial)
{
     visitado[origen] = true;
     camino_parcial.agregarFinal(origen);
     if (origen == destino) {
	  caminos.agregarFinal(camino_parcial);
	  camino_parcial.eliminarFinal();
	  visitado[origen] = false;
	  return;
     }
     
     Lista<typename Grafo<C>::Arco> adyacentes;
     grafo.devolverAdyacentes(origen, adyacentes);
     typename Lista<typename Grafo<C>::Arco>::Iterador ady = adyacentes.devolverIterador();
     while (!ady.llegoAlFinal()) {
	  int v = ady.elementoActual().devolverAdyacente();
	  if (!visitado[v]) 
	       caminos_simples(grafo, v, destino, visitado, caminos, camino_parcial);
	  ady.avanzar();
     }
     camino_parcial.eliminarFinal();
     visitado[origen] = false;
}
예제 #15
0
LinkLinkIt::ItAcceso::ItAcceso(Lista<Acceso> &ac)
{
    _itLista = ac.CrearIt();
}
Nodo* Iterator::move_first(){
	if(_lista){
		_current=_lista->get_first();
	}
	return get_current();
}
예제 #17
0
void JJOO::cargar (std::istream& is) {
    char c;
    //Saco J anio jornada [
    is >> c >> _anio >> _jornadaActual >> c;
    bool loop = true;
    Lista<Atleta> nuevosAtletas;
    if(is.peek() != ']') {
        while(loop) {
            //Saco (
            is >> c;
            Atleta atle;
            atle.cargar(is);
            nuevosAtletas.agregarAtras(atle);
            //Saco )
            is >> c;
            if(is.peek() != ',') {
                loop = false;
            }
            else {
                //Saco la coma
                is >> c;
            }
        }
    }
    _atletas = nuevosAtletas;
    //Saco ] y [
    is >> c >> c;
    Lista<Lista<Competencia> > nuevasCompetenciasPorDia;
    if(is.peek() != ']') {
        loop = true;
        while(loop) {
            //Saco [
            is >> c;
            Lista<Competencia> nuevaCompetenciasEnElDia;
            if(is.peek() != ']') {
                Competencia compe;
                bool secLoop = true;
                while(secLoop) {
                    //Saco (
                    is >> c;
                    compe.cargar(is);
                    nuevaCompetenciasEnElDia.agregarAtras(compe);
                    //Saco )
                    is >> c;
                    if(is.peek() != ',') {
                        secLoop = false;
                    }
                    else {
                        //Saco la coma
                        is >> c;
                    }
                }
            }
            //Saco ]
            is >> c;
            nuevasCompetenciasPorDia.agregarAtras(nuevaCompetenciasEnElDia);
            if(is.peek() != ',') {
                loop = false;
            }
            else {
                //Saco la coma
                is >> c;
            }
        }
예제 #18
0
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);
}
예제 #19
0
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;
}
예제 #20
0
bool JJOO::uyOrdenadoAsiHayUnPatron() const {

    // Guardo acá la secuencia de mejores países.
    Lista<Pais> mejoresPaises;

    // Recorro los juegos día por día.
    int dia = 1;
    while(dia <= cantDias()) {

        // Guardo acá la cantidad de oros por país.
        Lista<pair<Pais, int> > oros;

        // Recorro el las competencias de este día.
        int i = 0;
        while(i < cronograma(dia).longitud()) {
            Competencia actual = cronograma(dia).iesimo(i);

            // Si la competencia actual está finalizada y alguien se llevó el oro,
            // voy a buscar la nacionalidad del medallista y voy a sumarle un oro a
            // ese país en mi lista de oros por país. En caso contrario, ignoro
            // esta competencia.
            if(actual.finalizada() && actual.ranking().longitud() > 0) {
                Pais pais = actual.ranking().iesimo(0).nacionalidad();

                // Busco el país del medallista en mi lista de oros por país.
                bool encontrado = false;
                int j = 0;
                while(j < oros.longitud() && !encontrado) {

                    // Si encontré el país del medallista en mi lista de oros por país,
                    // aumento en uno la cantidad de oros de ese país.
                    if(oros.iesimo(j).first == pais) {
                        pair<Pais, int> nuevaTupla = make_pair(oros.iesimo(j).first, oros.iesimo(j).second + 1);
                        oros.eliminarPosicion(j);
                        oros.agregarAtras(nuevaTupla);
                        encontrado = true;
                    }

                    j++;
                }

                // Si el país del medallista no estaba en la lista de oros por país,
                // agrego ese país a la lista, con cantidad de oros uno.
                if(!encontrado) {
                    oros.agregarAtras(make_pair(pais, 1));
                }
            }

            i++;
        }

        // Si hubieron oros este día, busco al mejor país y lo agrego a mejoresPaises.
        if(oros.longitud() > 0) {

            // Guardo acá el mejor país hasta el momento (tupla país/oros.)
            pair<Pais, int> mejorPais;

            // Recorro la lista de oros por país.
            i = 0;
            while(i < oros.longitud()) {

                // Si el país i-ésimo es el primero de la lista de oros, o si tiene más oros que el mejor país
                // hasta el momento, o si tiene igual cantidad de oros pero es  lexicográficamente menor,
                // entonces convierto al país i-ésimo en el mejor país hasta el momento.
                if( i == 0 ||
                    oros.iesimo(i).second > mejorPais.second ||
                   (oros.iesimo(i).second == mejorPais.second && oros.iesimo(i).first < mejorPais.first)) {
                    mejorPais = oros.iesimo(i);
                }

                i++;
            }

            // Finalmente, agrego al mejor país del día a la lista de mejores países.
            mejoresPaises.agregarAtras(mejorPais.first);
        }

        dia++;
    }

    bool hayPatron = true;

    // Busco patrón si y sólo si hay tres o más mejores países.
    if(mejoresPaises.longitud() >= 3) {

        // Recorro la lista de mejores países hasta el anteúltimo elemento.
        int i = 0;
        while(i < mejoresPaises.longitud() - 1) {
            Pais actual    = mejoresPaises.iesimo(i);
            Pais siguiente = mejoresPaises.iesimo(i + 1);

            // Recorro todos los países a la derecha del país actual
            int j = i + 1;
            while(j < mejoresPaises.longitud() - 1) {

                // Si el país j-ésimo es el mismo que el actual, verifico que el patrón
                // se cumpla (el elemento siguiente siempre debe ser el mismo.)
                if(mejoresPaises.iesimo(j) == actual) {
                    hayPatron = hayPatron && (mejoresPaises.iesimo(j + 1) == siguiente);
                }

                j++;
            }

            i++;
        }
    }

    return hayPatron;
}
예제 #21
0
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;
}
예제 #22
0
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;
}
예제 #23
0
  void Cine::cargar (std::istream& is) {

    Nombre n;
    Pelicula p;
    Lista<pair<Pelicula,Sala> > ps ;
    Lista<pair<Sala, int> > es ;
    Lista <Ticket> tvsu;
    int s;
    int e;
    int i;
    Ticket t;
    char c;
    is >> c;
    is >> c;
    getline(is, nombre_,'|');
    is >> c;//descarta el [
    while (c!=']') {
        is >> s;
        salasSinUsar_.agregarAtras(s);
        is >> c;//vale , o ]
    }
    is >> c;//descarta [
    while (c!=']') {
        is >> c;//descarta (
        if (c==']'){
            break;
        }
        is >> s;
        is >> c;//descarta ,
        is >> e;
        es.agregarAtras(make_pair(s,e));
        is >> c;//descarta )
        is >> c;//vale , o ]
    }
    espectadores_ = es;
    is >> c;//descarta [
    while (c!=']') {
        is >> c;//descarta (
        if (c==']'){
            break;
        }
        is >> s;
        is >> c;//descarta ,
        is >> i;
        while (i !=0) {
        ticketsVendidos_.agregar(Ticket(peliculaC(s),s,false));
        i=i-1;
        }
        is >> c;//descarta )
        is >> c;//vale , o ]
    }
    is >> c;//descarta [
    while (c!=']') {
        is >> c;//descarta (
        if (c==']'){
            break;
        }
        is >> s;
        is >> c;//descarta ,
        is >> c;//descarta (
        p.cargar(is);
        ps.agregarAtras(make_pair(p,s));
        is >> c;//descarta )
        is >> c;//descarta )
        is >> c;//vale , o ]
    }
    peliculas_ =ps;
    is >> c;
  }
예제 #24
0
void Reportes::reportePorDistrito(int idDistrito, bool guardaEncriptado, string claveEncriptado)
{
	ABMConteo *abmConteo = new ABMConteo();
	ABMEleccion* abmEleccion = new ABMEleccion();
	ABMCargo* abmCargo = new ABMCargo();
	ABMDistrito* abmDistrito = new ABMDistrito();
	std::stringstream out;

	vector<Conteo> resultados =  abmConteo->GetConteoByDistrito(idDistrito);

	if(resultados.size() == 0){
		out << "No se encontraron resultados." << endl;
		return;
	}

	//Primero ordeno por fecha de eleccion
	resultados = Reportes::OrderByFecha(resultados);

	//Agrupo por fecha de eleccion
	vector< vector<Conteo> > resAgrupados;
	vector<Conteo> cs;
	cs.push_back(resultados[0]);
	resAgrupados.push_back(cs);
	int idEleccionActual = resultados[0].GetIdEleccion();

	//Tengo que agrupar por eleccion
	for(int i = 1; i < resultados.size(); i++){

	      Conteo conteo = resultados[i];
	      if(conteo.GetIdEleccion() == idEleccionActual){
	    	resAgrupados[resAgrupados.size() - 1].push_back(conteo);
	      }
	      else{	//Nuevo grupo de eleccion

		      vector<Conteo> cs;
		      cs.push_back(conteo);
		      resAgrupados.push_back(cs);
		      idEleccionActual = conteo.GetIdEleccion();

	      }

	}
	for(int i = 0; i < resAgrupados.size(); i++){

		vector<Conteo> aux = Reportes::OrderByCantidadVotos(resAgrupados[i]);
		resAgrupados[i] = aux;
	}

	out << endl << endl << endl;

	ABMLista* abmLista = new ABMLista();
	for(int i = 0; i < resAgrupados.size(); i++){

		vector<Conteo> cs = resAgrupados[i];

		if(resAgrupados.size() > 0){

			Conteo conteo = cs[0];
			Eleccion* e = abmEleccion->GetEleccion(conteo.GetIdEleccion());
			string cargo = abmCargo->GetCargo(e->GetIdCargo())->GetNombre();
			Fecha fecha = e->GetDate().getStrFecha();

			out << "Eleccion: (" << fecha.getFriendlyStr() << " - " << cargo << ")" << endl;

			for(int j = 0; j < cs.size(); j++){

				Conteo res = cs[j];
				Lista* lista = abmLista->GetLista(res.GetIdLista());
				out << "		Lista: " << lista->GetNombre() << " tiene " << res.GetCountVotos() << " votos." << endl;
			}
		}
	}

	if (guardaEncriptado)
	{
		string fileName = ConfigurationMananger::getInstance()->getReportFileDirectory().append("ReportexDistrito");
		fileName.append(Helper::IntToString(Identities::GetNextNroReporteXDistrito())).append(".ecr");

		string reporteEncriptado = Vigenere::encriptar(claveEncriptado, out.str());
		ofstream file;
		file.open(fileName.c_str(), ios::app);
		file.write(reporteEncriptado.c_str(), reporteEncriptado.size());
		file.close();

		cout << "Reporte encriptado correctamente" << endl;
	}
	else{
		cout << out.str();
	}

	delete abmConteo;
	delete abmEleccion;
	delete abmCargo;
	delete abmDistrito;
	delete abmLista;
}
예제 #25
0
파일: main.cpp 프로젝트: jimmybanegas93/TDA
int main()
{
    Arreglo arr;
    Lista lista;
    int op;

   do{
      cout << "\nIngrese la opcion : "<<endl;
      cout << "1. Insertar nuevo empleado  "<<endl;
      cout << "2. Inicio  "<<endl;
      cout << "3. Final  "<<endl;
      cout << "4. Siguiente  "<<endl;
      cout << "5. Recuperar  "<<endl;
      cout << "6. Eliminar "<<endl;
      cout << "7. Mover  "<<endl;
      cout << "8. Imprimir empleados  "<<endl;

      cin>>op;

      switch(op)
      {
        case 1:
         {
          int id;
          string nombre;
          int pos;
          cout << "\nIngrese la posicion donde insertar  ";
          cin>>pos;
          cout << "\nIngrese el codigo de empleado  ";
          cin>>id;
          cout << "Ingrese el nombre  ";
          cin>>nombre;

          Nodo *a = new Nodo(id,nombre) ;

          if(lista.insertar(pos,a))
              cout << "\nInsertado exitosamente  "<<endl;
          else
              cout << "\nNo se pudo insertar  "<<endl;
         }
          break;
        case 2:
         {
          Nodo* b = lista.ini();

          if(b!=NULL)
          {
              cout<<"\nEl inicio es: ";
              cout<<"-----"<<b->emp->id<<" ";
              cout<<b->emp->nombre<<endl;
          }
          else
              cout<<"\nArreglo vacio"<<endl;
         }
          break;
         case 3:
          {
          Nodo* c=lista.fin();

          if(c!=NULL)
          {
              cout<<"\nEl fin es: ";
              cout<<"-----"<<c->emp->id<<" ";
              cout<<c->emp->nombre<<endl;
          }
          else
            cout<<"\nArreglo vacio"<<endl;
          }
          break;
      case 4:
       {
          int pos;
          cout << "\nIngrese la posicion para conocer su siguiente ";
          cin>>pos;
          Nodo* c=lista.siguiente(pos);

       if(c!=NULL)
       {
           cout<<"\nEl siguiente de la posicion "<<pos<<" es: ";
           cout<<"-----"<<c->emp->id<<" ";
           cout<<c->emp->nombre<<endl;
       }
       else
         cout<<"\nEsta posicion no tiene siguiente"<<endl;
       }
       break;

         case 5:
         {
          int p1;
          cout<<"\nIngrese la posicion a buscar: ";
          cin>>p1;
          Nodo * d= lista.recuperar(p1);
          if(d!=NULL)
          {
              cout<<"-----"<<d->emp->id<<" ";
              cout<<d->emp->nombre<<endl;
          }
          else
              cout<<"No se encuentra, revise parametros"<<endl;

         }
             break;
        case 6:
         {
          int p;
          cout<<"\nIngrese la posicion a eliminar: ";
          cin>>p;
          if(lista.eliminar(p))
             cout<<"\nEliminado exitosamente"<<endl;
          else
             cout<<"\nNo se pudo eliminar, revise los parametros "<<endl;

         }
          break;
        case 7:
          {
              int from,to;
              cout<<"\nIngrese la posicion de procedencia: ";
              cin>>from;
              cout<<"\nIngrese la posicion de destino: ";
              cin>>to;
              lista.mover(from,to);
          }
          break;
        case 8:
          {
              cout<<"\nListando empleados "<<endl;
              lista.imprimir();
          }
          break;
      }

    }while ( op >= 1 && op<=8 );

    return 0;
}
예제 #26
0
int _tmain(int argc, _TCHAR* argv[])
{
	
	cout << "-------Probando con Int-------" << endl;
  Lista<int> numInt;
  for (int i = 0; i < 5; ++i) {
		numInt.insertarAlFrente(i);
		numInt.imprimir();	
	}
  numInt.eliminarDelMedio(2);
  numInt.imprimir();

  cout << "-------Iterador hacia Adelante-------" << endl;
  Iterador<int> it = numInt.begin();
  while (it != numInt.end()) {
	  cout << *it << endl;
	  ++it;
  }

  cout << "-------Iterador Inverso-------" << endl;
  IteradorInverso<int> it2 = numInt.rbegin();
  while (it2 != numInt.rend()) {
	  cout << *it2 << endl;
	  ++it2;
  }

  cout << "-------Probando con Double-------" << endl;
  Lista<double> numDou;
  for (int i = 0; i < 5; ++i) {
	  numDou.insertarAlFrente(i/2.22);
	  numDou.imprimir();
  }
  numDou.eliminarDelMedio(2);
  numDou.imprimir();

  cout << "-------Iterador hacia Adelante-------" << endl;
  Iterador<double> it3 = numDou.begin();
  while (it3 != numDou.end()) {
	  cout << *it3 << endl;
	  ++it3;
  }

  cout << "-------Iterador Inverso-------" << endl;
  IteradorInverso<double> it4 = numDou.rbegin();
  while (it4 != numDou.rend()) {
	  cout << *it4 << endl;
	  ++it4;
  }

  cout << "-------Probando con Char-------" << endl;
  Lista<char> numChar;
  for (char i = 'a'; i < 'a' + 5; ++i) {
	  numChar.insertarAlFrente(i);
	  numChar.imprimir();
  }
  numChar.eliminarDelMedio(2);
  numChar.imprimir();

  cout << "-------Iterador hacia Adelante-------" << endl;
  Iterador<char> it5 = numChar.begin();
  while (it5 != numChar.end()) {
	  cout << *it5 << endl;
	  ++it5;
  }

  cout << "-------Iterador Inverso-------" << endl;
  IteradorInverso<char> it6 = numChar.rbegin();
  while (it6 != numChar.rend()) {
	  cout << *it6 << endl;
	  ++it6;
  }

  cout << "-------Probando con Clase Persona-------" << endl;
  Lista<Persona> numPersona;
  Persona p1("Arbol", "1");
  Persona p2("Hoja", "2");
  Persona p3("Zeta", "3");

  numPersona.insertarAlFinal(p2);
  numPersona.imprimir();
  numPersona.insertarAlFinal(p1);
  numPersona.imprimir();
  numPersona.insertarAlFinal(p3);
  numPersona.imprimir();
  numPersona.insertarAlFinal(p3);
  numPersona.imprimir();
  numPersona.insertarAlFinal(p2);
  numPersona.imprimir();
  numPersona.insertarAlFinal(p1);
  numPersona.imprimir();

  numChar.eliminarDelMedio(2);
  numChar.imprimir();

  cout << "-------Iterador hacia Adelante-------" << endl;
  Iterador<Persona> it7 = numPersona.begin();
  while (it7 != numPersona.end()) {
	  cout << *it7 << endl;
	  ++it7;
  }

  cout << "-------Iterador Inverso-------" << endl;
  IteradorInverso<Persona> it8 = numPersona.rbegin();
  while (it8 != numPersona.rend()) {
	  cout << *it8 << endl;
	  ++it8;
  }

	system("pause");
	return 0;
}
예제 #27
0
LinkLinkIt::itLinks::itLinks(Lista<DatosLink> &ldl){
        _itLista = ldl.CrearIt();
}
예제 #28
0
Lista<pair<Pais,Lista<int> > > JJOO::ordenarMedallero(const Lista<pair<Pais,Lista<int> > > & medallero) const {

    // Guardo acá mi copia ordenada del medallero.
    Lista<pair<Pais, Lista<int> > > ordenado;

    // Recorro el medallero.
    int i = 0;
    while(i < medallero.longitud()) {

        // Obtengo la tupla país/medallas actual y las medallas (para más legibilidad.)
        pair<Pais, Lista<int> > tuplaActual = medallero.iesimo(i);
        int oros    = tuplaActual.second.iesimo(0);
        int platas  = tuplaActual.second.iesimo(1);
        int bronces = tuplaActual.second.iesimo(2);

        // Guardo acá una copia de las tuplas país/medallas que ya ordené, junto con
        // la tupla país/medallas actual en la posición correcta.
        Lista<pair<Pais, Lista<int> > > nuevoOrdenado;
        bool agregado = false;

        // Recorro las tuplas país/medallas que ya ordené.
        int j = 0;
        while(j < ordenado.longitud()) {
            int orosOtro    = ordenado.iesimo(j).second.iesimo(0);
            int platasOtro  = ordenado.iesimo(j).second.iesimo(1);
            int broncesOtro = ordenado.iesimo(j).second.iesimo(2);

            // Ubico a la tupla país/medallas actual en la posición correcta dentro de la lista ordenada.
            if( !agregado &&
               ((oros >  orosOtro) ||
                (oros == orosOtro && platas >  platasOtro) ||
                (oros == orosOtro && platas == platasOtro && bronces >= broncesOtro))) {
                nuevoOrdenado.agregarAtras(tuplaActual);
                agregado = true;
            }

            // Dejo la tupla que ya había ordenado en la posición que le corresponde.
            nuevoOrdenado.agregarAtras(ordenado.iesimo(j));
            j++;
        }

        // Si luego de recorrer las tuplas país/medallas ya ordenadas resulta que todavía no agregué
        // la tupla país/medallas actual, es porque la tupla actual es la que menos medallas tiene, y
        // por lo tanto su posición es al final de la lista.
        if(!agregado) nuevoOrdenado.agregarAtras(tuplaActual);

        // Finalmente, reemplazo el medallero ordenado actual por mi nuevo medallero ordenado, que
        // incluye a la tupla país/medallas actual.
        ordenado = nuevoOrdenado;

        i++;
    }

    return ordenado;
}
예제 #29
0
LinkLinkIt::itPunLinks::itPunLinks(Lista<DatosLink*> &ldl, Fecha& f){
    _itLista = ldl.CrearIt();
    _fecha = f;
}
예제 #30
0
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;
}