Advertisement
Wolfed_7

Cstylefortran

Feb 14th, 2022
1,490
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. c     Main part
  2.       program main
  3.       implicit none
  4.  
  5.       common / input / a, b, alpha
  6.       common / utility / PI, beta
  7.       common / flags / is_triangle_created
  8.  
  9.       real a, b, alpha
  10.       real PI, beta
  11.       logical is_triangle_created
  12.       PI = 3.1415927
  13.  
  14.       call Menu
  15.       end
  16.  
  17. c     Menu
  18.       subroutine Menu
  19.       implicit none
  20.  
  21.       integer command
  22.  
  23.       common / input / a, b, alpha
  24.       common / utility / PI, beta
  25.       common / flags / is_triangle_created
  26.  
  27.       real calculate_area, find_min_angle, min_angle_cos
  28.       real a, b, alpha
  29.       real PI, beta
  30.       logical is_triangle_created
  31.       is_triangle_created = .false.
  32.  
  33.       print *, '1. Create new triangle.'
  34.       print *, '2. Calculate area.'
  35.       print *, '3. Find minimal angle.'
  36.       print *, '4. Find cosin of minimal angle.'
  37.       print *, '5. Exit.'
  38. c     Delete this
  39.       print *, '6. (temp) Show triangle params.'
  40. c     Delete this
  41.     1 print *, '>> '
  42.  
  43.       read *, command
  44.       if(.NOT. is_triangle_created .AND.
  45.      + (command .EQ. 2 .OR. command .EQ. 3 .OR. command .EQ. 4)) then
  46.          print *, 'Error: triangle is not created.'
  47.          goto 1
  48.       endif
  49.  
  50.       select case (command)
  51.       case (1)
  52.          call input_triangle
  53.       case (2)
  54.          print *, 'Area = ', calculate_area()
  55.       case (3)
  56.          print *, 'Minimal angle = ', find_min_angle()
  57.       case (4)
  58.          print *, 'Minimal angle cosin = ', min_angle_cos()
  59.       case (5)
  60.          goto 2
  61.       case (6)
  62. c     Delete this      
  63.          call write_triangle
  64. c     Delete this
  65.       case default
  66.          print *, 'Unexpected command'
  67.       end select
  68.       goto 1
  69.     2 end
  70.  
  71. c     Triangle creation
  72.       subroutine input_triangle
  73.       implicit none
  74.      
  75.       common / input / a, b, alpha
  76.       common / utility / PI, beta
  77.       common / flags / is_triangle_created
  78.  
  79.       real a, b, alpha
  80.       real PI, beta
  81.       logical is_triangle_created
  82.  
  83.     3 print *, 'Enter [a] [b] [alpha]:'
  84.       read *, a, b, alpha
  85.  
  86.       if(a .LE. 0 .OR. b .LE. 0 .OR. alpha .LE. 0 .OR.
  87.      + (a**2 .LE. (b*sin(alpha))**2)) then
  88.          print *, 'Error: triangle is not exist'
  89.          goto 3
  90.       endif
  91.  
  92.       is_triangle_created = .true.
  93.       print *, 'Triangle is created'
  94.       end
  95.  
  96. c     Area calculation
  97.       real function calculate_area()
  98.       implicit none
  99.  
  100.       common / input / a, b, alpha
  101.       common / utility / PI, beta
  102.  
  103.       real a, b, alpha
  104.       real PI, beta
  105.  
  106.       beta = asin(b/a * sin(alpha * PI/180)) * 180/PI
  107.       calculate_area = 0.5 * a * b * sin((180 - beta - alpha) * PI/180)
  108.  
  109.       return
  110.       end
  111.  
  112. c     Minimal angle finding
  113.       real function find_min_angle()
  114.       implicit none
  115.  
  116.       common / input / a, b, alpha
  117.       common / utility / PI, beta
  118.  
  119.       real a, b, alpha
  120.       real PI, beta, gamma
  121.  
  122.       beta = asin(b/a * sin(alpha * PI/180)) * 180/PI
  123.       gamma = 180 - alpha - beta
  124.  
  125.       if (alpha .LE. beta .AND. alpha .LE. gamma) then
  126.          find_min_angle = alpha  
  127.       elseif (beta .LE. alpha .AND. beta .LE. gamma) then
  128.          find_min_angle = beta
  129.       else
  130.          find_min_angle = gamma
  131.       endif
  132.  
  133.       return
  134.       end
  135.      
  136. c     Calculate cosin of minimal angle
  137.       real function min_angle_cos()
  138.       implicit none
  139.  
  140.       common / input / a, b, alpha
  141.       common / utility / PI, beta
  142.  
  143.       real a, b, alpha
  144.       real PI, beta, find_min_angle
  145.  
  146.       min_angle_cos = cos(find_min_angle() * PI/180)
  147.       end
  148.  
  149. c     Delete
  150.       subroutine write_triangle
  151.  
  152.       common / input / a, b, alpha
  153.       common / utility / PI, beta
  154.  
  155.       real a, b, alpha
  156.       real PI, beta
  157.  
  158.       print *, 'a = ', a
  159.       print *, 'b = ', b
  160.       print *, 'alpha = ', alpha
  161.  
  162.       end
  163. c     Delete
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement