Add ecuacion_segundo_grado exercise
This commit is contained in:
parent
d46366ede0
commit
6cd4ebc24a
@ -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
|
||||
|
BIN
fundamentos-programacion/PR2/soluciones_c/solucion4/ecuacion_segundo_grado
Executable file
BIN
fundamentos-programacion/PR2/soluciones_c/solucion4/ecuacion_segundo_grado
Executable file
Binary file not shown.
@ -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 <stdio.h>
|
||||
|
||||
// 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user