En este módulo, vamos a aplicar los conocimientos adquiridos a lo largo del curso para construir una calculadora científica en Fortran. Este proyecto integrará varios conceptos fundamentales y avanzados, como el manejo de variables, estructuras de control, funciones y subrutinas, y manejo de entrada y salida.
Objetivos del Módulo
- Aplicar conceptos básicos y avanzados de Fortran en un proyecto práctico.
- Desarrollar habilidades en la estructuración y organización de código.
- Implementar funciones matemáticas comunes en una calculadora científica.
- Manejar la entrada y salida de datos de manera eficiente.
Estructura del Proyecto
- Definición de Requisitos
- Diseño del Programa
- Implementación de Funciones Matemáticas
- Manejo de Entrada y Salida
- Integración y Pruebas
- Definición de Requisitos
La calculadora científica debe ser capaz de realizar las siguientes operaciones:
- Suma, resta, multiplicación y división.
- Potenciación y radicación.
- Funciones trigonométricas (seno, coseno, tangente).
- Logaritmos y exponenciales.
- Diseño del Programa
El programa se estructurará en varias subrutinas y funciones para mantener el código organizado y modular. A continuación, se presenta un diagrama de flujo básico del programa:
- Mostrar menú de opciones.
- Leer la opción seleccionada por el usuario.
- Solicitar los datos necesarios para la operación.
- Llamar a la función correspondiente.
- Mostrar el resultado.
- Repetir hasta que el usuario decida salir.
- Implementación de Funciones Matemáticas
Funciones Básicas
function add(a, b)
real :: add
real, intent(in) :: a, b
add = a + b
end function add
function subtract(a, b)
real :: subtract
real, intent(in) :: a, b
subtract = a - b
end function subtract
function multiply(a, b)
real :: multiply
real, intent(in) :: a, b
multiply = a * b
end function multiply
function divide(a, b)
real :: divide
real, intent(in) :: a, b
if (b /= 0.0) then
divide = a / b
else
print *, "Error: División por cero"
divide = 0.0
end if
end function divideFunciones Avanzadas
function power(base, exponent)
real :: power
real, intent(in) :: base, exponent
power = base ** exponent
end function power
function sqrt(value)
real :: sqrt
real, intent(in) :: value
if (value >= 0.0) then
sqrt = sqrt(value)
else
print *, "Error: Raíz cuadrada de un número negativo"
sqrt = 0.0
end if
end function sqrt
function sine(angle)
real :: sine
real, intent(in) :: angle
sine = sin(angle)
end function sine
function cosine(angle)
real :: cosine
real, intent(in) :: angle
cosine = cos(angle)
end function cosine
function tangent(angle)
real :: tangent
real, intent(in) :: angle
tangent = tan(angle)
end function tangent
function logarithm(value)
real :: logarithm
real, intent(in) :: value
if (value > 0.0) then
logarithm = log(value)
else
print *, "Error: Logaritmo de un número no positivo"
logarithm = 0.0
end if
end function logarithm
function exponential(value)
real :: exponential
real, intent(in) :: value
exponential = exp(value)
end function exponential
- Manejo de Entrada y Salida
Menú de Opciones
subroutine show_menu()
print *, "Calculadora Científica"
print *, "1. Suma"
print *, "2. Resta"
print *, "3. Multiplicación"
print *, "4. División"
print *, "5. Potenciación"
print *, "6. Raíz Cuadrada"
print *, "7. Seno"
print *, "8. Coseno"
print *, "9. Tangente"
print *, "10. Logaritmo"
print *, "11. Exponencial"
print *, "0. Salir"
end subroutine show_menuLectura de Opción y Datos
subroutine read_option(option)
integer, intent(out) :: option
print *, "Seleccione una opción: "
read *, option
end subroutine read_option
subroutine read_two_numbers(a, b)
real, intent(out) :: a, b
print *, "Ingrese dos números: "
read *, a, b
end subroutine read_two_numbers
subroutine read_one_number(a)
real, intent(out) :: a
print *, "Ingrese un número: "
read *, a
end subroutine read_one_number
- Integración y Pruebas
Programa Principal
program scientific_calculator
implicit none
integer :: option
real :: a, b, result
do
call show_menu()
call read_option(option)
select case (option)
case (1)
call read_two_numbers(a, b)
result = add(a, b)
print *, "Resultado: ", result
case (2)
call read_two_numbers(a, b)
result = subtract(a, b)
print *, "Resultado: ", result
case (3)
call read_two_numbers(a, b)
result = multiply(a, b)
print *, "Resultado: ", result
case (4)
call read_two_numbers(a, b)
result = divide(a, b)
print *, "Resultado: ", result
case (5)
call read_two_numbers(a, b)
result = power(a, b)
print *, "Resultado: ", result
case (6)
call read_one_number(a)
result = sqrt(a)
print *, "Resultado: ", result
case (7)
call read_one_number(a)
result = sine(a)
print *, "Resultado: ", result
case (8)
call read_one_number(a)
result = cosine(a)
print *, "Resultado: ", result
case (9)
call read_one_number(a)
result = tangent(a)
print *, "Resultado: ", result
case (10)
call read_one_number(a)
result = logarithm(a)
print *, "Resultado: ", result
case (11)
call read_one_number(a)
result = exponential(a)
print *, "Resultado: ", result
case (0)
exit
case default
print *, "Opción no válida. Intente de nuevo."
end select
end do
end program scientific_calculatorConclusión
En este módulo, hemos construido una calculadora científica en Fortran, integrando varios conceptos fundamentales y avanzados del lenguaje. Este proyecto no solo refuerza el conocimiento adquirido, sino que también proporciona una base sólida para abordar problemas más complejos en el futuro. Asegúrate de probar y depurar tu programa para garantizar su correcto funcionamiento y mejorar tus habilidades de programación en Fortran.
Curso de Programación en Fortran
Módulo 1: Introducción a Fortran
- Introducción a Fortran
- Configuración del Entorno de Desarrollo
- Sintaxis y Estructura Básica
- Escribiendo tu Primer Programa en Fortran
Módulo 2: Conceptos Básicos
- Variables y Tipos de Datos
- Operadores y Expresiones
- Entrada y Salida
- Estructuras de Control: Sentencias If
- Estructuras de Control: Bucles
Módulo 3: Arreglos y Cadenas
- Introducción a los Arreglos
- Arreglos Multidimensionales
- Manejo de Cadenas
- Operaciones con Arreglos y Cadenas
Módulo 4: Procedimientos y Funciones
Módulo 5: Estructuras de Datos Avanzadas
Módulo 6: Manejo de Archivos
- Lectura de Archivos
- Escritura de Archivos
- Posicionamiento de Archivos
- Operaciones con Archivos Binarios
Módulo 7: Temas Avanzados
Módulo 8: Mejores Prácticas y Optimización
- Técnicas de Optimización de Código
- Depuración y Perfilado
- Escribiendo Código Mantenible
- Estándares y Portabilidad de Fortran
