Exercice d'informatique : simulation de trafic routier sur Fortran
[...] Instructions de compilations : g95 - c *.f90 g95 - o proj *.f90 Sources : Name : types.f90 Author : Version : 1.0 Copyright : Description : Module contenant les types dérivés MODULE types IMPLICIT NONE Définition du type dérivé "vehicule" TYPE vehicule INTEGER pos numéro de la case sur laquelle se trouve le véhicule INTEGER vit vitesse END TYPE vehicule Définition du type dérivé "route" TYPE route INTEGER n_max longueur de la route INTEGER v_max vitesse maximale autorisée sur la route INTEGER n_v nombre de véhicules en circulation sur la route TYPE(vehicule), DIMENSION(:), ALLOCATABLE tab_v tableau dynamique de véhicules END TYPE route END MODULE types Name : procedures.f90 Author : Version : 1.0 Copyright : Description : Module contenant les procédures (fonctions et subroutines) MODULE procedures USE types IMPLICIT NONE CONTAINS FONCTIONS SUBROUTINES Sous-programme permettant d'afficher l'état d'une route SUBROUTINE affichage(r, l_clear) TYPE(route), INTENT(IN) r LOGICAL, INTENT(IN) l_clear CHARACTER(1), DIMENSION(r%n_max) tableau_vehicule tableau contenant des lettres pour chaque véhicule CHARACTER(LEN = r%n_max) aff_tableau tableau à afficher initialisation tableau de véhicule INTEGER pos_v DO i = r%n_max-1 tableau_vehicule(i) = ' ' END DO remplissage du tableau DO j = r%n_v pos_v = r%tab_v(j)%pos tableau_vehicule(pos_v) = ACHAR(j+64) END DO si l_clear vaut True on efface l'écran IF(l_clear) THEN CALL SYSTEM('clear') END IF affichage du tableau à l'écran aff_tableau = DO i = LEN(aff_tableau) aff_tableau(i:i) = tableau_vehicule(i-1) END DO PRINT aff_tableau ralentissement du programme CALL SYSTEM('sleep 0.1') END SUBROUTINE affichage Sous-programme permettant de mettre à jour les positions des véhicules par la règle de la phase 4 (progression) SUBROUTINE progression(r) TYPE(route), INTENT(INOUT) r INTEGER i INTEGER pos, new_pos actuelle et nouvelle position mise à jour des positions des véhicules DO i = r%n_v pos = r%tab_v(i)%pos new_pos = MODULO(pos + r%tab_v(i)%vit, r%n_max) r%tab_v(i)%pos = new_pos END DO END SUBROUTINE progression Sous-programme permettant de mettre à jour les vitesses des véhicules par la règle de la phase 1 (accélération) SUBROUTINE acceleration(r) TYPE(route), INTENT(INOUT) r INTEGER i INTEGER vit, new_vit actuelle et nouvelle vitesse mise à jour des positions des véhicules DO i = r%n_v vit = r%tab_v(i)%vit IF(vit 0 .AND. [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture