Introducció
En aquest projecte final, aplicaràs tots els coneixements adquirits al llarg del curs per desenvolupar una aplicació integral en Fortran. Aquest projecte està dissenyat per consolidar els conceptes apresos i proporcionar-te una experiència pràctica completa. L'objectiu és crear una aplicació que combini diversos aspectes de la programació en Fortran, incloent-hi la gestió de fitxers, l'ús de procediments i funcions, i la manipulació d'estructures de dades avançades.
Objectius del Projecte
- Aplicar els conceptes bàsics de Fortran: Sintaxi, estructures de control, arrays, cadenes, etc.
- Utilitzar procediments i funcions: Crear subrutines i funcions per modularitzar el codi.
- Gestionar fitxers: Llegir i escriure dades des de i cap a fitxers.
- Implementar estructures de dades avançades: Utilitzar tipus derivats, punteres i llistes enllaçades.
- Optimitzar i depurar el codi: Aplicar tècniques d'optimització i depuració per millorar el rendiment i la mantenibilitat del codi.
Descripció del Projecte
Tema del Projecte: Simulador de Sistemes Físics
Crearàs un simulador de sistemes físics que permeti modelar i simular el moviment d'objectes sota diferents forces. El simulador haurà de:
- Llegir dades d'entrada: Les dades d'entrada inclouran les propietats dels objectes (massa, velocitat inicial, posició inicial) i les forces aplicades (gravitació, fricció, etc.).
- Calcular el moviment: Utilitzar les equacions de moviment per calcular la posició i la velocitat dels objectes en cada instant de temps.
- Mostrar els resultats: Escriure els resultats en un fitxer de sortida i mostrar un resum per pantalla.
Estructura del Projecte
-
Configuració Inicial:
- Crear un fitxer de configuració per especificar les propietats dels objectes i les forces aplicades.
- Llegir les dades de configuració des d'un fitxer.
-
Càlcul del Moviment:
- Implementar les equacions de moviment en subrutines.
- Utilitzar arrays per emmagatzemar les posicions i velocitats dels objectes en cada instant de temps.
-
Sortida de Resultats:
- Escriure els resultats en un fitxer de sortida.
- Mostrar un resum dels resultats per pantalla.
Exemples de Codi
1. Llegir Dades de Configuració
program read_config
implicit none
integer :: i, num_objects
real :: mass, initial_velocity, initial_position
! Obre el fitxer de configuració
open(unit=10, file='config.txt', status='old', action='read')
! Llegeix el nombre d'objectes
read(10, *) num_objects
! Llegeix les propietats de cada objecte
do i = 1, num_objects
read(10, *) mass, initial_velocity, initial_position
print *, 'Objecte', i, ': Massa =', mass, 'Velocitat Inicial =', initial_velocity, 'Posició Inicial =', initial_position
end do
! Tanca el fitxer
close(10)
end program read_config2. Càlcul del Moviment
subroutine calculate_motion(mass, initial_velocity, initial_position, time, position, velocity)
implicit none
real, intent(in) :: mass, initial_velocity, initial_position, time
real, intent(out) :: position, velocity
real :: acceleration
! Suposem una acceleració constant (per exemple, gravetat)
acceleration = -9.81
! Equacions de moviment
position = initial_position + initial_velocity * time + 0.5 * acceleration * time**2
velocity = initial_velocity + acceleration * time
end subroutine calculate_motion3. Escriure Resultats
program write_results
implicit none
integer :: i, num_steps
real :: time, position, velocity
! Obre el fitxer de sortida
open(unit=20, file='results.txt', status='replace', action='write')
! Escriu els resultats en el fitxer
num_steps = 100
do i = 1, num_steps
time = i * 0.1
call calculate_motion(1.0, 10.0, 0.0, time, position, velocity)
write(20, *) time, position, velocity
end do
! Tanca el fitxer
close(20)
end program write_resultsExercicis Pràctics
-
Ampliar el Fitxer de Configuració:
- Afegir més propietats als objectes, com ara el coeficient de fricció.
- Modificar el codi per llegir i utilitzar aquestes noves propietats.
-
Implementar Forces Addicionals:
- Afegir subrutines per calcular altres forces, com ara la fricció o la resistència de l'aire.
- Integrar aquestes forces en les equacions de moviment.
-
Visualitzar els Resultats:
- Crear un script en un altre llenguatge (per exemple, Python) per visualitzar els resultats del simulador.
Solucions
Solució a l'Exercici 1
program read_config_extended
implicit none
integer :: i, num_objects
real :: mass, initial_velocity, initial_position, friction_coefficient
! Obre el fitxer de configuració
open(unit=10, file='config_extended.txt', status='old', action='read')
! Llegeix el nombre d'objectes
read(10, *) num_objects
! Llegeix les propietats de cada objecte
do i = 1, num_objects
read(10, *) mass, initial_velocity, initial_position, friction_coefficient
print *, 'Objecte', i, ': Massa =', mass, 'Velocitat Inicial =', initial_velocity, 'Posició Inicial =', initial_position, 'Coeficient de Fricció =', friction_coefficient
end do
! Tanca el fitxer
close(10)
end program read_config_extendedSolució a l'Exercici 2
subroutine calculate_motion_with_friction(mass, initial_velocity, initial_position, friction_coefficient, time, position, velocity)
implicit none
real, intent(in) :: mass, initial_velocity, initial_position, friction_coefficient, time
real, intent(out) :: position, velocity
real :: acceleration, friction_force
! Suposem una acceleració constant (per exemple, gravetat)
acceleration = -9.81
! Calcula la força de fricció
friction_force = friction_coefficient * mass * acceleration
! Equacions de moviment amb fricció
position = initial_position + initial_velocity * time + 0.5 * (acceleration - friction_force/mass) * time**2
velocity = initial_velocity + (acceleration - friction_force/mass) * time
end subroutine calculate_motion_with_frictionConclusió
Aquest projecte final t'ha permès aplicar una àmplia gamma de conceptes de Fortran en un context pràctic. Has après a modularitzar el codi, gestionar fitxers, implementar estructures de dades avançades i optimitzar el rendiment del teu programa. Aquestes habilitats són fonamentals per a qualsevol programador que vulgui treballar amb Fortran en projectes reals. Felicitats per arribar fins aquí i completar el curs!
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
