Exemplo n.º 1
0
bool lista::borrar_Noticia (Tcadena1 cad){
  char cad2[MaxCadRef];
  poner_fin();
  while(!inicio()){
	 retroceder();
 	 if(elemento[pi].Vacia()) return false;
 	 TipoDato dat;
 	 elemento[pi].Poner_Inicio();
  	while(elemento[pi].Fin()==false){
		elemento[pi].Consultar(dat);
		if(dat.Comparar(cad)==0){;
			elemento[pi].Borrar();
			return true;}
		elemento[pi].Avanzar();
 	 }
  }
  return false;
}
Exemplo n.º 2
0
// Soluciona la mazmorra
int solucion(void) {
	int i;
	paso_t * L = NULL; 
	paso_t * p = NULL;

	// Agrego paso inicial, ingresando al laberinto hacia el norte
	p = nodo();
	cerrar(p, 'S');
	avanzar(&L,p);

	// Ciclo hasta salir del laberinto
	do {
		usleep(PAUSA);
		if(L==NULL) {
			printf("Volvimos a la entrada, el laberinto no tiene salida!\n");
			exit(1);
		}
		if(L->N == ABIERTO) {
			i=intentar(&L,'N');
		}
		else if (L->S == ABIERTO) {
			i=intentar(&L,'S');	
		}
		else if (L->O == ABIERTO) {
			i=intentar(&L, 'O');
		}
		else if (L->E == ABIERTO) {
			i=intentar(&L, 'E');
		}
		else {
			printf("No se puede avanzar, retrocediendo un paso...\n");
			retroceder(&L);
		}
	} while (i!=SALIDA);
	return 0;
}
Exemplo n.º 3
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;
}
Exemplo n.º 4
0
int bt(int ** tablero, int dimension, int filini, int colini,
	  int * peso_solucion, par * soa)
{
     /* primero todas las variables que necesitamos!!!!!!!!!!
      * PXS
      * sandrita, se me va la cabeza :$ por ti! */

     /* como la solucion final estara en soa, en vez de considerar
      * el parametro de la funcion como s, lo consideramos como soa */
     par * s;
     int ** recorridos;
     par * paresmov;
     int voa;
     int peso;
     int nivel;
     int * mov; 
     int i;

     /* procedemos a inicilizar todas las variables que hemos declarado */
     /* memoria para s y soa */
     s = (par *)malloc(MAXNIVEL*sizeof(par));

     /* vamos a inicializar estas dos variables anterios, cada par tendra
      * el valor de (-1,-1) */
     inicializa_pares(s, -1, dimension);
     inicializa_pares(soa, -1, dimension);
     
     /* y la de movimientos! que son inicializados a -1 */
     mov = (int *)malloc(MAXNIVEL*sizeof(int));
     for (i = 0; i < MAXNIVEL; i++) {
	  mov[i] = -1;
     }
	  

     /* creamos el array que tiene codificados los 4 movimientos */ 
     paresmov = (par *)malloc(3*sizeof(par));
     inicializa_paresmov(paresmov);
     
     /* tambien inicializamos recorridos */
     recorridos = inicializa_matriz(dimension, 0);
    
     /* inicializacion de las variables! */
     voa = 0xffff;
     recorridos[filini][colini] = 1;
     s[0].f = filini; 
     s[0].c = colini;
    
     nivel = 0;

     /* peso almacena el peso del camino que vamos a formar */
     peso = tablero[s[0].f][s[0].c]; 
     
     /* el cuerpo de nuestro programa */
     do {

	  /*pinta_s(s, dimension);*/
	  
	  if (solucion_bt(s, nivel, dimension)) {
	       if (peso < voa) {
		    voa = peso;
		    /*printf("Nueva solucion optima\n");
		    pinta_s(s, dimension);*/
		    asigna_pares(s, soa);
	       }
	  }
	  
	  if (criterio(recorridos, s, peso, voa, nivel, dimension)) {
	       nivel++;
	       generar(tablero, mov, recorridos, s, nivel, &peso, paresmov);
	  }
	  else {
	       while ((nivel != 0) && (!mashermanos(mov, nivel))) {
		    retroceder(tablero, recorridos, mov, s, &nivel, &peso);
	       }
	       
	       if (nivel != 0) {
		    generar(tablero,mov,recorridos,s,nivel,&peso,paresmov);
	       }
	  }
     } while (nivel != 0);

     *peso_solucion = voa;
     
     return 0;
}