[ Foro de Pascal ]
Hola Nacho y Antonio!!!
Gracias a Ustedes tengo un poco más de animo para rendir esta materia el viernes, comencé a mirar algunos ejercicios y no entiendo el siguiente:
Luego de de?nir el tipo de variable arreglo como un arreglo de 200 enteros,
a) describir qu´e realiza el siguiente procedimiento.
procedure averiguar(a:arreglo;lb,ub,valor:integer);
var m:integer;
begin
if (lb>ub) then writeln(’no’)
else m=(lb+up) div 2;
if (valor=a[m]) then writeln(m)
else if (valor <= a[m]) then averiguar(a,lb,m-1,valor)
else averiguar(a,m+1,ub,valor)
end.
b) Escribir un procedimiento no recursivo que realice exactamente lo mismo que el procedimiento
averiguar.
Lo que no alcanzo a comprender es cómo se yo que valores representan: lb, ub y valor.
Para mi el profesor en el examen se equivoco al poner up debía decir ub...
Cualquier sugerencia, apunte para completar son muy bien recibidas. Saludos
Fíjate en lo que hace el procedimiento, no en los nombres de las variables:
- Divides el array en dos mitades.
- Miras el valor central.
- Si el valor que buscas es menor que el valor central, repites la búsqueda dentro de la mitad inferior.
- Si el valor que buscas es mayor que el valor central, repites la búsqueda dentro de la mitad superior.
Se trata de un algoritmo de "búsqueda binaria", una de las formas más rápidas de buscar dentro de un array que sepas que está ordenado.
Yo no soy partidario de usar nombres de variables tan cortos, porque un programa se escribe una sola vez y se lee muchas más (especialmente si eres parte de un grupo de programadores) pero es de suponer que "ub" sea la abreviatura de "upperBound" (límite superior) y que "lb" sea la de "lowerBound" (límite inferior), que son los dos extremos entre los que intentas encontrar ese valor.
Gracias !!!!
Ya me quedan menos dudas, se entendió perfectamente tu explicación. Muy amable, estoy muy nervioso(dentro de 48 hs rindo) no sabes lo que aprecio tu colaboración después de un año tan duro. Saludos.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)