From 6cd4ebc24aee4e4e95f7f2ba3cac718f39dd2cb8 Mon Sep 17 00:00:00 2001 From: Manuel Vergara Date: Sun, 5 May 2024 14:23:27 +0200 Subject: [PATCH] Add ecuacion_segundo_grado exercise --- fundamentos-programacion/PR2/README.md | 66 ++++++++++++++-- .../solucion4/ecuacion_segundo_grado | Bin 0 -> 16152 bytes .../solucion4/ecuacion_segundo_grado.c | 71 ++++++++++++++++++ 3 files changed, 130 insertions(+), 7 deletions(-) create mode 100755 fundamentos-programacion/PR2/soluciones_c/solucion4/ecuacion_segundo_grado create mode 100644 fundamentos-programacion/PR2/soluciones_c/solucion4/ecuacion_segundo_grado.c diff --git a/fundamentos-programacion/PR2/README.md b/fundamentos-programacion/PR2/README.md index f33f1b6..cfd1a00 100644 --- a/fundamentos-programacion/PR2/README.md +++ b/fundamentos-programacion/PR2/README.md @@ -781,13 +781,11 @@ Si la expresión dentro de la raíz es negativa quiere decir que la ecuación no function squareRoot(x: real): real; ``` -[Solución en lenguaje C]() - 4b. Declarad las variables necesarias para llamar a la acción del ejercicio anterior e indicad cómo se llamaría. [Solución en lenguaje C]() -5. Para cada apartado siguiente, decidid si es mejor una acción o una función y definid su cabecera (solamente se pide la cabecera, no hay que diseñar ningún algoritmo). +1. Para cada apartado siguiente, decidid si es mejor una acción o una función y definid su cabecera (solamente se pide la cabecera, no hay que diseñar ningún algoritmo). - Dadas las dimensiones de una pared (altura y anchura) y el precio de pintura por metro cuadrado, determinad el coste total de pintura necesario para pintar la pared. - Dado el consumo total de agua acumulado desde el mes de enero hasta junio (ambos incluidos), leed por el canal estándar el consumo del resto de meses (desde julio a diciembre, ambos incluidos), y retornadlo acumulado al total del consumo de los 6 primeros meses. - Dados dos números enteros intercambiad los valores de ambas variables siempre que ambas sean diferentes de cero. @@ -925,19 +923,73 @@ algorithm main writeReal(potencia(base, exponente)); end algorithm - ``` 4. Solución ```alg +function squareRoot(x: real): real + var + estimacion, epsilon: real; + end var -``` + estimacion:= x / 2.0; + epsilon:= 0.0001; -4b. Solución + while (((estimacion * estimacion - x) > epsilon) or (x - estimacion * estimacion) > epsilon) do + estimacion:= (estimacion + x / estimacion) / 2.0; + end while -```alg + return estimacion; +end function + +action calcularRaices(in A: real, in B: real, in C: real, out raiz1: real, out raiz2: real) + var + discriminante: real; + end var + + discriminante:= B * B - 4 * A * C; + + if discriminante >= 0 then + var + raiz_discriminante: real; + end var + + raiz_discriminante:= squareRoot(discriminante); + + raiz1:= (-B + raiz_discriminante) / (2 * A); + raiz2:= (-B - raiz_discriminante) / (2 * A); + else + raiz1:= 0; + raiz2:= 0; + end if + +end action + +algorithm main + var + coeficiente_A, coeficiente_B, coeficiente_C, raiz1, raiz2: real; + end var + + writeString("Introduce los coeficientes de la ecuación de segundo grado."); + writeString("A: "); + coeficiente_A:= readReal(); + + writeString("B: "); + coeficiente_B:= readReal(); + + writeString("C: "); + coeficiente_C:= readReal(); + + calcularRaices(coeficiente_A, coeficiente_B, coeficiente_C, raiz1, raiz2); + + writeString("Las raíces son: "); + writeReal(raiz1); + writeString(" y "); + writeReal(raiz2); + +end algorithm ``` 5. Solución diff --git a/fundamentos-programacion/PR2/soluciones_c/solucion4/ecuacion_segundo_grado b/fundamentos-programacion/PR2/soluciones_c/solucion4/ecuacion_segundo_grado new file mode 100755 index 0000000000000000000000000000000000000000..52eb38e95b1e234dcb9647e64416bbd58a5a2d0a GIT binary patch literal 16152 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 literal 0 HcmV?d00001 diff --git a/fundamentos-programacion/PR2/soluciones_c/solucion4/ecuacion_segundo_grado.c b/fundamentos-programacion/PR2/soluciones_c/solucion4/ecuacion_segundo_grado.c new file mode 100644 index 0000000..884a1f2 --- /dev/null +++ b/fundamentos-programacion/PR2/soluciones_c/solucion4/ecuacion_segundo_grado.c @@ -0,0 +1,71 @@ +/* +Acción que, dados tres números reales que representan los coeficientes de una +ecuación de segundo grado, retorne sus raíces, en caso de que existan. + +En caso contrario, que inicialice las raíces a 0. + +Recordad que dada la ecuación A * x2 + B * x + C las raíces se calculan: + +``` +x1 = (-B + sqrt(B2 - 4 * A * C)) / (2 * A) +``` + +Si la expresión dentro de la raíz es negativa quiere decir +que la ecuación no tiene raíces. + +Podéis suponer que la función raíz cuadrada está ya definida y su cabecera es: + +``` +function squareRoot(x: real): real; +``` +Declarad las variables necesarias para llamar a la acción anterior +e indicad cómo se llamaría. + +*/ + +#include + +// Función para calcular la raíz cuadrada utilizando el método de Newton +float squareRoot(float x) { + float estimacion = x / 2.0; // Estimación inicial + float epsilon = 0.0001; // Precisión deseada + + while ((estimacion * estimacion - x) > epsilon || (x - estimacion * estimacion) > epsilon) { + estimacion = (estimacion + x / estimacion) / 2.0; + } + + return estimacion; +} + +// Función para calcular las raíces de una ecuación de segundo grado +void calcularRaices(float A, float B, float C, float *raiz1, float *raiz2) { + float discriminante = B * B - 4 * A * C; + + if (discriminante >= 0) { + float raiz_discriminante = squareRoot(discriminante); + *raiz1 = (-B + raiz_discriminante) / (2 * A); + *raiz2 = (-B - raiz_discriminante) / (2 * A); + } else { + *raiz1 = 0; + *raiz2 = 0; + } +} + +int main() { + float coeficiente_A, coeficiente_B, coeficiente_C, raiz1, raiz2; + + printf("Introduce los coeficientes de la ecuacion de segundo grado.\nA: "); + scanf("%f", &coeficiente_A); + + printf("B: "); + scanf("%f", &coeficiente_B); + + printf("C: "); + scanf("%f", &coeficiente_C); + + calcularRaices(coeficiente_A, coeficiente_B, coeficiente_C, &raiz1, &raiz2); + + printf("\nLas raices son: %.2f y %.2f\n\n", raiz1, raiz2); + + return 0; +}