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


0