MHLC U3 Ea BRRB
MHLC U3 Ea BRRB
MHLC U3 Ea BRRB
ES202104595
División CIENCIAS EXACTAS, INGENIERÍA Y
TECNOLOGÍA
Semestre 2022-1
Unidad 3
Evidencia de aprendizaje: Programación de
algoritmos matemáticos.
Herramientas y lenguajes computacionales
05/03/2022
Zapopan
Inés Chávez Acosta
Descripción de la actividad:
En esta actividad se presentan diferentes planteamientos que a través de los
conocimientos adquiridos durante la unidad, deberás demostrar y determinar el
resultado.
Indicaciones de la actividad:
Retoma el planteamiento de los ejercicios de la actividad 2 y desarrolla los programas
en lenguaje C.
Descripción de la actividad:
Resuelve cada uno de los ejercicios, tomando en cuenta las indicaciones
correspondientes.
Ejercicios para realizar:
Ejercicio uno
1) Dados los datos enteros introducidos por el usuario a,b,c que representan los
coeficientes de la formula general para resolver una ecuación de segundo grado,
construya un algoritmo en lenguaje pseudocódigo que calcule las raíces reales si
existen o bien mande los mensajes correspondientes a las siguientes restricciones:
a) Sí a=0 Mandar mensaje “Error división entre Cero, use otro método de solución”.
b) Si b2-4ac<0 Mandar mensaje “Raíces imaginarias”
−b ± √ b2−4 ac
x=
2a
Primero analizamos lo que nos pide el problema y necesitamos 3 datos de tipo entero
que son 3 variables la cuales declaramos y después leemos la entrada del usuario y
además creamos una variable x de tipo flotante que será usada para almacenar el
resultado. Entonces ponemos las condicionales si a=0 entonces imprimimos “Error
división entre Cero, use otro método de solución” y sino si b 2-4ac<0 entonces
imprimimos “Raíces imaginarias” procedemos a definir x en base a la formula y las
variables y para eso primero usamos la versión de raíz positiva y la imprimimos y
después reasignamos a x la versión de raíz negativa y la imprimimos pero eso si el
programa está dentro de la función principal y tiene inicio y fin.
Y aquí el pseudocodigo:
Librerías
Principal
Inicio
Enteros a, b, c
Real x
Leer a
Leer b
Leer c
Si a=0
Entonces
Inicio
Imprimir “Error división entre Cero, use otro método de solución”
Fin si
Sino
Inicio
Si b2-4ac<0
Entonces
Inicio
Imprimir “Raíces imaginarias”
Fin Si
Fin Sino
Sino
Inicio
x<- (-b+raíz(b2-4ac))/2a
Imprimir x
x<- (-b-raíz(b2-4ac))/2a
Imprimir x
Fin Sino
Fin
Ejercicio Dos
2) Dados los datos enteros x,n que representan los parámetros x y n de una serie de
Taylor para calcular el valor de ex, construya un algoritmo en lenguaje pseudocódigo
que calcule el valor de ex para los datos capturados por el usuario.
La fórmula de la serie de Taylor para ex es:
x x x2 x3 xn
e =1+ + + +…+
1! 2! 3! n!
Para este caso primero se define una función factorial y una función potencia las
cuales serán recursivas y tomaran en el caso del factorial un entero n y devolverá un
entero y en el caso de la potencia tomara 2 enteros x y n y devolverá un entero,
entonces se procederá al programa principal y se declararan 3 variables enteras x, i =0
y n y una flotante ex y entonces leemos x y n y entonces creamos un ciclo hasta n en
el que definimos ex en base a la formula y llamamos las funciones correspondientes
que habíamos definido anteriormente con los argumentos x e i para cada función y
entonces imprimimos el valor de ex fuera del ciclo y se termina el programa.
Y aquí el pseudocodigo :
Librerías
Factorial(entero n)
Inicio
Si n=1
Entonces
Inicio
Retorna 1
Fin Si
Sino
Inicio
Retorna n*Factorial(n-1)
Fin Sino
Fin
Potencia(entero x, entero n)
Inicio
Si n=0
Entonces
Inicio
Retorna 1
Fin Si
Sino
Inicio
Si
Entonces
Inicio
Retorna Potencia(x,n+1)/x
Fin Si
Fin Sino
Sino
Inicio
Retorna x*Potencia(x,n-1)
Fin Sino
Fin
Principal
Inicio
Enteros x, n, i
Real ex
Leer x
Leer n
i<-0
ex<-0
Mientras i<=n
Inicio
ex<- ex+Potencia(x,i)/Factorial(i)
i<-i+1
Fin Mientras
Imprimir ex
Fin
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
int a,b,c;
float x;
scanf("%i",&a);
scanf("%i",&b);
scanf("%i",&c);
if(a==0){
printf("Error división entre Cero, use otro método de solución");
}
else{
if((b*b-4*a*c)<0){
printf("Raíces imaginarias");
}
else{
x=(-b+sqrt(b*b-4*a*c))/(2*a);
printf("%f\n",x);
x=(-b-sqrt(b*b-4*a*c))/(2*a);
printf("%f",x);
}
}
return 0;
}
Y el resultado es:
Y el resultado correcto es
Raíces imaginarias
Por lo que es correcto
Y una última entrada es:
Y el resultado es:
Y el resultado correcto es:
Error división entre Cero, use otro método de solución
Por lo que el código es correcto.
Resulta que para el segundo programa aunque las funciones recursivas son correctas
estas consumen muchos recursos por lo que decidí usar directamente funciones de la
librería math.h y el factorial usa la función gamma de euler
Y el segundo programa es:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
int x,n,i;
double ex;
scanf("%i",&x);
scanf("%i",&n);
i=0;
ex=0;
while(i<=n){
ex=ex+pow(x,i)/Factorial(i);
i++;
}
printf("%f",ex);
return 0;
}
Y el resultado es:
Y el resultado correcto es:
0.367881
Por lo que es correcto.
Otra entrada para comprobar la corrida es:
Y el resultado es:
Y el resultado correcto es:
1 o 1.000000
Por lo que es correcto.
Y una última entrada es:
Y su resultado es:
Y el resultado correcto es:
7.388211
Por lo que el programa en su conjunto es correcto.
Nota: debido a lo lenta que es mi computadora y la poca memoria RAM y disco duro de
la que dispone no puedo usar eclipse y en su lugar use un entorno de desarrollo en
línea llamado sololearn.
Conclusión:
Esta actividad me permitió volver a utilizar el lenguaje C y en este caso para programar
2 algoritmos matemáticos y aunque el pseudocodigo es útil para tener una idea general
de cómo diseñar el algoritmo su implementación requiere de ciertas correcciones
propias del lenguaje y de la computadora y su arquitectura como el uso de recursividad
o la sintaxis e identación de ciclos del lenguaje y la escritura de las expresiones
matemáticas por lo que para estar seguro de que un algoritmo funciona siempre es
mejor implementarlo en el lenguaje de programación a trabajar y en una computadora.
Y esta actividad me servirá para el desarrollo de actividades en esta y otras materias y a
lo largo de mi carrera profesional.
Fuentes:
Mi experiencia programando.