En aquest tema, construirem una calculadora científica utilitzant Fortran. Aquest projecte ens permetrà aplicar molts dels conceptes apresos al llarg del curs, com ara l'ús de variables, operadors, estructures de control, subrutines i funcions. La calculadora serà capaç de realitzar operacions matemàtiques bàsiques i algunes funcions científiques.
Objectius
- Aplicar els conceptes bàsics de Fortran en un projecte pràctic.
- Desenvolupar habilitats en la gestió d'entrada i sortida.
- Utilitzar subrutines i funcions per modularitzar el codi.
- Implementar operacions matemàtiques i funcions científiques.
Estructura del Projecte
- Introducció i Configuració
- Definició de Funcions Matemàtiques
- Implementació de l'Entrada i Sortida
- Estructura de Control per a la Selecció d'Operacions
- Integració i Proves
- Introducció i Configuració
1.1. Introducció
Comencem per crear un nou fitxer Fortran per al nostre projecte. Anomenem-lo calculator.f90.
1.2. Configuració
Assegura't de tenir el teu entorn de desenvolupament configurat correctament. Si no ho has fet, revisa el mòdul "Configuració de l'Entorn de Desenvolupament".
- Definició de Funcions Matemàtiques
2.1. Operacions Bàsiques
Definim funcions per a les operacions matemàtiques bàsiques: suma, resta, multiplicació i divisió.
! Funció per sumar dos nombres
function add(a, b)
real :: add
real, intent(in) :: a, b
add = a + b
end function add
! Funció per restar dos nombres
function subtract(a, b)
real :: subtract
real, intent(in) :: a, b
subtract = a - b
end function subtract
! Funció per multiplicar dos nombres
function multiply(a, b)
real :: multiply
real, intent(in) :: a, b
multiply = a * b
end function multiply
! Funció per dividir dos nombres
function divide(a, b)
real :: divide
real, intent(in) :: a, b
if (b /= 0.0) then
divide = a / b
else
print *, "Error: Divisió per zero"
divide = 0.0
end if
end function divide2.2. Funcions Científiques
Afegim funcions per a operacions científiques com ara el càlcul de la potència, arrel quadrada i logaritme.
! Funció per calcular la potència
function power(base, exponent)
real :: power
real, intent(in) :: base, exponent
power = base ** exponent
end function power
! Funció per calcular l'arrel quadrada
function square_root(x)
real :: square_root
real, intent(in) :: x
if (x >= 0.0) then
square_root = sqrt(x)
else
print *, "Error: Arrel quadrada de nombre negatiu"
square_root = 0.0
end if
end function square_root
! Funció per calcular el logaritme natural
function natural_log(x)
real :: natural_log
real, intent(in) :: x
if (x > 0.0) then
natural_log = log(x)
else
print *, "Error: Logaritme de nombre no positiu"
natural_log = 0.0
end if
end function natural_log
- Implementació de l'Entrada i Sortida
3.1. Entrada de l'Usuari
Implementem una subrutina per gestionar l'entrada de l'usuari.
subroutine get_user_input(operation, a, b)
character(len=1) :: operation
real :: a, b
print *, "Selecciona una operació (+, -, *, /, ^, r, l):"
read *, operation
print *, "Introdueix el primer nombre:"
read *, a
if (operation /= 'r' .and. operation /= 'l') then
print *, "Introdueix el segon nombre:"
read *, b
end if
end subroutine get_user_input3.2. Sortida de Resultats
Implementem una subrutina per mostrar els resultats.
subroutine display_result(result)
real, intent(in) :: result
print *, "El resultat és: ", result
end subroutine display_result
- Estructura de Control per a la Selecció d'Operacions
4.1. Selecció d'Operació
Utilitzem una estructura de control select case per determinar quina operació realitzar.
program scientific_calculator
implicit none
character(len=1) :: operation
real :: a, b, result
call get_user_input(operation, a, b)
select case (operation)
case ('+')
result = add(a, b)
case ('-')
result = subtract(a, b)
case ('*')
result = multiply(a, b)
case ('/')
result = divide(a, b)
case ('^')
result = power(a, b)
case ('r')
result = square_root(a)
case ('l')
result = natural_log(a)
case default
print *, "Operació no vàlida"
result = 0.0
end select
call display_result(result)
end program scientific_calculator
- Integració i Proves
5.1. Integració
Combina totes les funcions i subrutines en un únic fitxer calculator.f90.
5.2. Proves
Executa el programa i prova diferents operacions per assegurar-te que tot funciona correctament.
Conclusió
En aquest tema, hem construït una calculadora científica utilitzant Fortran. Hem aplicat conceptes bàsics i avançats, com ara l'ús de funcions, subrutines, estructures de control i gestió d'entrada i sortida. Aquest projecte ens ha permès veure com es poden combinar diferents elements de Fortran per crear una aplicació útil i funcional.
Exercici Pràctic
Exercici: Afegeix una nova funció a la calculadora per calcular el factorial d'un nombre. Implementa la funció factorial i actualitza el programa principal per incloure aquesta nova operació.
Solució:
! Funció per calcular el factorial
function factorial(n)
integer :: factorial, n, i
factorial = 1
if (n < 0) then
print *, "Error: Factorial de nombre negatiu"
factorial = 0
else
do i = 1, n
factorial = factorial * i
end do
end if
end function factorial
! Actualització del programa principal
program scientific_calculator
implicit none
character(len=1) :: operation
real :: a, b, result
integer :: n
call get_user_input(operation, a, b)
select case (operation)
case ('+')
result = add(a, b)
case ('-')
result = subtract(a, b)
case ('*')
result = multiply(a, b)
case ('/')
result = divide(a, b)
case ('^')
result = power(a, b)
case ('r')
result = square_root(a)
case ('l')
result = natural_log(a)
case ('!')
print *, "Introdueix un nombre enter:"
read *, n
result = factorial(n)
case default
print *, "Operació no vàlida"
result = 0.0
end select
call display_result(result)
end program scientific_calculatorAmb aquesta ampliació, la calculadora ara també pot calcular el factorial d'un nombre enter. Prova aquesta nova funcionalitat per assegurar-te que funciona correctament.
Curs de Programació en Fortran
Mòdul 1: Introducció a Fortran
- Introducció a Fortran
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsiques
- Escrivint el teu Primer Programa en Fortran
Mòdul 2: Conceptes Bàsics
- Variables i Tipus de Dades
- Operadors i Expressions
- Entrada i Sortida
- Estructures de Control: Sentències If
- Estructures de Control: Bucles
Mòdul 3: Arrays i Cadenes
Mòdul 4: Procediments i Funcions
Mòdul 5: Estructures de Dades Avançades
Mòdul 6: Gestió de Fitxers
Mòdul 7: Temes Avançats
Mòdul 8: Millors Pràctiques i Optimització
- Tècniques d'Optimització de Codi
- Depuració i Perfilat
- Escrivint Codi Mantenible
- Estàndards i Portabilitat de Fortran
