Example #1
0
pila_t* mostrar_enviados(pila_t* pila, vector_t *vectorzonas, vector_t* vectorprecios){
	pedido_t* pedido;
	pila_t * pila_nueva=pila_crear();
	pila_t *pila_aux=pila_crear();
	int recaudado=0;
	printf ("\n");
	printf ("Los pedidos que fueron enviados, en orden del mas reciente al mas antiguo, son: \n");
	printf ("\n");
	while (!pila_esta_vacia(pila)){
		pedido=pila_desapilar(pila);
		int* precio= (int*) vector_obtener(vectorprecios, pedido->zona-1);
		recaudado+=( (*precio) *(pedido->cantidad));
		pila_apilar(pila_aux, pedido);
		printf("Pedido: %s Cantidad: %d Zona: %d \n",pedido->nombre,pedido->cantidad,pedido->zona);
	}
	printf("\n\n");
	printf("Lo recaudado en total en los ultimos envios: $ %d\n", recaudado);
	while (!pila_esta_vacia(pila_aux)){
		pila_apilar(pila_nueva, pila_desapilar(pila_aux));
		}
	pila_destruir(pila_aux);
	pila_t *piladestruir=pila;
	if (piladestruir)
		pila_destruir(piladestruir);
	return pila_nueva;
}
Example #2
0
void posfijo(char *colaE,pila_tipo_dato *pilaOP, char *numactual,int fin_linea ){
     char oper='\0'; //auxiliar
      int Boolinsert=0;
     char sep='#';
    if (esOperador(numactual)==0){ //quiere decir que es operando o numero
        if (fin_linea==1){ //simbolo terminal
           while(pilaOP->cant_element!=0){
             char quitar;
             pila_desapilar(pilaOP,&quitar);
             strcat(colaE,&quitar);
           }
        }
        else{
             strcat(colaE,numactual);
             strcat(colaE,&sep);
             }
    }
    if(esOperador(numactual)==1)
	{
          //3.1) Si la pila esta vacía o el operador tiene mayor prioridad
            //que el que está en la cima de la pila (o bien es la máxima prioridad),
            //se mete en la pila.
       if (pilaOP->cant_element>0){
           pila_getfrente(pilaOP,&oper);
              if (precedencia(numactual)>precedencia(&oper)){
                 pila_apilar(pilaOP,numactual);
                Boolinsert=1;
              }
       }
       if (pilaOP->cant_element==0){
          pila_apilar(pilaOP,numactual);
          Boolinsert=1;
       }
      //3.2) Si la prioridad es menor o igual, el operador se saca de la pila,
      //se mete en la expresión postfija y se vuelve a hacer la comparación con
      //el nuevo elemento de la cima de la pila.
       if(Boolinsert==0 && pilaOP->cant_element>0)
       {
          pila_getfrente(pilaOP,&oper);
          while(precedencia(numactual)<=precedencia(&oper)&& pilaOP->cant_element>0 ){
            char quitar;
            pila_desapilar(pilaOP,&quitar);

            strcat(colaE,&quitar);

            pila_getfrente(pilaOP,&oper);
          }
        pila_apilar(pilaOP,numactual);
       }
    }

}
Example #3
0
File: abb.c Project: wizzard94/ABB
bool abb_iter_in_avanzar(abb_iter_t *iter) {
    if(!iter || !iter->pila || pila_esta_vacia(iter->pila)) return false;

    pila_desapilar(iter->pila);

    return true;
}
Example #4
0
void destruir(vector_t* vectorzonas, vector_t* vectorprecios, pila_t* pila){
	int i;
	lista_t * aux;
	int* intaux;
	pedido_t* pedidoaux;
	i=vector_obtener_tamanio(vectorzonas);
	for (i=0; i<vector_obtener_tamanio(vectorzonas);i++){
		aux= vector_obtener(vectorzonas, i);
		if (aux != NULL)
			lista_destruir(aux,free);
	}
	for (i=0; i<vector_obtener_tamanio(vectorprecios);i++){
		intaux= vector_obtener(vectorprecios, i);
		if (intaux != NULL)
			free(intaux);
	}
	vector_destruir(vectorzonas);
	vector_destruir(vectorprecios);
	if (pila) {
		while (!pila_esta_vacia(pila)) {
			pedidoaux=pila_desapilar(pila);
			free(pedidoaux);
		}
		pila_destruir(pila);
	}

}
Example #5
0
File: abb.c Project: fonse451/abb
void abb_iter_in_destruir(abb_iter_t* iter){
    while(!pila_esta_vacia(iter->pila)){
        pila_desapilar(iter->pila);
    }
    pila_destruir(iter->pila);
    free(iter);
}
Example #6
0
File: tp1.c Project: wizzard94/TP1
/* Cerrar ciclo de votacion y procesar resultados */
bool comando_votar_fin(maquina_votacion_t* maquina) {
    #ifdef DEBUG
    printf("Comando votar fin ejecutado \n");
    #endif

    if(maquina->estado < ABIERTA)
        return error_manager(MESA_CERRADA);

    if(maquina->estado < VOTACION)
        return error_manager(OTRO);

    if(maquina->votando_cargo < FIN)
        return error_manager(FALTA_VOTAR);

    while(!pila_esta_vacia(maquina->ciclo))
    {
        voto_t* voto = pila_desapilar(maquina->ciclo);
        lista_iterar(maquina->listas, votar_partido, voto);
        destruir_voto(voto);
    }

    // Reset de variables.
    #ifdef DEBUG
    if(pila_esta_vacia(maquina->ciclo)) printf("Pila vacia\n");
    #endif
    pila_destruir(maquina->ciclo, free);
    maquina->ciclo = NULL;
    maquina->estado = ABIERTA;

    return true;
}
Example #7
0
File: abb.c Project: fonse451/abb
bool abb_iter_in_avanzar(abb_iter_t *iter){
        if (abb_iter_in_al_final(iter)){
                return false;
        }
        nodo_t* nodo = pila_desapilar(iter->pila);
        auxiliar_creacion(iter,nodo->nodo_derecho);
        return true;
}
Example #8
0
void ejecutar(pila_tipo_dato *pilaPos, char *res ){
     pila_tipo_dato  auxresult;
     pila_init(&auxresult);
     int error=0;
     char elemento[TAM_RES],result1[TAM_RES],result2[TAM_RES],resultOp[TAM_RES];

     while(pilaPos->cant_element!=0)
     {
        //ceramos los vectores
        init_array(result1,TAM_RES);
        init_array(result2,TAM_RES);
        init_array(elemento,TAM_RES);
        init_array(resultOp,TAM_RES);

        pila_desapilar(pilaPos,elemento);

        //vemos si es operador
        if (esOperador(elemento)==1)
        {

            if ((auxresult.cant_element)<2){
               res[0]=elemento[0];
               strcat(res,"Error!!");
               pilaPos->cant_element=0;
               error=1;

               //ocurrio un error
               }
          pila_desapilar(&auxresult,result1);
          pila_desapilar(&auxresult,result2);
          operar(result1, result2,elemento[0],resultOp);
          pila_apilar(&auxresult,resultOp);
          if(error==0){pila_getfrente(&auxresult,res);}

        }
        else{
           pila_apilar(&auxresult,elemento);

        }
    }
}
Example #9
0
bool abb_iter_in_avanzar(abb_iter_t* iter){
	if (abb_iter_in_al_final(iter)) return false;
	if (!iter->actual->der)
		iter->actual = pila_desapilar(iter->pila);
	else{
		iter->actual = iter->actual->der;
		while (iter->actual->izq){
			pila_apilar(iter->pila, iter->actual);
			iter->actual = iter->actual->izq;
		}
	}
	return true;
}
Example #10
0
void pila_destruir(pila_t *pila , void destruir_dato(void *))
{
    if (pila->datos != NULL) {
		while (!pila_esta_vacia(pila)){
			void* desapilado;
			desapilado = pila_desapilar(pila);
			if (destruir_dato)
				destruir_dato(desapilado);
		}
	}
	free(pila->datos);
    free(pila);
}
Example #11
0
File: tp1.c Project: wizzard94/TP1
/* Retroceder la pila de votacion */
bool comando_votar_deshacer(maquina_votacion_t* maquina) {
    #ifdef DEBUG
    printf("Comando votar deshacer ejecutado \n");
    #endif

    if(maquina->estado < ABIERTA)
        return error_manager(MESA_CERRADA);

    if(maquina->estado < VOTACION)
        return error_manager(OTRO);

    if(maquina->votando_cargo == PRESIDENTE)
        return error_manager(NO_DESHACER);

    maquina->votando_cargo--;
    destruir_voto(pila_desapilar(maquina->ciclo));

    return true;
}
Example #12
0
File: 9.c Project: nee47/abb
// Avanza iterador
bool abb_iter_in_avanzar(abb_iter_t *iter){
  if(abb_iter_in_al_final(iter)) return false;
  abb_nodo_t* desapilado  = pila_desapilar(iter->pila);
  if(desapilado->derecha) apilar_nodos(iter, desapilado->derecha);
  return true;
}
// Destruye la pila.
// Pre: la pila fue creada.
// Post: se eliminaron todos los elementos de la pila.
void pila_destruir(pila_t *pila){
	while(!pila_esta_vacia(pila)) pila_desapilar(pila);
	free(pila->datos);
    free(pila);
    pila=NULL;
}