Форум программистов, компьютерный форум, киберфорум
Наши страницы

Fortran

Войти
Регистрация
Восстановить пароль
 
Aleksandr_12
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 24
#1

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

08.02.2018, 19:45. Просмотров 421. Ответов 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 (Fortran):

Работа с операторами Function и Subroutine - Fortran
Написать программу 2умя способами через обе функции по очереди: Подпрограмма: Найти количество неотрицательных элементов двумерного...

Составить программу с использованием function - Delphi
вот сама уже составленная программа, только нужно вписать функцию program op; var a,b:array of Real; i,n,m,c:Integer; ind:array...

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

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

Для каждого из вариантов требуется составить программу вычисления значения функции под программы типа function. - Turbo Pascal
Для каждого из вариантов требуется составить программу вычисления значения функции подпрограммы типа function.даны вещественные x,y,z....

Написать программу, которая решает задачу с применением подпрограммы типа function - C++
Помогите решить задачу z=\sum_{i=1}^{40}*sin({x}_{i})+\sum_{i=1}^{50}*cos{y}_{i} Масивы Х(40),У(50) вывести в общепринятом виде. ...

11
Krasme
2775 / 2417 / 819
Регистрация: 02.02.2014
Сообщений: 6,667
08.02.2018, 19:59 #2
задача простая
сделайте самостоятельные попытки, в случае неудачи мы поможем исправить ошибки
0
Aleksandr_12
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 24
08.02.2018, 21:30  [ТС] #3
Я только начал изучать Фортран и нахожу задачи,которые интресно посмотреть как решаются.Поэтому хочу увидеть как решаются "стандартные" задачи такого типа,а потом самому пробывать делать.
0
Krasme
2775 / 2417 / 819
Регистрация: 02.02.2014
Сообщений: 6,667
08.02.2018, 21:38 #4
тогда начните с книг, они с примерами
рекомендую Артёмов И.Л. "Fortran Основы программирования"
0
Aleksandr_12
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 24
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
2775 / 2417 / 819
Регистрация: 02.02.2014
Сообщений: 6,667
09.02.2018, 22:26 #6
вы свой код запускали в IDE?
программа считается?
нет? какие ошибки она выдает?
0
Aleksandr_12
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 24
09.02.2018, 23:20  [ТС] #7
У меня Фортран не запускается,какая-то ошибка и сразу закрывается.Так что у меня нету возможности проверить свои ошибки
0
Krasme
2775 / 2417 / 819
Регистрация: 02.02.2014
Сообщений: 6,667
09.02.2018, 23:23 #8
а как же программы будете свои писать? научиться можно только практикой..
0
WH
786 / 206 / 33
Регистрация: 10.09.2013
Сообщений: 801
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
786 / 206 / 33
Регистрация: 10.09.2013
Сообщений: 801
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
Модератор
23500 / 11608 / 1894
Регистрация: 12.02.2012
Сообщений: 18,949
17.02.2018, 06:00 #11
Цитата Сообщение от Aleksandr_12 Посмотреть сообщение
Кто может помочь и исправить что не правильно?
- тут неправильно (пишется слитно) написано слово "вычИсление"
0
WH
786 / 206 / 33
Регистрация: 10.09.2013
Сообщений: 801
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 - Pascal ABC
Здравствуйте. Кто может - помогите с программой. Само задание ниже. m=\frac{e^{x+a\cdot b}+e^{a\cdot x}}{\sqrt{a\cdot b}} ...

перестроить программу из простого типа в программу с использованием процедур и функций - Delphi
unit Unit1; uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type ...

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

Сложности со структурами. Переделать программу с использованием типа - структура. - C++
Всем привет, очень прошу помочь переделать готовую программу написанную на Паскале в С++ с использованием типа- структура. Код: ...


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

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

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