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_config
2. 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_motion
3. 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_results
Exercicis 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_extended
Solució 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_friction
Conclusió
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