Page 58 - Chapra y Canale. Metodos Numericos para Ingenieros 5edición_Neat
P. 58
34 PROGRAMACIÓN Y SOFTWARE
Desarrolle un algoritmo que haga lo siguiente:
Paso 1: Pida al usuario los coefi cientes a, b y c.
Paso 2: Realice las operaciones de la fórmula cuadrática previendo todas las eventualidades
(como, por ejemplo, evitar la división entre cero y permitir raíces complejas).
Paso 3: Dé la solución, es decir, los valores de x.
Paso 4: Dé al usuario la opción de volver al paso 1 y repetir el proceso.
Solución. Para desarrollar el algoritmo usaremos un método que va de lo general a lo
particular (método top-down). Esto es, iremos refinando cada vez más el algoritmo en
lugar de detallar todo a la primera vez.
Para esto, supongamos, por lo pronto, que ya probamos que están bien los valores
de los coeficientes de la fórmula cuadrática (claro que esto no es cierto, pero por lo
pronto así lo consideraremos). Un algoritmo estructurado para realizar la tarea es
DO
INPUT a, b, c
2
r1 = (—b + SQRT (b — 4ac))/(2a)
2
r2 = (—b — SQRT (b — 4ac))/(2a)
DISPLAY r1, r2
DISPLAY ‘¿Repetir? Conteste sí o no’
INPUT respuesta
IF respuesta = ‘no’ EXIT
ENDDO
La construcción DOEXIT se utiliza para repetir el cálculo de la ecuación cuadráti-
ca siempre que la condición sea falsa. La condición depende del valor de la variable de
tipo carácter respuesta. Si respuesta es igual a ‘sí’ entonces se llevan a cabo los cálculos.
Si no es así, si respuesta es igual a ‘no’, el loop termina. De esta manera, el usuario
controla la terminación mediante el valor de respuesta.
Ahora bien, aunque el algoritmo anterior funcionará bien en ciertos casos, todavía
no está completo. El algoritmo quizá no funcione para algunos valores de las variables.
Esto es:
• Si a = 0 se presentará inmediatamente un problema debido a la división entre cero.
Si inspeccionamos cuidadosamente la ecuación (2.1) veremos que aquí se pueden
presentar dos casos:
Si b ≠ 0, la ecuación se reduce a una ecuación lineal con una raíz real, –c/b
Si b = 0, entonces no hay solución. Es decir, el problema es trivial.
2
• Si a ≠ 0, entonces, según sea el valor del discriminante, d = b – 4ac, se pueden
presentar también dos casos,
Si d ≥ 0, habrá dos raíces reales.*
Si d < 0, habrá dos raíces complejas.
Observe cómo hemos dejado una sangría adicional para hacer resaltar la estructura de
decisión que subyace a las matemáticas. Esta estructura se traduce, después, en un con-
junto de estructuras IF/THEN/ELSE acopladas que se pueden insertar en la parte con los
comandos sombreados en el código anterior, obteniéndose finalmente el algoritmo:
* En realidad si d = 0 las dos raíces reales tienen el mismo valor x = –b/2a.
6/12/06 13:43:42
Chapra-02.indd 34 6/12/06 13:43:42
Chapra-02.indd 34

