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

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

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

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

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

LN2018

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bearjrgm, спасибо. akaGM, я большие программы не пишу (хотя часто пишу по работе, расчетные вещи), geany мне в принципе достаточно, по крайней мере основные нужные мне вещи в нем есть - подсветка, компиляция, поиск и т.п.
 
******
Еще один вопрос, интресный на мой взгляд. Книга "Современный Fortran на практике", автор Арьен Маркус, издание 2015 года на русском языке. К книге приложены коды в виде файлов. Привожу один из них. Код, пример использования абстрактных типов, компилируется gfortran 4.9.2. Есть ли желание поразбираться что к чему? Интересно понять фортрановское ООП. Кто дружит с ООП, можно разобрать подробно?
 
 
 

Код:
 
! abstract_point.f90 -
! Пример использования абстрактных типов
! Пример, принадлежащий «Современному фортрану на практике» Арьена Маркуса
! Эта работа лицензируется в соответствии с лицензией Creative Commons Attribution 3.0 Unported.
! Чтобы просмотреть копию этой лицензии, посетите страницу http://creativecommons.org/licenses/by/3.0/
! или отправить письмо на адрес:
! Фото фонда., 444 Castro Street, Сюита 900, Вид горы, Калифорния, 94041, США.
 
module abstract_points
    implicit none
 
    type, abstract :: abstract_point
        ! Нет координат, оставьте это для расширяющихся типов
    contains
        procedure(add_vector), deferred :: add
    end type abstract_point
 
 
    !Определите, как должен выглядеть именованный интерфейс «add_vector»
 
    abstract interface
        subroutine add_vector( point, vector )
            import abstract_point
            class(abstract_point), intent(inout) :: point
            class(abstract_point), intent(in)    :: vector
        end subroutine add_vector
    end interface
end module abstract_points
 
! points2d --
!     Используйте модуль абстрактных точек для конкретного типа
 
module points2d
    use abstract_points
 
    type, extends(abstract_point) :: point2d
        real :: x, y
    contains
        procedure :: add => add_vector_2d
    end type point2d
contains
 
subroutine add_vector_2d( point, vector )
    class(point2d), intent(inout)        :: point
    class(abstract_point), intent(in)    :: vector
 
    select type (vector)
        class is (point2d)
            point % x = point % x + vector % x
            point % y = point % y + vector % y
    end select
end subroutine add_vector_2d
end module points2d
 
! test_points --
! Использовать абстрактный тип
 
program test_points
    use points2d
 
    class(abstract_point), pointer :: p
    type(point2d), target          :: point
    type(point2d)                  :: vector
 
    point  = point2d(1.0,2.0)
    vector = point2d(0.5,0.5)
 
    p => point
    call p % add( vector )
 
    write(*,*) 'Resulting point:', point
 
end program test_points
 

 

Всего записей: 10 | Зарегистр. 05-02-2018 | Отправлено: 11:29 18-02-2018
Открыть новую тему     Написать ответ в эту тему

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

Компьютерный форум 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