| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
xtremecopy
Registrado: 05 Oct 2007 Mensajes: 28
| Publicado: 22/11/2007 5:19 am | | | Título: Error que no encuentro.. [Busqueda Binaria] |
| El ejercicio es simple tengo que crear un array de N valores , ordenarlo y despues realizar consultas sobre ubicacion (Busqueda Binaria) , simple ,armo el array , los ordena pero no me encuentra los valores cuando se lo solicito , alguien me podria dar una mano ... =)
| Código: | #include <conio.h> #include <stdio.h> #define MAX_N 15 int a[MAX_N],i,j,k,x,N,temp; int b[MAX_N],m,s,r,w,q; int main (void) {printf("Ingrese el valor de N (de 1 a 15): "); scanf("%d", &N);
for(x=0; x<N; x++) { printf("Introduzca valores para la localidad %d : ",x);scanf("%d",&a[x]); } for(j=0;j<N; j++) { for(i=0; i<N; i++) { if(a[N] > a[N+1]) { temp=a[N]; a[N]=a[N+1]; a[N+1]=temp; } else { } } } for(k=0; k<N; k++) { printf("\nEl valor de la localidad %d es %d ",k,a[k]); } /*---------------------------------------------------------------*/ printf("\n Introduzca el valor que desea buscar: ");scanf("%d",&s); if (a[N]<=s) { printf("El numero que usted buscaba no se encuentra en el arreglo"); } else { m=N/2; r=m;w=m; q=N; for(;;) { if(a[m]<s) { m=(q+m)/2; q=q+r; } else if(s<a[m]) { m=(q-w)/2; q=q-w; } else if(s==a[m]) { printf("Valor encontrado en la localidad %d", m); break; } } } getch(); }
|
|
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 3943 Ubicación: Mexico
| Publicado: 22/11/2007 9:57 am | | | Título: |
| El programa tiene varios errores.
El primero es la ordenacion mediante el metodo de la burbuja o BubbleSort, este esta muy mal implementado ya que dentro de los bucles no utilizas el valor de las variables contadoras. Puedes encontrar varios ejemplos en la base de datos de los foros sobre este metodo de ordenacion.
Otro error se encuentra en el if donde verificas si el valor a buscar es mayor o igual que el valor almacenado en el ultimo elemento del array:
Para empezar si los valores son iguales el programa indicaria un resultado que no es el correcto y segundo, debes verificar si el valor a buscar es menor que el primer elemento o mayor que el ultimo (cuyo indice no es "N" sino "N - 1"):
| Código: | if (s < a[0] || s > a[N -1]) ... |
El metodo de busqueda binaria tampoco esta bien implementado ya que para empezar podrias utilizar nombres de variables mas descriptivos y te falta verificar que los limites no se rebasen.
El programa corregido en C estandar (sin, para empezar, conio) es:
| Código: | #include <stdio.h> #include <stdlib.h>
#define MAX_N 15
int main (void) { int a[MAX_N]; int num_elem; int i; int j; int temp; int p; int valor; printf("Ingrese el valor de num_elem (de 1 a 15): "); fflush(stdout); if (scanf("%d", &num_elem) != 1 || num_elem < 1 || num_elem > MAX_N) return EXIT_FAILURE; for (i = 0; i < num_elem; i++){ printf("Introduzca valores para la localidad %d : ", i); fflush(stdout); if (scanf("%d",&a[i]) != 1) return EXIT_FAILURE; } for (i = 0; i < num_elem - 1; i++) for (j = 0; j < num_elem - 1 - i; j++) if (a[j] > a[j + 1]){ temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } for (i = 0; i < num_elem; i++) printf("El valor de la localidad %d es %d\n", i, a[i]); printf("Introduzca el valor que desea buscar: "); fflush(stdout); if (scanf("%d", &valor) != 1) return EXIT_FAILURE; if (valor < a[0] || valor > a[num_elem -1]){ printf("El numero que usted buscaba no se encuentra en el arreglo"); }else { i = 0; j = num_elem - 1; do { p = (i + j) / 2; if(a[p] < valor) i = p + 1; else if(a[p] > valor) j = p - 1; else { printf("Valor encontrado en la localidad %d\n", p); break; } }while (i <= j); } return EXIT_SUCCESS; } |
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |