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;
|
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.
|
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]()
|
[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.
|
- 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.
|
- 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.
|
- 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));
|
writeReal(potencia(base, exponente));
|
||||||
|
|
||||||
end algorithm
|
end algorithm
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Solución
|
4. Solución
|
||||||
|
|
||||||
```alg
|
```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
|
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