Codificación aprenderaprogramar.com: CU00254A
PROBLEMAS CON ITERACIÓN PARA BÚSQUEDA DE SOLUCIONES. TANTEO DE SOLUCIONES
EJERCICIO
Transformar en pseudocódigo el siguiente ejercicio, relativo a la búsqueda por tanteo y conforme a unas reglas de la solución positiva de f(x) = 5x2 – 3x – 4 con precisión ± 0,01.
Objetivo: Buscar el valor de x que siendo un número real positivo hace f(x) = 5x2 - 3x - 4 igual a cero de acuerdo con estas reglas.
1. Se admite la desviación de f(x) respecto al valor pedido de ± 0'01.
2. Hemos perdido toda nuestra memoria: no se admite el uso de fórmulas o estrategias de resolución gráficas o analíticas: debemos basarnos en un tanteo puro ordenado (no aleatorio) y constante.
3. Se sabe que la solución está entre 1 y 10, debiendo comenzar la búsqueda por uno de estos dos extremos.
Se pide: definir el esquema de búsqueda limitando el número máximo de iteraciones.
SOLUCIÓN
No vamos a construir menús ni entradas de datos para centrarnos en el único aspecto interesante que podemos encontrar: realizar una búsqueda por tanteo, en este caso limitados por las condiciones expuestas en el enunciado del problema. El control de datos de entrada lo tendría que hacer el programador modificando los valores asignados a variables colocadas en las primeras líneas del programa.
Pseudocódigo:
PROGRAMA TANTEO [Pseudocódigo aprenderaprogramar.com] Variables Enteras: liminf, limsup, Nmax Reales: Valorfx, e, int, c, tmp1, tmp2 1. Inicio 2. e = 0,01 : liminf = 1 : limsup = 10 3. int = 0,001 : Nmax = 9000 4. Llamar Fdex(liminf) PorValor : tmp1 = Valorfx 5. Llamar Fdex(limsup) PorValor : tmp2 = Valorfx 6. Si ABS(tmp1) <= ABS(tmp2) Entonces c = liminf SiNo c = limsup int = - int FinSi 7. Llamar Evaluacion(c) PorValor 8. Fin |
Módulo Fdex(x: Reales) Valorfx = 5 * x ^ 2 – 3 * x – 4 FinMódulo
Módulo Evaluacion(Valor: Reales) Variables Enteras: N Booleanas: Hallado 1. Mientras N < Nmax y Hallado = Falso Hacer N = N + 1 Llamar Fdex(Valor) PorValor Si ABS(Valorfx) <= 0,01 Entonces Hallado = Verdadero Mostrar “El resultado es c =”, Valor Mostrar “Iteraciones realizadas:”, N SiNo Valor = Valor + int FinSi Repetir 2. Si N >= Nmax Entonces Mostrar “Se alcanzó el número máximo de iteraciones” FinSi FinMódulo |
Diagrama de flujo:
Comentarios: Las cuestiones que pueden resultar problemáticas son el sentido de la búsqueda según el punto de arranque y “el olvido” de aplicar valores absolutos cuando procede.
Tenemos un módulo que nos devuelve el resultado de una ecuación para un valor dado. En general, con los distintos lenguajes dispondremos de mayor número de posibilidades de las que hemos visto para la gestión de los módulos. En este caso usaríamos una función, módulo que devuelve un valor asociado a su llamada, sin necesidad de usar variables para transportar la información. Lo veremos más adelante.
Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link: Ver curso completo.
Para hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.