Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: macshivi en 22 Noviembre 2016, 17:33 pm



Título: Problema con condicional if
Publicado por: macshivi en 22 Noviembre 2016, 17:33 pm
He hecho un programa que te rellena un vector con numeros aleatorios y luego te lo ordena mediante el metodo burbuja (se que hay mejores algortimos pero es una condicion explicita en el ejercicio) y luego te pide un numero y te lo busca dentro del vector usando un algoritmo dicotomico
(tambien explicito en el ejercicio).
Todo esto funciona, pero al marcar un numero que no esta dentro del vector que sea menor ha v[0] falla. Es decir, ell condicional if de la linea 67 no me funciona con valores menos ha v[0].

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define h 5
  5.  
  6. int main(int argc, char *argv[]) {
  7. /*Ordenacion burbuja*/
  8. int v[h],i,j,aux;/*Variables ordenacion burbuja*/
  9. int inf,sup,med,n;/*Variables busqueda dicotomica */
  10. srand(time(NULL));/*Esta funcion permite que los numeros aleatorios varien cada vez que se ejecute el programa*/
  11. /*Llenamos el vector con variables aleatorias*/
  12. for(i=0;i<h;i++){
  13.  
  14. v[i]=rand()%20;
  15. printf("%d ",v[i]);
  16.  
  17. }
  18. printf("\n\n");
  19. /*Ordenacion de los numeros por el metodo burbuja*/
  20. for (i=0;i<h;i++){
  21.  
  22. for(j=i+1;j<h;j++){
  23.  
  24. if(v[j]<v[i]){
  25. aux=v[i];
  26. v[i]=v[j];
  27. v[j]=aux;
  28. }
  29.  
  30. }
  31. }
  32. /*Impresion de los numeros ordenador*/
  33. for(i=0;i<h;i++){
  34. printf("El vector v[%d] vale: %d\n",i,v[i]);
  35.  
  36. }
  37. /*No funciona con n<v[0]*/
  38. printf("\n Introduce el numero que quieres buscar: ");
  39. scanf("%d",&n);
  40. /*Busqueda dicotomica*/
  41. inf=0;
  42. sup=h;
  43.  
  44. while(inf<sup){
  45.  
  46. med=(inf+sup)/2;
  47.  
  48. if (v[med]==n){
  49.  
  50. printf("El numero que has seleccionado se encuentra en la posicion %d",med);
  51. break;
  52. }
  53. if (v[med]>n){
  54.  
  55. sup=med;
  56.  
  57.  
  58. }
  59. if (v[med]<n){
  60. inf=med+1;
  61.  
  62.  
  63. }
  64.  
  65. }
  66.  
  67. if((inf=sup)&&!(n==v[med])) {
  68. printf("El numero no existe dentro del vector");
  69. /*No funcoina con valores mas pequeños que v[0]*/
  70. }
  71.  
  72. return 0;
  73. }


Título: Re: Problema con condicional if
Publicado por: MAFUS en 22 Noviembre 2016, 18:01 pm
Línea 67: una condición del if es inf=sup