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 divide
2.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_input
3.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_calculator
Amb 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