|
沙发

楼主 |
发表于 2018-11-19 14:26:28
|
只看该作者
本帖最后由 weixing1531 于 2018-11-19 14:30 编辑
源代码如下
[Fortran] 纯文本查看 复制代码 005 | type , public :: rational |
013 | procedure , pass ( this ) :: rat__rat_plus_rat , rat__int_plus_rat , rat__rat_plus_int |
014 | generic , public :: operator ( + ) = > rat__rat_plus_rat , rat__int_plus_rat , rat__rat_plus_int |
016 | procedure , pass ( this ) :: rat__rat_minus_rat , rat__int_minus_rat , rat__rat_minus_int |
017 | generic , public :: operator ( - ) = > rat__rat_minus_rat , rat__int_minus_rat , rat__rat_minus_int |
019 | procedure , pass ( this ) :: rat__rat_times_rat , rat__int_times_rat , rat__rat_times_int |
020 | generic , public :: operator ( * ) = > rat__rat_times_rat , rat__int_times_rat , rat__rat_times_int |
022 | procedure , pass ( this ) :: rat__rat_div_rat , rat__int_div_rat , rat__rat_div_int |
023 | generic , public :: operator ( / ) = > rat__rat_div_rat , rat__int_div_rat , rat__rat_div_int |
025 | procedure , pass ( this ) :: rat__rat_exp_int |
026 | generic , public :: operator ( * * ) = > rat__rat_exp_int |
028 | procedure , pass ( this ) :: rat_eq_rat , int_eq_rat , real_eq_rat , rat_eq_int |
029 | generic , public :: assignment ( = ) = > rat_eq_rat , int_eq_rat , real_eq_rat , rat_eq_int |
031 | procedure , pass ( this ) :: rat_gt_rat , int_gt_rat , rat_gt_int |
032 | generic , public :: operator ( > ) = > rat_gt_rat , int_gt_rat , rat_gt_int |
034 | procedure , pass ( this ) :: rat_lt_rat , int_lt_rat , rat_lt_int |
035 | generic , public :: operator ( < ) = > rat_lt_rat , int_lt_rat , rat_lt_int |
037 | procedure , pass ( this ) :: rat_compare_rat , int_compare_rat , rat_compare_int |
038 | generic , public :: operator ( == ) = > rat_compare_rat , int_compare_rat , rat_compare_int |
040 | procedure , pass ( this ) :: rat_ne_rat , int_ne_rat , rat_ne_int |
041 | generic , public :: operator ( /= ) = > rat_ne_rat , int_ne_rat , rat_ne_int |
043 | procedure , pass ( this ) :: rat_ge_rat , int_ge_rat , rat_ge_int |
044 | generic , public :: operator ( >= ) = > rat_ge_rat , int_ge_rat , rat_ge_int |
046 | procedure , pass ( this ) :: rat_le_rat , int_le_rat , rat_le_int |
047 | generic , public :: operator ( <= ) = > rat_le_rat , int_le_rat , rat_le_int |
049 | procedure , pass ( this ) , public :: output , input , set |
053 | function rat_gt_rat ( this , b ) |
054 | logical :: rat_gt_rat |
055 | class ( rational ) , intent ( in ) :: this , b |
067 | end function rat_gt_rat |
069 | function int_gt_rat ( a , this ) |
070 | logical :: int_gt_rat |
071 | integer , intent ( in ) :: a |
072 | class ( rational ) , intent ( in ) :: this |
084 | end function int_gt_rat |
086 | function rat_gt_int ( this , b ) |
087 | logical :: rat_gt_int |
088 | class ( rational ) , intent ( in ) :: this |
089 | integer , intent ( in ) :: b |
101 | end function rat_gt_int |
103 | function rat_lt_rat ( this , b ) |
104 | logical :: rat_lt_rat |
105 | class ( rational ) , intent ( in ) :: this , b |
107 | rat_lt_rat = rat_gt_rat ( b , this ) |
110 | end function rat_lt_rat |
112 | function int_lt_rat ( a , this ) |
113 | logical :: int_lt_rat |
114 | integer , intent ( in ) :: a |
115 | class ( rational ) , intent ( in ) :: this |
117 | int_lt_rat = rat_gt_int ( this , a ) |
120 | end function int_lt_rat |
122 | function rat_lt_int ( this , b ) |
123 | logical :: rat_lt_int |
124 | class ( rational ) , intent ( in ) :: this |
125 | integer , intent ( in ) :: b |
127 | rat_lt_int = int_gt_rat ( b , this ) |
130 | end function rat_lt_int |
132 | function rat_compare_rat ( this , b ) |
133 | logical :: rat_compare_rat |
134 | class ( rational ) , intent ( in ) :: this , b |
139 | if ( c % num == 0 ) then |
140 | rat_compare_rat = .true. |
142 | rat_compare_rat = .false. |
146 | end function rat_compare_rat |
148 | function int_compare_rat ( a , this ) |
149 | logical :: int_compare_rat |
150 | integer , intent ( in ) :: a |
151 | class ( rational ) , intent ( in ) :: this |
153 | int_compare_rat = rat_compare_int ( this , a ) |
156 | end function int_compare_rat |
158 | function rat_compare_int ( this , b ) |
159 | logical :: rat_compare_int |
160 | class ( rational ) , intent ( in ) :: this |
161 | integer , intent ( in ) :: b |
166 | if ( c % num == 0 ) then |
167 | rat_compare_int = .true. |
169 | rat_compare_int = .false. |
173 | end function rat_compare_int |
175 | function rat_ne_rat ( this , b ) |
176 | logical :: rat_ne_rat |
177 | class ( rational ) , intent ( in ) :: this , b |
179 | rat_ne_rat = .not. rat_compare_rat ( this , b ) |
182 | end function rat_ne_rat |
184 | function int_ne_rat ( a , this ) |
185 | logical :: int_ne_rat |
186 | integer , intent ( in ) :: a |
187 | class ( rational ) , intent ( in ) :: this |
189 | int_ne_rat = .not. int_compare_rat ( a , this ) |
192 | end function int_ne_rat |
194 | function rat_ne_int ( this , b ) |
195 | logical :: rat_ne_int |
196 | class ( rational ) , intent ( in ) :: this |
197 | integer , intent ( in ) :: b |
199 | rat_ne_int = .not. rat_compare_int ( this , b ) |
202 | end function rat_ne_int |
204 | function rat_ge_rat ( this , b ) |
205 | logical :: rat_ge_rat |
206 | class ( rational ) , intent ( in ) :: this , b |
208 | rat_ge_rat = rat_gt_rat ( this , b ) .or. rat_compare_rat ( this , b ) |
211 | end function rat_ge_rat |
213 | function int_ge_rat ( a , this ) |
214 | logical :: int_ge_rat |
215 | integer , intent ( in ) :: a |
216 | class ( rational ) , intent ( in ) :: this |
218 | int_ge_rat = int_gt_rat ( a , this ) .or. int_compare_rat ( a , this ) |
221 | end function int_ge_rat |
223 | function rat_ge_int ( this , b ) |
224 | logical :: rat_ge_int |
225 | class ( rational ) , intent ( in ) :: this |
226 | integer , intent ( in ) :: b |
228 | rat_ge_int = rat_gt_int ( this , b ) .or. rat_compare_int ( this , b ) |
231 | end function rat_ge_int |
233 | function rat_le_rat ( this , b ) |
234 | logical :: rat_le_rat |
235 | class ( rational ) , intent ( in ) :: this , b |
237 | rat_le_rat = rat_ge_rat ( b , this ) |
240 | end function rat_le_rat |
242 | function int_le_rat ( a , this ) |
243 | logical :: int_le_rat |
244 | integer , intent ( in ) :: a |
245 | class ( rational ) , intent ( in ) :: this |
247 | int_le_rat = rat_ge_int ( this , a ) |
250 | end function int_le_rat |
252 | function rat_le_int ( this , b ) |
253 | logical :: rat_le_int |
254 | class ( rational ) , intent ( in ) :: this |
255 | integer , intent ( in ) :: b |
257 | rat_le_int = int_ge_rat ( b , this ) |
260 | end function rat_le_int |
262 | subroutine rat_eq_rat ( rat 1 , this ) |
263 | class ( rational ) , intent ( out ) :: rat 1 |
264 | class ( rational ) , intent ( in ) :: this |
267 | rat 1 % denom = this % denom |
270 | end subroutine rat_eq_rat |
272 | subroutine int_eq_rat ( int , this ) |
273 | integer , intent ( out ) :: int |
274 | class ( rational ) , intent ( in ) :: this |
276 | int = this % num / this % denom |
279 | end subroutine int_eq_rat |
281 | subroutine rat_eq_int ( this , int ) |
282 | integer , intent ( in ) :: int |
283 | class ( rational ) , intent ( out ) :: this |
289 | end subroutine rat_eq_int |
291 | subroutine real_eq_rat ( float , this ) |
292 | real , intent ( out ) :: float |
293 | class ( rational ) , intent ( in ) :: this |
295 | float = real ( this % num ) / real ( this % denom ) |
298 | end subroutine real_eq_rat |
|
|