Как правильно использовать модули в программе на Фортране?

Я построил калькулятор скорости, расстояния и времени. Я подумал, что было бы здорово, если бы вы могли вернуться в главное меню и рассчитать время после первоначального расчета (в качестве примера). Как бы я сделал это, используя модули? Вот модули, которые я создал:

module menu
  real :: s ! speed
  real :: d ! distance
  real :: t ! time
  real :: gg ! this is how I am going to switch between distance, time, and speed

  print *, 'Press 1 for speed, 2 for distance, and 3 for time'
  read*, gg
end menu

module speed
  print *, 'Input distance in metres'
  read *, d 
  print *, 'Input time in seconds'
  read *, t 
  s = d / t
  print *, 'Speed is ', s
end speed

module stay or leave
  print *, 'Press 4 to go back to menu, or press 5 to exit the console'
  read *, gg
end stay or leave

module distance
  print *, 'Input speed in metres per second'
  read *, s
  print *, 'Input time in seconds'
  read *, t 
  d = s * t
  print*, 'Distance is ', d
end distance

module time
  print *, 'Input distance in metres'
  read *, d
  print *, 'Input speed in metres per second'
  read *, s 
  t = d / s
  print*, 'Time is ', s 
end time
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
2
0
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы используете module как подпрограмму. Модуль представляет собой набор связанных подпрограмм, типов пользователей и других связанных данных. В этом примере нет необходимости использовать модули (по крайней мере, не так, как показано выше).

Но если вы было используете модули, я включил пример ниже. Определение модуля содержит следующие подпрограммы

  • time_from_distance_and_speed()
  • distance_from_speed_and_time()
  • speed_from_time_and_distance()

и три общие переменные t, d, s, используемые в расчетах. Хотя в целом не рекомендуется повторно использовать одни и те же переменные в разных подпрограммах, здесь это сделано в иллюстративных целях, чтобы показать, как «глобальные» переменные могут быть определены на уровне модуля.

Модуль

Здесь модуль содержит определения переменных, которые являются общими для содержащихся в нем процедур. Он также определяет три процесса расчета.

module kinematics
implicit none
real :: t, d, s

contains

subroutine time_from_distance_and_speed()
print *, 'Input distance in metres'
read *, d
print *, 'Input speed in metres per second'
read *, s 
t = d / s
print*, 'Time is ', s 
end subroutine

subroutine distance_from_speed_and_time()
print *, 'Input speed in metres per second'
read *, s
print *, 'Input time in seconds'
read *, t 
d = s * t
print*, 'Distance is ', d
end subroutine

subroutine speed_from_time_and_distance()
print *, 'Input distance in metres'
read *, d 
print *, 'Input time in seconds'
read *, t 
s = d / t
print *, 'Speed is ', s
end subroutine

end module

Программа

Здесь основная программа использует модуль, определенный выше, и вызывает соответствующий метод в зависимости от пользовательского ввода.

program bike
use kinematics
integer :: gg
do while(.true.)
    print *, 'Press 1 for speed, 2 for distance, and 3 for time'
    read*, gg
    if(gg == 1) then
        call speed_from_time_and_distance
    else if(gg == 2) then
        call distance_from_speed_and_time
    else if(gg == 3) then
        call time_from_distance_and_speed
    end if
    print *, 'Press 5 to exit the console, anything else will repeat'
    read *, gg    
    if(gg== 5) then
        exit
    end if
end do

end program

Большое спасибо за помощь! Это будет очень полезно

the_spider_collector 22.04.2022 23:53

Другие вопросы по теме