С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Fortran
Войти
Регистрация
Восстановить пароль
 
Aleksandr_12
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 27
1

Составить программу с использованием подпрограмы типа Function , SUBROUTINE

08.02.2018, 19:45. Просмотров 456. Ответов 11
Метки нет (Все метки)

Вычеслить площадь триугольника по формуле Герона для определения площади пятиугольника с вершинами A(x_1;y_1),B(x_2;y_2),C(x_3;y_3),D(x_4;y_4),E(x_5;y_5)
Есть исходные данные: A(-2,-3) B(1,4) C(4,5) D(7,7)
x_n,y_n это нижний индекс
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2018, 19:45
Ответы с готовыми решениями:

Работа с операторами Function и Subroutine
Написать программу 2умя способами через обе функции по очереди: Подпрограмма:...

Составить программу с использованием function
вот сама уже составленная программа, только нужно вписать функцию program op;...

Составить программу, максимально используя для вычисления заданных выражений, подпрограммы типа FUNCTION
Никак не могу разобраться.. Помогите, пожалуйста :help: type Tmas...

Составить программу максимально используя для вычисления заданых выражений подпрограммы типа Function
Составить программу максимально используя для вычисления заданых выражений...

Составить программу, максимально используя для вычисления заданных выражений, подпрограммы типа FUNCTION

11
Krasme
3437 / 2742 / 980
Регистрация: 02.02.2014
Сообщений: 7,516
08.02.2018, 19:59 2
задача простая
сделайте самостоятельные попытки, в случае неудачи мы поможем исправить ошибки
0
Aleksandr_12
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 27
08.02.2018, 21:30  [ТС] 3
Я только начал изучать Фортран и нахожу задачи,которые интресно посмотреть как решаются.Поэтому хочу увидеть как решаются "стандартные" задачи такого типа,а потом самому пробывать делать.
0
Krasme
3437 / 2742 / 980
Регистрация: 02.02.2014
Сообщений: 7,516
08.02.2018, 21:38 4
тогда начните с книг, они с примерами
рекомендую Артёмов И.Л. "Fortran Основы программирования"
0
Aleksandr_12
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 27
09.02.2018, 21:45  [ТС] 5
Program P_1

Добавлено через 15 минут
Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Program P_1
! Вычесление длин сторон
Real A(x_a,y_a), B(x_b,y_b)
E=0
E=SQRT((x_b-x_a)**2+(y_b-y_a)**2)
Write *,'E=',E'
Write *,'Rezultat'
end
 
!---------------------------
 
Continues 
! Вычесление площади по формуле Герона
Real a,b,c,d,e
p=(a+b+c+d+e)/2
S=SQRT(p*(p-a)*(p-b)*(p-c)*(p-d)*(p-e)
Write *,'S=',S'
Write *,'Rezultat'
end
Ну а затем нужно будет написать саму программу?
Кто может помочь и исправить что не правильно?
0
Krasme
3437 / 2742 / 980
Регистрация: 02.02.2014
Сообщений: 7,516
09.02.2018, 22:26 6
вы свой код запускали в IDE?
программа считается?
нет? какие ошибки она выдает?
0
Aleksandr_12
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 27
09.02.2018, 23:20  [ТС] 7
У меня Фортран не запускается,какая-то ошибка и сразу закрывается.Так что у меня нету возможности проверить свои ошибки
0
Krasme
3437 / 2742 / 980
Регистрация: 02.02.2014
Сообщений: 7,516
09.02.2018, 23:23 8
а как же программы будете свои писать? научиться можно только практикой..
0
WH
860 / 275 / 47
Регистрация: 10.09.2013
Сообщений: 1,091
Записей в блоге: 1
10.02.2018, 18:20 9
Aleksandr_12, Вам правильно говорят. А что у Вас не запускатся? Не попробовав самостоятельно трудно будет написать что-либо. Попробуйте поставить Force 2.0.9 + GNU Fortran (GFortran), если вы в винде, если в линуксе, то там все еще проще, gfortran и какая-нибдь IDE ставится из реп.

Но как умею попробую подсказать, насколько сам знаю. Простейшие примеры, с использованием функции и подпрограммы. В вашем случае координаты точек удобно представить в виде комплексных чисел.

Пример с процедурой-функцией
Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
program calling_func
implicit none
 
complex :: a, b, c
real:: l1, l2, l3, S
 
a=(0,0); b= (10,0); c=(5,10)
 
    !Вычисляем длины сторон тругольника
    l1= abs (a-b);  l2= abs (a-c)   !Если пишм операторы в строчку, то разделяем их точкой с запятой
    l3= abs (b-c)                   !А если по одному, то точка с запятой не нужна
    
    !Вызываем функцию расчета поиска площади
    S=geron (l1, l2, l3) !Здесь собщаем подпрограмме-функции фактические пременные
 
write (*,*) "Площадь треугольника = ", S
 
contains  
 
!Подпрограмму-функцию выделяем словом contains
!Подпрограмма-фунция в отличие от "полноценной" подпрограммы может вернуть только одно значение, например в нашем случае площадь
    
    function geron (x, y, z)
    implicit none
    real :: x, y, z, p, geron !Внутри подпрограммы "работают" формальные переменные
        p=(x+y+z)/2
        geron=sqrt(p*(p-x)*(p-y)*(p-z))
    end function geron
 
end
Пример с процедурой-подпрограммой

Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
program calling_func
implicit none
 
complex :: a, b, c
real:: l1, l2, l3, S
 
a=(0,0); b= (10,0); c=(5,10)
 
    !Вычисляем длины сторон тругольника
    l1= abs (a-b)
    l2= abs (a-c)
    l3= abs (b-c)
    
    !Вызываем подпрограмму
    call geron (l1, l2, l3, S)
 
write (*,*) "Площадь треугольника = ", S
 
end
 
!Подпрогамму удобно писать как самостоятельную едницу (после end основной программы)
!В этом случае не обязателен оператор contains
 
    subroutine geron (x, y, z, Streug)
    implicit none
    real, intent (in) :: x,y,z      !intent (in) означает что параметры не могут быть изменены подпрограммой, они исключительно входные
    real, intent (out) :: Streug    !intent (out) это выходной изменяемый апараметр, он в данном случае вычисляется и идет на выход подпрограммы
    real :: p                       !Здесь все равно, это внутренний параметр подпрограммы
        p=(x+y+z)/2
        Streug=sqrt(p*(p-x)*(p-y)*(p-z))
    end subroutine geron

В подпрограмме, при объявлении парамтров, используются записи intent (in) и intent (out). Это не обязательно, можно было просто записать:

Fortran
1
real :: x, y, z, p, Streug
это проще и работало бы так же, но лучше явно задавать свойства, это позволяет избегать ошибок в более сложных программах.
Только, если Вам интересно конечно, поизучайте самостоятельно по поводу формальных и фактических аргументов.

Добавлено через 3 часа 36 минут
А так подпрограмму можно разместить в модуле. В результате, к примеру, можно сделать отдельный файл модуля.

Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
module nash_modul
implicit none
 
public
contains
 
    subroutine geron (x, y, z, Streug)
    real, intent (in) :: x,y,z      
    real, intent (out) :: Streug    
    real :: p                       
        p=(x+y+z)/2
        Streug=sqrt(p*(p-x)*(p-y)*(p-z))
    end subroutine geron
end 
 
program calling_mod !Это главная программа
use nash_modul !Объявляем используемый модуль
implicit none
 
complex :: a, b, c
real:: l1, l2, l3, S
 
a=(0,0); b= (10,0); c=(5,10)
 
    l1= abs (a-b)
    l2= abs (a-c)
    l3= abs (b-c)
    
    call geron (l1, l2, l3, S)
 
write (*,*) "Площадь треугольника = ", S
end
0
WH
860 / 275 / 47
Регистрация: 10.09.2013
Сообщений: 1,091
Записей в блоге: 1
17.02.2018, 03:00 10
Интересно самому стало, и в связи с этим небольшое дополнение. Если нужно обеспечить скрытность данных внутри модуля (хотя лучше это делать всегда), нужно дать переменным, используемым внутри, атрибуты приватности.

Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
module nash_modul
implicit none
 
public :: geron !Здесь сообщаем, что подпрограмма "geron" модуля доступна основной программе
real, private :: Streug, x, y, z, p !А здесь закрываем все переменные только для внутреннего использования
 
contains
 
    subroutine geron (x, y, z, Streug)
    real :: x,y,z      
    real :: Streug   
    real :: p                     
       p=(x+y+z)/2
       Streug=sqrt(p*(p-x)*(p-y)*(p-z))
    end subroutine geron
end module
0
Catstail
Модератор
23892 / 11936 / 2108
Регистрация: 12.02.2012
Сообщений: 19,405
17.02.2018, 06:00 11
Цитата Сообщение от Aleksandr_12 Посмотреть сообщение
Кто может помочь и исправить что не правильно?
- тут неправильно (пишется слитно) написано слово "вычИсление"
0
WH
860 / 275 / 47
Регистрация: 10.09.2013
Сообщений: 1,091
Записей в блоге: 1
04.04.2018, 17:23 12
А можно сделать и в объекто-ориентированном стиле. Хотя не уверен, что все сделал правильно, но код компилируется и работает.
Пока не знаю для чего это в данном конкретном случае и свойства ООП здесь применять вроде бы негде, однако простейший пример стало сделать интересно.
Здесь мы работаем целиком с объектами типа треугольник. Вероятно в более сложных задачах манипулирование объектами вполне может пригодится.

Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
module oop_treug
 
public :: Treug, method_sq, method_print                !Делаем публичными класс и его методы
private                                                 !Делаем "внутренности" класса приватными
 
    type :: Treug                                       !Создаем класс треугольник
    complex :: a, b, c                                  !это его свойства, координаты
    real :: rez                                         !и его площадь, которую мы посчитаем
        
contains                                                !Объявляем методы
    procedure :: method_sq => method_sq                 !Метод вычисления площади
    procedure :: method2 => method_print                !Метод печати   
    end type Treug
 
contains
    subroutine method_sq (this)                         !Реализация метода вычисления площади
    class (Treug) :: this
    real :: x, y, z, p
        x = abs (this%a - this%b)
        y = abs (this%a - this%c)
        z = abs (this%b - this%c)
        p = (x + y + z) / 2 
        this%rez = sqrt (p * (p-x) * (p-y) * (p-z))
    end subroutine method_sq
 
    subroutine method_print (this)                      !Реализациям метода печати
    class (Treug) :: this
    print*,
    print*, "Координата -а- треугольника: ", this % a
    print*, "Координата -b- треугольника: ", this % b
    print*, "Координата -с- треугольника: ", this % c
    print*, "Площадь треугольника = ", this % rez
    end subroutine method_print
 
end module oop_treug
 
 
program main                                            !Главная программа
use oop_treug                                           !Подключаем модуль
 
    type (Treug) :: treugolnik_1                        !Создадим объект, треугольник - 1
    type (Treug) :: treugolnik_2                        !Создадим объект, треугольник - 2
    
    treugolnik_1 = Treug ((-2,2),(2,4),(3,-3), sq)      !Сконструируем их (зададим координаты)
    treugolnik_2 = Treug ((0,0),(10,0),(5,10), sq)      !"sq" (площадь) пока не знаем, она будет вычислена вызовом метода
 
    call method_sq (treugolnik_1)                       !Вызываем метод класса подсчета площади для 1-го объекта
    call method_sq (treugolnik_2)                       !Вызываем метод класса подсчета площади для 2-го объекта
    
    call method_print (treugolnik_1)                    !Печатаем координаты и площади через метод класса "method_print"
    call method_print (treugolnik_2)
 
end program main
0
04.04.2018, 17:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2018, 17:23

Для каждого из вариантов требуется составить программу вычисления значения функции под программы типа function.
Для каждого из вариантов требуется составить программу вычисления значения...

Написать программу, которая решает задачу с применением подпрограммы типа function
Помогите решить задачу ...

Составить программу, используя подпрограмму FUNCTION
Здравствуйте. Кто может - помогите с программой. Само задание ниже. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru