Foros del Web » Programación para mayores de 30 ;) » C/C++ »

ejercicio de c++, recursividad de funciones, búsqueda binaria

Estas en el tema de ejercicio de c++, recursividad de funciones, búsqueda binaria en el foro de C/C++ en Foros del Web. hola muchachos, presento el siguiente problema Hallar a raíz cuadrada de un número positivo haciendo búsqueda binaria, el prototipo de la función debe ser: double ...
  #1 (permalink)  
Antiguo 25/03/2015, 20:14
 
Fecha de Ingreso: septiembre-2012
Ubicación: bogota
Mensajes: 9
Antigüedad: 11 años, 7 meses
Puntos: 0
ejercicio de c++, recursividad de funciones, búsqueda binaria

hola muchachos, presento el siguiente problema

Hallar a raíz cuadrada de un número positivo haciendo búsqueda binaria, el prototipo de la función debe ser:
double get_square_root( double n , double low , double high );

He buscado con relación el tema de búsqueda binaria, pero aparece el tema de arreglos que no lo eh visto y se supone que no puedo usar los metodos de ciclos, solo recursividad con esle e if.

Aun peor no entiendo en que consiste la búsqueda binaria, me gustaría saber en que consiste pero sin arreglos que se supone no debo usarlos.

mi suposición es que el método es como el que se muestra en el vídeo:
https://www.youtube.com/watch?v=gOvh4qxVeS4

gracias por ayudar a un novato.

ps: Este es ejercicio de preparación no piensen que quiero que me hacen tareas
  #2 (permalink)  
Antiguo 25/03/2015, 20:59
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: ejercicio de c++, recursividad de funciones, búsqueda binaria

Toma una calculadora, piensa un numero digamos 1024

1024 / 2 -> 512
512 * 512 es mayor que 1024 entonces la raiz cuadrada es menor a 512.

512 / 2 -> 256
256 * 256 es mayor que 1024 entonces la raiz cuadrada es menor a 256.

256 / 2 -> 128
128 * 128 es mayor que 1024 entonces la raiz cuadrada es menor a 128.

128 / 2 -> 64
64 * 64 es mayor que 1024 entonces la raiz cuadrada es menor a 64.

64 / 2 -> 32
32 * 32 es igual a 1024 entonces la raiz cuadrada es menor es 32.

Intenta con 1023 y 1025
  #3 (permalink)  
Antiguo 25/03/2015, 21:21
 
Fecha de Ingreso: septiembre-2012
Ubicación: bogota
Mensajes: 9
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: ejercicio de c++, recursividad de funciones, búsqueda binaria

perdona, ¿esta es la forma de encontrar la raíz por búsqueda binaria?, es que no tengo idea.

aprovechando si me pueden colaborar en este otro, es que este problema es con uso de switch pero no puedo usar cadenas de caracteres en el switch no compila.


Reciba un concepto (string) e imprima la nota numérica asociada teniendo en cuenta la lista de equivalencias anterior.
concepto relacionado con la nota teniendo en cuenta:
○ 10 Excelente
○ 9 Muy Bien
○ 8 Bien
○ 7 Suficiente
○ 6 Aprobado
○ 5 Reprobado
  #4 (permalink)  
Antiguo 25/03/2015, 21:42
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: ejercicio de c++, recursividad de funciones, búsqueda binaria

Cita:
Iniciado por carnagels880 Ver Mensaje
perdona, ¿esta es la forma de encontrar la raíz por búsqueda binaria?, es que no tengo idea.
Si, de hecho un poco mas formal y es el método babilónico. http://es.wikipedia.org/wiki/C%C3%A1...abil.C3.B3nico

Cita:
Iniciado por carnagels880 Ver Mensaje
aprovechando si me pueden colaborar en este otro, es que este problema es con uso de switch pero no puedo usar cadenas de caracteres en el switch no compila.
Lo siento chavo, no existe tal cosa como switch de strings. Al menos no en C/C++.
  #5 (permalink)  
Antiguo 25/03/2015, 21:44
 
Fecha de Ingreso: septiembre-2012
Ubicación: bogota
Mensajes: 9
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: ejercicio de c++, recursividad de funciones, búsqueda binaria

muchas gracias por todo
  #6 (permalink)  
Antiguo 26/03/2015, 04:51
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ejercicio de c++, recursividad de funciones, búsqueda binaria

La idea de búsqueda binaria es dividir una sucesión e ir tomando en consideración porciones cada vez más reducidas (habitualmente dividiendo la sucesión por la mitad), hasta encontrar el elemento buscado.

Pongo mi propuesta, que consiste literalmente en ir buscando aproximaciones sucesivas al valor del radicando, a partir de dos valores iniciales, un límite inferior y otro superior. Estos dos límites pueden ser las raíces enteras próximas a la buscada o cualquier otro valor; la condición es que el primero sea menor y el segundo mayor a la raíz buscada. La serie converge sin demasiada excitación, pero firme.

Aunque esta solución no es muy eficiente, es la que para mí responde con más justeza a los términos del problema.

Código C++:
Ver original
  1. #include <iostream>
  2. #include <cmath>
  3. #include <iomanip>
  4.  
  5. // cálculo de raiz cuadrada como búsqueda binaria
  6. double raiz(double n ,double inf ,double sup)
  7. {
  8.     static const double epsilon = 1E-6; // razonablemente 0
  9.                                         // (se puede pedir al usuario)
  10.  
  11.     double m = (inf+sup)/2; // promedio de los límites
  12.     double delta = std::fabs(m*m - n); // aproximación al radicando
  13.  
  14.     if (delta <= epsilon) // el promedio es la raiz
  15.         return m;
  16.  
  17.     if(m*m < n)  // promedio menor que la raiz
  18.         return raiz(n, m, sup); // buscar entre el promedio y sup
  19.  
  20.     // promedio mayor que la raiz
  21.     return raiz(n, inf, m); // busca entre inf y el promedio
  22. }
  23.  
  24. int main()
  25. {
  26.     double raiz_7 = raiz(7, 2, 3); // la raiz de 7 se supone entre 2 y 3
  27.  
  28.     std::cout << std::setprecision(6) << std::fixed;
  29.     std::cout << "raiz cuadrada de 7 = " << raiz_7 << '\n';
  30. }

Por otro lado, sé que no tiene nada que ver con un problema escolar, pero como una especie de respeto básico, no habría que llamar "método de Babilonia" a la fórmula de Herón de Alejandría...

Última edición por lareto; 26/03/2015 a las 05:04

Etiquetas: ejercicio, funciones, recursividad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:48.