PROGRAM gittata IMPLICIT NONE REAL, PARAMETER :: gradi_a_rad = 0.01745329 REAL, PARAMETER :: gravity = -9.81 INTEGER :: max_degrees ! Angolo di massima gittata REAL :: max_range ! Massima gittata alla velocita’ v0 REAL :: range ! Gittata con un dato angolo REAL :: radian ! Angolo iniziale in radianti INTEGER :: theta ! Angolo iniziale in gradi REAL :: v0 ! Velocita’ del proiettile max_range = 0. max_degrees = 0 DO WRITE(*,*) "Inserisci il valore della velocita'" WRITE (*,*) "Inserisci zero per terminare" READ (*,*) v0 IF (v0==0) EXIT CALL calcolo_gittata() ENDDO STOP CONTAINS SUBROUTINE calcolo_gittata() loop: DO theta = 0, 90 radian = real(theta) * gradi_a_rad range = - 2. * v0**2 * COS(radian) * SIN(radian) / gravity WRITE (*,*) 'THETA =', theta, ' gradi; Gittata =', range, ' metri' IF (range > max_range) THEN max_range = range max_degrees = theta END IF END DO loop WRITE (*,*) 'Gittata massima = ', max_range,'metri', ' a', max_degrees, ' gradi' END SUBROUTINE calcolo_gittata END PROGRAM gittata