示例#1
0
bool parent_izq(){
     
     estado estado_anterior, estado_actual = 0;

     while(estado_actual !=UDEF){
     
     estado_anterior = estado_actual;
     char c = siguiente();
     
        switch (estado_actual){
               
            
            case 0:
                 if(c=='(') estado_actual =1;
                 else estado_actual = UDEF;
                 break;  
            
            case 1:
                 if (c=='(');
                 else estado_anterior=estado_actual;
                 break;
                 }
                 }
                 
          if (estado_anterior==1){
              retroceso();
              acepta();
			  return true;
           } 
           
          else{
       falla();
       return false;
   }
}
//********************
PtrNodoListaDeposito anterior(ListaArtDeposito &listaArtDep,PtrNodoListaDeposito ptrNodoListaDep){
 PtrNodoListaDeposito ptrPrevio = finAD();
  PtrNodoListaDeposito ptrCursor = primero(listaArtDep);

  while (( ptrCursor != finAD()) && (ptrCursor != ptrNodoListaDep)) {
    ptrPrevio = ptrCursor;
    ptrCursor = siguiente(listaArtDep,ptrCursor);
  }
  return ptrPrevio;
}
PtrNodoPiso anterior(ListaPiso &listaP, PtrNodoPiso ptrNodoP){
PtrNodoPiso ptrPrevio = finP();
PtrNodoPiso ptrCursor = primero(listaP);

  while (( ptrCursor != finP()) && (ptrCursor != ptrNodoP)) {
    ptrPrevio = ptrCursor;
    ptrCursor = siguiente(listaP,ptrCursor);
  }
  return ptrPrevio;

}
示例#4
0
bool esp_blanco(){

     if(isspace(siguiente())){ 
        acepta();
        return true;
     }
     
     else{
        falla();
        return false;
    }
}
示例#5
0
bool eof(){

     if(siguiente()==EOF){
        acepta();
        return true;
     }
     
     else{
        falla();
        return false;
    }
}
示例#6
0
void guardarEnArchivos(Lista &Candidatos, Lista &Partidos, Lista &Mesa)
{
    FILE *fileCandi, *filePart, *fileMesa;
    PtrNodoLista nodo;

    //Guardo Mesas
    if((fileMesa=fopen("mesas.txt", "w"))!=NULL)
     {
         nodo = primero(Mesa);
         while (nodo != fin())
         {
             fprintf(fileMesa,"%d;%d\n", getIdMesa(*(Mesas*)nodo->ptrDato),getProvinciaMesa(*(Mesas*)nodo->ptrDato) );
             nodo = siguiente(Mesa, nodo);
         }
     } else{puts("El archivo mesas.txt no pudo ser creado");}

     //Guardo Candidatos
    if((fileCandi=fopen("candidatos.txt", "w"))!=NULL)
     {
         nodo = primero(Candidatos);
         while (nodo != fin())
         {
             fprintf(fileCandi,"%d;%s;%d\n", getIdCandidato(*(Candidato*)nodo->ptrDato),getNombreCandidato(*(Candidato*)nodo->ptrDato),getPartidoPolitico(*(Candidato*)nodo->ptrDato) );
             nodo = siguiente(Candidatos, nodo);
         }
     } else{puts("El archivo candidatos.txt no pudo ser creado");}

     //Guardo Partidos
    if((filePart=fopen("partidos.txt", "w"))!=NULL)
     {
         nodo = primero(Partidos);
         while (nodo != fin())
         {
             fprintf(filePart,"%d;%s\n", getIdPartido(*(Partido*)nodo->ptrDato),getNombrePartido(*(Partido*)nodo->ptrDato) );
             nodo = siguiente(Partidos, nodo);
         }
     } else{puts("El archivo partidos.txt no pudo ser creado");}
}
示例#7
0
int MiembroHash (char *cad,TablaHash t)
{
   tPosicion p;
   int enc;	
   int pos=Hash(cad);
   
   p=primero(t[pos]);
   enc=0;
   while (p!=fin(t[pos]) && !enc) {
      if (strcmp(cad,elemento(p,t[pos]))==O)
         enc=1;
      else
         p=siguiente(p,t[pos]);
   }

   return enc;
}
void eliminarNodo(ListaPiso &listaP, PtrNodoPiso ptrNodoP){
  PtrNodoPiso ptrPrevio;

  /* verifica que la lista no esté vacia y que nodo no sea fin*/
  if ((! listaVacia(listaP)) && (ptrNodoP != finP())) {

    if (ptrNodoP == primero(listaP))
      listaP.primeroPiso = siguiente(listaP,primero(listaP));

    else {
      ptrPrevio = anterior( listaP , ptrNodoP );
      ptrPrevio->sgteP = ptrNodoP->sgteP;
    }
    // Si el dato es un TDA, acá habría que llamar al destructor.
    destruir(ptrNodoP->pilUb);
    delete ptrNodoP;
  }
}
//*******************
void eliminarNodo(ListaArtDeposito &listaArtDep,PtrNodoListaDeposito ptrNodoListaDep){
PtrNodoListaDeposito ptrPrevio;

  /* verifica que la lista no esté vacia y que nodo no sea fin*/
  if ((! listaVacia(listaArtDep)) && (ptrNodoListaDep != finAD())) {

    if (ptrNodoListaDep == primero(listaArtDep))
      listaArtDep.primerArtDeposito = siguiente(listaArtDep,primero(listaArtDep));

    else {
      ptrPrevio = anterior( listaArtDep , ptrNodoListaDep );
      ptrPrevio->sgteAD= ptrNodoListaDep->sgteAD;
    }
    // Si el dato es un TDA, acá habría que llamar al destructor.

    delete ptrNodoListaDep;
  }
}
示例#10
0
bool identificador(){                            //hex, oct,nat, y flot
     
     estado estado_anterior, estado_actual = 0;
      

     while(estado_actual !=UDEF){
     
     estado_anterior = estado_actual;
     char c = siguiente();
     
        switch (estado_actual){
            
            case 0:
                 if(c=='_') estado_actual =1;
                 else if(isalpha(c)) estado_actual = 2;
                 else estado_actual = UDEF;
                 break;                 
                 
            case 1:    
                 if(isdigit(c) || c == '_');
                 else if(isalpha(c)) estado_actual = 2;
                 else estado_actual = UDEF;          
                 break;                              
                              
            case 2:    
                 
                // if (isdigit(c)|| isalpha(c) || c == '_');
                 if (isalnum (c) || c == '_');
                 else estado_actual = UDEF;                                                       

        }          
     }

    if (estado_anterior == 2){
        retroceso();
        acepta();
        return true;

    } 
    else{
       falla();
       return false;
   }
}
示例#11
0
bool hexadecimal(){
 
     estado estado_anterior, estado_actual = 0;

     while(estado_actual !=UDEF){

     estado_anterior = estado_actual;
     char c = siguiente();
     
        switch (estado_actual){
            
            case 0:  
                    if(c=='0') estado_actual = 1;
                    else estado_actual = UDEF;
                    break;
            case 1:                                                     
                    if((c=='X')||(c=='x')) estado_actual = 2;
                    else estado_actual = UDEF;
                    break;
            case 2: 
                    if ((isdigit(c))||(isCarHex(c))) estado_actual = 3;
                    else estado_actual = UDEF;
                    break;
            case 3: 
                    if ((isdigit(c))||(isCarHex(c)));
                    else estado_actual = UDEF;
                    break;

        }          
     }

    if (estado_anterior == 1){
        retroceso();
        acepta();
        return true;
    } 

    else{
      falla();
       return false;
   }
}
示例#12
0
bool octal(){  //debe comenzar con  0
 
     estado estado_anterior, estado_actual = 0;

     while(estado_actual !=UDEF){

     estado_anterior = estado_actual;
     char c = siguiente();
     
        switch (estado_actual){
               
           case 0:
                  if (c=='0') estado_actual=1;
                  else estado_actual=UDEF;
                  break;
           
           case 1:
                   if (isCarOctal(c))estado_actual=2;
                   else estado_actual=UDEF;
                   break;
           
           case 2: if (isCarOctal(c) ||    c=='0' );
                   else estado_actual=UDEF;
                   
        }
     }
     
     if (estado_actual== 2){
       retroceso();
       acepta();
       return true;
      }
      
      else {
         falla();
         return false; 
      
      }
}
示例#13
0
bool naturales(){  //no debe tener 0
 
     estado estado_anterior, estado_actual = 0;
    

     while(estado_actual !=UDEF){

     estado_anterior = estado_actual;
     char c = siguiente();
     
        switch (estado_actual){
            
            case 0: 
                    if(isdigit(c)&& c!='0') estado_actual = 1;
                    else estado_actual = UDEF;
                    break;
            case 1:                                                    
                    if(isdigit(c));
                    else estado_actual = UDEF;
        }          
     }




    if (estado_anterior == 1){
        retroceso();
        acepta();
        
        return true;
    } 

    else{
       falla();
       return false;
   }
}
示例#14
0
void Recuerdo::updateParticulas(double tiempoSeg, double tiempoMil){
    // a que recuerdo llamo con tiempo en segundo.
    bool* pixelBool = new bool[(int)this->pixels->size()];
    std::fill_n( pixelBool, (int)this->pixels->size(), 0 );
    
    vector<Particula*>::iterator it = this->particulas->begin();
    vector<Pixel*>::iterator itpixels;
    Pixel *pixel;
    Particula* particula;
    Punto *ptoAnt = NULL;
    Punto *ptoSig = NULL;
    Punto *ptoAct = NULL;
    long a;// =  ofGetElapsedTimeMillis() % 1000;
	bool recTienePar=false;
    while (it!=this->particulas->end())
    {

        particula = *it;
//      a = fmod(tiempoMil,particula->frecuencia);
        a = fmod(tiempoMil - (particula->tiempoini),particula->frecuencia );//+ particula->tiempoini*1000;
        itpixels = pixels->begin();
        //if (particula->tiempoini <= tiempoSeg && particula->tiempofin >= tiempoSeg){
        if (particula->tiempoini <= tiempoMil && particula->tiempofin >= tiempoMil){
            ptoAnt = anterior(particula, a);
            ptoSig = siguiente(particula,a);
            if (ptoAnt != NULL && ptoSig != NULL){
                ptoAct = ptoActual(ptoAnt,ptoSig,a);
				//Gonzalo
				//ptoAct->draw(ptoAct);
				//ofPushMatrix();     
                //particula->draw(ptoAct);
				//ofPopMatrix();	
				cout << particula->id;
                while (itpixels != pixels->end()){
                    pixel = *itpixels;
                    ofVec3f pos = pixel->getPosition();
                    int dis = sqrt((pos.x - ptoAct->x)*(pos.x - ptoAct->x) + (pos.z - ptoAct->z)* (pos.z - ptoAct->z));
                    if (dis <= ptoAct->intensidad){
						//Aca va el decaimiento del color
						ofVec3f colores(ptoAct->r, ptoAct->g,ptoAct->b);
						ofVec3f retColores = decaimiento (colores,dis,ptoAct->intensidad);
						pixel->blendRGBA(retColores.x, retColores.y, retColores.z,0,0.4f);                         
                        //pixel->blendRGBA(ptoAct->r,ptoAct->g,ptoAct->b,0,0.4f);
                        pixelBool[(int)pixel->getId()] = true;
                    }
                    itpixels++;
                }
            }
        }		
        it++;
    }// Busco
	itpixels = pixels->begin();
	if (recTienePar) {
		while (itpixels != pixels->end()){
			Pixel* px = *itpixels;
        
			if (!pixelBool[(int)px->getId()]){
				px->blendRGBA(0, 0, 0, 255, 0.4f);
			}
			itpixels++;
		}
	}
    
	delete[] pixelBool;
	this->draw();
};
示例#15
0
int main() {
  lista lst = crear_lista();

  nat cont_comandos = 0;
  bool salir = false;
  while (!salir) {

    mostrar_prompt(cont_comandos);
    enum_cmd_t enum_com = identificador_comando();

    // procesar el comando
    switch (enum_com) {
    case cmd_fin:
      salir = true;
      imprimir_con_nl(msg_fin);
      break;
    case cmd_comentario:
      escribir_nueva_linea();
      break;
    case cmd_ins_lista: {
      info_t info = leer_info(MAX_LARGO_PALABRA);
      while (es_valida_info(info)) {
        insertar_despues(info, final_lista(lst), lst);
        info = leer_info(MAX_LARGO_PALABRA);
      }
      liberar_info(info);
      texto_t txt = cadena_a_texto("primero");
      info = crear_info(0, txt);
      insertar_antes(info, inicio_lista(lst), lst);
      imprimir_lista(lst);
      break;
    }
    case cmd_recorrido_lista: {
      if (!es_vacia_lista(lst)) {
        localizador loc = inicio_lista(lst);
        while (es_localizador_lista(loc)) {
          texto_t txt = info_a_texto(info_lista(loc, lst));
          escribir_texto(txt);
          liberar_texto(txt);
          loc = siguiente(loc, lst);
        }
        loc = final_lista(lst);
        while (es_localizador_lista(loc)) {
          texto_t txt = info_a_texto(info_lista(loc, lst));
          escribir_texto(txt);
          liberar_texto(txt);
          loc = anterior(loc, lst);
        }
        escribir_nueva_linea();
      }
      break;
    }
    case cmd_segmentos_lista: {
      int clave1 = leer_int();
      int clave2 = leer_int();
      localizador desde = siguiente_clave(clave1, inicio_lista(lst), lst);
      localizador hasta = anterior_clave(clave2, final_lista(lst), lst);
      if (es_localizador_lista(desde) && es_localizador_lista(hasta) &&
          precede_en_lista(desde, hasta, lst)) {
        lista sgm = separar_segmento(desde, hasta, lst);
        lista copia = segmento_lista(inicio_lista(sgm), final_lista(sgm), sgm);
        imprimir_lista(sgm);
        liberar_lista(sgm);
        insertar_segmento_despues(copia, final_lista(lst), lst);
        liberar_lista(copia);
        imprimir_lista(lst);
      }
      break;
    }
    case cmd_modificar_lista: {
      int clave1 = leer_int();
      int clave2 = leer_int();
      localizador loc1 = siguiente_clave(clave1, inicio_lista(lst), lst);
      localizador loc2 = anterior_clave(clave2, final_lista(lst), lst);
      if (es_localizador_lista(loc1) && es_localizador_lista(loc2)) {
        intercambiar(loc1, loc2, lst);
        imprimir_lista(lst);
        retroceder(loc2, lst);
        imprimir_lista(lst);
      }
      break;
    }
    case cmd_ordenar_lista: {
      nat len_lst = longitud(lst);
      imprimir_int(len_lst);
      localizador loc = inicio_lista(lst);
      for (nat i = 0; i < len_lst / 2 - 1; i++)
        loc = siguiente(loc, lst);
      lista primera = segmento_lista(inicio_lista(lst), loc, lst);
      lista segunda =
          segmento_lista(siguiente(loc, lst), final_lista(lst), lst);

      lista concat = concatenar(primera, segunda);
      imprimir_lista(concat);
      liberar_lista(concat);

      if (son_numeros_iguales(primera, segunda)) {
        imprimir_lista(primera);
      }

      if (!esta_ordenada(primera))
        ordenar(primera);
      if (!esta_ordenada(segunda))
        ordenar(segunda);

      lista mzc = mezcla(primera, segunda);
      imprimir_lista(mzc);

      unificar(mzc);
      imprimir_lista(mzc);
      liberar_lista(mzc);
      liberar_lista(primera);
      liberar_lista(segunda);
      break;
    }
    case cmd_filtrado_lista: {
      int clave = leer_int();
      texto_t palabra = leer_palabra(MAX_LARGO_PALABRA);
      comp_t criterio = texto_a_comp(palabra);
      liberar_texto(palabra);
      if (pertenece(clave, lst)) {
        imprimir_int(cantidad(clave, lst));
      }
      lista flt = filtrado(clave, criterio, lst);
      imprimir_lista(flt);
      liberar_lista(flt);
      break;
    }
    case cmd_reversa_lista: {
      int dato1 = leer_int();
      int dato2 = leer_int();
      if (esta_ordenada(lst) && pertenece(dato1, lst) &&
          pertenece(dato2, lst) && dato1 < dato2) {
        lista sub = sublista(dato1, dato2, lst);
        imprimir_lista(sub);
        lista rev = reversa(sub);
        imprimir_lista(rev);
        cambiar_todos(dato1, dato2, rev);
        imprimir_lista(rev);
        liberar_lista(sub);
        liberar_lista(rev);
      }
      break;
    }
    case cmd_liberar_lista: {
      liberar_lista(lst);
      lst = crear_lista();
      break;
    }
    default:
      imprimir_con_nl(msg_cmd_no_reconocido);
      break;
    } // switch
    texto_t resto_linea = leer_resto_linea(MAX_RESTO_LINEA);
    liberar_texto(resto_linea);
  } // while
  liberar_lista(lst);
  return 0;
}