Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Problema con busqueda X-D

Estas en el tema de Problema con busqueda X-D en el foro de C/C++ en Foros del Web. Estoy haciando un programa de ordenamiento por burbuja y ordenamiento binario en el cual tengo el problema que me muestra dos 0 al principio cuando ...
  #1 (permalink)  
Antiguo 17/05/2016, 14:10
 
Fecha de Ingreso: octubre-2015
Mensajes: 17
Antigüedad: 8 años, 6 meses
Puntos: 0
Problema con busqueda X-D

Estoy haciando un programa de ordenamiento por burbuja y ordenamiento binario en el cual tengo el problema que me muestra dos 0 al principio cuando ordeno la secuancia de numeros y solo tengo un 0 , y si pongo un valor fuera de la secuencia no pasa nada , no me dice que el numero no existe solo se queda quieto el programa

Código:
int main(){  // Nivel 5 ej 13
  int i , aux  , num2 , j ;
  int verFal = 0 , sup , inf , mitad;
  int lista2[10] = {2,4,6,9,7,8,1,0,5,3};
  
   	for(i = 0 ; i < 10 ; i++){
 	    for(j = 0 ; j < 10 ; j++){
 	    	
 	        if(lista2[j] > lista2[j+1]){
 	        	
 	        	aux = lista2[j];
 	        	lista2[j] = lista2[j+1];
 	        	lista2[j+1] = aux;
			 }
        }
    }
  
  for(i = 0 ; i < 10 ; i++){
  	
 	printf("%i ",lista2[i]); 
 }
  
  
   printf("\n\nIngrese un valor : ");
            // NO PONER ESPACIOS EN "%i" EN SCANF() POR QUE PIDE OTRO NUMERO 
            scanf("%i",&num2);
            // LIMPIA EL BUFFER DEL TECLADO
             fflush(stdin);  
  
  // BUSQUEDA BINARIA
  inf = 0;
  sup = 9;
  
  while(sup >= inf){
  	mitad = (sup+inf)/2;
  	
  	if(lista2[mitad] == num2){
  		
  		verFal = 1; break;
   }
	if(lista2[mitad] > num2){
  		
  		sup = mitad;
  		mitad = (sup+inf)/2;
	}  
	if(lista2[mitad] < num2){
  		
  		inf = mitad;
  		mitad = (sup+inf)/2;
	  }   
  }
    // LA VARIABLE VERFAL HACE LA FUNCION COMO SI FUERA UN VALOR BOOLEANO SI ES 1 ES TRUE SI ES 0 ES FALSE
    if(verFal == 1){
 	
 	    printf("\nNumero encontrado y su pos es : %i", mitad); 
 	    
   }else if(verFal == 0){
 	    	
    	printf("\nNumero no encontrado "); 
    }    	
	

    printf("\n");  
  
	return 0;
}
Se aceptan sugerencias
  #2 (permalink)  
Antiguo 17/05/2016, 15:12
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 1 mes
Puntos: 27
Respuesta: Problema con busqueda X-D

Tienes cinco errores que haya visto:
  • En el primer bucle for la j ha de ser < 9 para no salirte del rango
  • La condición del while correcta es (sup > inf) o (inf <= sup), lo que prefieras
  • Cuando acualizas sup, sup = mitad -1
  • Cuando actualizas inf, inf = mitad +1

También, aunque no te afecte a la funcionalidad del código en cada iteración del while que no implica encontrar la solución calculas dos veces el valor del medio. Es suficiente con tenerlo una vez al principio del while.

Saludos.
  #3 (permalink)  
Antiguo 17/05/2016, 15:31
 
Fecha de Ingreso: octubre-2015
Mensajes: 17
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Problema con busqueda X-D

Gracias xKuZz tenias razon :) es que estoy siguiendo un curso en youtube eh hice el codigo al pie de la letra y me estaba volviendo loco cuando el metodo burbuja me ponia dos 00 al principio por que solo tenia uno :P , gracias por la respuesta rapida y precisa :D

Etiquetas: busqueda, funcion, int, numero, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:39.