Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- c Main part
- program main
- implicit none
- common / input / a, b, alpha
- common / utility / PI, beta
- common / flags / is_triangle_created
- real a, b, alpha
- real PI, beta
- logical is_triangle_created
- PI = 3.1415927
- call Menu
- end
- c Menu
- subroutine Menu
- implicit none
- integer command
- common / input / a, b, alpha
- common / utility / PI, beta
- common / flags / is_triangle_created
- real calculate_area, find_min_angle, min_angle_cos
- real a, b, alpha
- real PI, beta
- logical is_triangle_created
- is_triangle_created = .false.
- print *, '1. Create new triangle.'
- print *, '2. Calculate area.'
- print *, '3. Find minimal angle.'
- print *, '4. Find cosin of minimal angle.'
- print *, '5. Exit.'
- c Delete this
- print *, '6. (temp) Show triangle params.'
- c Delete this
- 1 print *, '>> '
- read *, command
- if(.NOT. is_triangle_created .AND.
- + (command .EQ. 2 .OR. command .EQ. 3 .OR. command .EQ. 4)) then
- print *, 'Error: triangle is not created.'
- goto 1
- endif
- select case (command)
- case (1)
- call input_triangle
- case (2)
- print *, 'Area = ', calculate_area()
- case (3)
- print *, 'Minimal angle = ', find_min_angle()
- case (4)
- print *, 'Minimal angle cosin = ', min_angle_cos()
- case (5)
- goto 2
- case (6)
- c Delete this
- call write_triangle
- c Delete this
- case default
- print *, 'Unexpected command'
- end select
- goto 1
- 2 end
- c Triangle creation
- subroutine input_triangle
- implicit none
- common / input / a, b, alpha
- common / utility / PI, beta
- common / flags / is_triangle_created
- real a, b, alpha
- real PI, beta
- logical is_triangle_created
- 3 print *, 'Enter [a] [b] [alpha]:'
- read *, a, b, alpha
- if(a .LE. 0 .OR. b .LE. 0 .OR. alpha .LE. 0 .OR.
- + (a**2 .LE. (b*sin(alpha))**2)) then
- print *, 'Error: triangle is not exist'
- goto 3
- endif
- is_triangle_created = .true.
- print *, 'Triangle is created'
- end
- c Area calculation
- real function calculate_area()
- implicit none
- common / input / a, b, alpha
- common / utility / PI, beta
- real a, b, alpha
- real PI, beta
- beta = asin(b/a * sin(alpha * PI/180)) * 180/PI
- calculate_area = 0.5 * a * b * sin((180 - beta - alpha) * PI/180)
- return
- end
- c Minimal angle finding
- real function find_min_angle()
- implicit none
- common / input / a, b, alpha
- common / utility / PI, beta
- real a, b, alpha
- real PI, beta, gamma
- beta = asin(b/a * sin(alpha * PI/180)) * 180/PI
- gamma = 180 - alpha - beta
- if (alpha .LE. beta .AND. alpha .LE. gamma) then
- find_min_angle = alpha
- elseif (beta .LE. alpha .AND. beta .LE. gamma) then
- find_min_angle = beta
- else
- find_min_angle = gamma
- endif
- return
- end
- c Calculate cosin of minimal angle
- real function min_angle_cos()
- implicit none
- common / input / a, b, alpha
- common / utility / PI, beta
- real a, b, alpha
- real PI, beta, find_min_angle
- min_angle_cos = cos(find_min_angle() * PI/180)
- end
- c Delete
- subroutine write_triangle
- common / input / a, b, alpha
- common / utility / PI, beta
- real a, b, alpha
- real PI, beta
- print *, 'a = ', a
- print *, 'b = ', b
- print *, 'alpha = ', alpha
- end
- c Delete
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement