Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы программирования на FORTRAN (ФОРТРАН)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

bubanoid



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Модуль:

Код:
module mod
implicit none
 
real(8), parameter :: Pi = 3.1415926535897932384d0
contains
 
abstract interface
      real(8) function func(x)
         real(8), intent (in) :: x
      end function func
end interface
 
real(8) function f1(x)
   real(8), intent (in) :: x
   f1 = dsin(x)
end function f1
 
real(8) function f2(x)
   real(8), intent (in) :: x
   f2 = dcos(x)
end function f2
 
procedure (func), pointer :: f_ptr => null()
! Вместо последней строки достаточно писать
! procedure (f1), pointer :: f_ptr => null()
! в таком случае можно обойтись без определения абстрактного интерфейса func(x).
 
real(8) function f0(x)
   real(8), intent (in) :: x
   f0 = dexp(-x**2)*f_ptr(x)
end function f
 
real(8) function integration(f, x1, x2)
   real(8), intent (in) :: x1, x2
   real(8), external :: f
   real(8) d, s
   integer i
   integer, parameter :: n = 100000
   d = (x2 - x1)/dfloat(n)
   s = 0.0d0
   do i = 1, n
     s = s + f(x1 + d*dfloat(i) - d*0.5d0)
   enddo
   integration = s*d
end function integration
 
end module mod

Программа:

Код:
!  использован стандарт Fortran 2003 (см ст. 7 из ftp://ftp.nag.co.uk/sc22wg5/N1551-N1600/N1579.pdf )
!  за основу взят пример из http://stackoverflow.com/questions/8612466/how-to-alias-a-function-name-in-fortran
 
program Fortran_2003
use mod
implicit none
 
real(8) x1, x2
 
x1=-Pi
x2=Pi
 
f_ptr => f1
z=integration(f0, x1, x2)
write (*, '("z = ", ES14.4 )') z
 
f_ptr => f2
z=integration(f0, x1, x2)
write (*, '("z = ", ES14.4 )') z    
 
pause
end program Fortran_2003


Всего записей: 101 | Зарегистр. 22-11-2007 | Отправлено: 21:33 10-12-2012 | Исправлено: bubanoid, 22:06 11-12-2012
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы программирования на FORTRAN (ФОРТРАН)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru