Dev - C++ - Busqueda binaria siempre devuelve existe

 
Vista:
Imágen de perfil de Juan Manuel
Val: 38
Ha disminuido su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Busqueda binaria siempre devuelve existe

Publicado por Juan Manuel (21 intervenciones) el 13/06/2019 01:04:42
Saludos, estuve probando un algoritmo que reciba caracteres y los cargue de manera decreciente con un insertar y luego alli aplicar la busqueda binaria pero esta siempre devuelve un true aunque el valor no exista. ¿Podrian ayudarme a encontrar el error?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include <iostream>
#include <stdlib.h>
using namespace std;
const int MAX=20;
typedef char tvector[MAX];
// Modulos
void insertar(tvector num,int &ocup,char nuevo);
void mostrar(tvector num,int ocup);
void contar(tvector num,int ocup,int &MAY, int &min,int &simb);
void menu(int &opc);
bool bus_bin(tvector num,int ocup,char buscado);
// Programa principal
main()
{
  tvector numeros;
  int ocupado=-1;
  int i;
  char nuevo,buscado;
  int rta;
  int M,m,s;
  int b;
  bool x;
 
  do
  {
  	menu(rta);
  	switch(rta)
  	{
  		case 1:
  			cout << "Ingrese dato:";
  			cin >> nuevo;
  			insertar(numeros,ocupado,nuevo);
  			break;
  		case 2:
  			cout << "Ingrese dato a buscar:";
  			cin >> buscado;
  			x =bus_bin(numeros,ocupado,buscado);
  			if (x=true)
  			cout << "Existe" <<endl;
  			else
			{
                if (x=false)
                cout << "No existe"<<endl;
			}
			break;
		case 3:
				contar(numeros,ocupado,M,m,s);
				cout << "El numero de mayusculas es : " << M <<endl;
				cout << "El numero de minusculas es : " << m <<endl;
				cout << "El numero de simbolos o digitos es : " << s <<endl;
			break;
		case 4:
				mostrar(numeros,ocupado);
  			break;
  		case 5:
		  		cout << "FIN DEL PROGRAMA" <<endl;
			break;
 
		default : cout << "***Ingreso erroneo***"<<endl;
	}
  }while(rta!=5);
  system("pause");
}
//busqueda binaria decreciente
bool bus_bin(tvector num,int ocup,char buscado)
{
	int inf,sup,central;
	inf=0;
	sup=ocup;
	bool existe=false;
	while(inf <=sup && existe==false)
	{
		central =(inf+sup)/2;
		if (num[central]==buscado)
		existe=true;
		else
        {
            if (buscado<num[central])
            inf = central+1;
            else
            sup=central-1;
        }
	}
	return existe;
}
 
//menu
void menu(int &opc)
{
	cout << "Las opciones son: " <<endl;
	cout << "1-Insertar " <<endl;
	cout << "2-Buscar " <<endl;
	cout << "3-contar " <<endl;
	cout << "4-Mostrar " <<endl;
	cout << "5-Salir " <<endl;
	cin  >> opc;
}
// Procedimiento Insertar
void insertar(tvector num,int &ocup,char nuevo) //5 6 7 -> 8 ocup es 2
{ int i,j;
  if (ocup==MAX-1)
    cout << "VECTOR COMPLETO" << endl;
  else
    {
      for(i=0;i<=ocup && nuevo<num[i];i++);
      j=ocup;
      while (j>=i)
        { num[j+1]=num[j];
          j=j-1;
        }
      num[i]=nuevo;
      ocup=ocup+1;
    }
}
 
void mostrar(tvector num,int ocup)
{
	int i;
	if (ocup==-1)
	cout << "VECTOR VACIO" << endl;
	else
    for(i=0;i<=ocup;i++)
    cout << "[" << num[i] << "]" << " ";
    cout << endl;
}
 
//contar Mayusculas
void contar(tvector num,int ocup,int &MAY, int &min,int &simb)
{
	int i;
	MAY=0;
	min=0;
	simb=0;
    for(i=0;i<=ocup;i++)
    {
    	if(num[i]>=65&&num[i]<=90)
    	{
    		MAY++;
		}
		if(num[i]>=97&&num[i]<=122)
    	{
    		min++;
		}
		if(num[i]>122 || num[i] < 65)
    	{
    		simb ++;
		}
	}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Juan Manuel
Val: 38
Ha disminuido su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Busqueda binaria siempre devuelve existe

Publicado por Juan Manuel (21 intervenciones) el 13/06/2019 02:12:38
Ya lo arregle era un error sencillo al llamar a la función porque en el if asignaba en vez de comparar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bool bus_bin(tvector num,int ocup,char buscado)
{
	int inf,sup,central;
	inf=0;
	sup=ocup;
	bool existe=false;
	while(inf <=sup && existe ==false)
	{
		central =(inf+sup)/2;
		if (buscado==num[central])
		existe=true;
		else
			{
				if (buscado<num[central])
				sup = central -1;
				else
				inf=central+1;
			}
			return existe;
	}
}

También modifique un poco el modulo pero no estoy seguro si eran necesarios, todo esto aun es nuevo para mi.
Muchas gracias a los que se acercaron a leer ayudarme, me gusta mucho este foro .
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar