У меня проблемы с тем, что PHP не возвращает операторы печати из Fortran. Идея состоит в том, что PHP выполняет команду для компиляции файла Fortran, а затем запускает его.
Вас просят ввести число с помощью оператора печати, проблема в том, что в CMD ничего не отображается, но программа работает по назначению - когда я ввожу неправильный номер, она ждет, пока я введу правильный номер, а затем завершает выполнение.
Как получить командную строку для печати операторов, вложенных в файл Fortran?
PHP-скрипт
$<?php
// This is a script to test interoperability between Fortran and PHP
$ExecutionStringOne = "gfortran C:\Users\****\Desktop\Programs\Fortran_Programs\FibSequence.f95 -o C:\Users\****\Desktop\Programs\Fortran_Programs\FibSequenceTest";
$ExecutionStringTwo = "C:\Users\*****\Desktop\Programs\Fortran_Programs\FibSequenceTest.exe";
exec ($ExecutionStringOne);
exec ($ExecutionStringTwo);
?>
Код Фортрана:
! This program will calculate the first 7 numbers in the Fibonacci sequence with user input as well as error checking
Program FibSequence
implicit none
! Defining our global variables
Integer :: acceptValue, n_terms ! Accept Value: 0, 1 - This tracks whether input is correct (0 False, 1 True) , N_terms: Number of terms
real :: timeForSubRoutineStart, timeForSubRoutineEnd, totalTime ! Tracks execution time of subroutine
write(*,*) "Please input an amount of terms to calculate sequentially to - This number can be between 1 and 7"
read *, n_terms
if (n_terms > 0 .AND. n_terms <= 7) then
acceptValue = 1 ! This is true therefore run program (This isnt really needed but for consistency)
Call calculateSequence(n_terms)
else
acceptValue = 0 ! This is false therefore run the read again and keep doing so until the output is correct
do while ( acceptValue == 0 )
write(*,*) "Invalid number please enter one within the given range - Range ( 1 - 7 )"
read *, n_terms
if (n_terms > 0 .AND. n_terms <= 7) then
acceptValue = 1 !Yay correct input
Call calculateSequence(n_terms)
else
write(*,*) "Invalid number, try again" !Boo invalid input
end if
end do
end if
End Program
Subroutine calculateSequence(NumberOfTerms)
Integer :: pt1 = 0, pt2 = 1
Integer :: pt3
Call CPU_TIME(timeForSubRoutineStart)
i = NumberOfTerms
do while (i > 0)
pt3 = pt1
pt1 = pt1 + pt2
pt2 = pt3
i = i-1
write(*,*) "Point A Equals", pt1, "Point B Equals", pt2, "Calculated Next Number", pt3
write(*,*) "Current Term = ", i
write(*,*) "This program calculated this many points ", NumberOfTerms
write(*,*) "End"
end do
Call CPU_TIME(timeForSubRoutineEnd)
totalTime = timeEnd - timeBegin
write(*,*) "This program took ", totalTime, " seconds to execute"
end Subroutine calculateSequence
EDIT — добавлено новое изображение, касающееся проблемы @roygvib Предлагается ECHO, которое теперь возвращает некоторые операторы печати
Integer :: pt1 = 0, pt2 = 1
) предназначена для инициализацииpt1
иpt2
при каждом вызовеcalculateSequence()
(как в C или подобных языках)? - person roygvib   schedule 27.06.2020echo
передexec()
или добавить выходной аргумент вexec()
? (У меня нет опыта работы с PHP, поэтому просто догадываюсь...) - person roygvib   schedule 27.06.2020echo
, чтобы посмотреть, решит ли это довольно привередливую проблему, лол. Чтобы решить вопрос с целым числом, подпрограмма работает по назначению. Я отлаживал, думая о том, что происходит, чего нельзя увидеть в окне терминала. При добавлении неправильных чисел Все, что меньше 0 и больше 7, программа перейдет на новую строку, указывающую, что программа пытается выполнитьread*, n_terms
еще раз, и это можно проверить, посмотрев наMain()
программы, которую она никогда не выполнит подпрограмму, пока не будет введен правильный номер, и затем завершит работу. - person HRD1997BFBE   schedule 28.06.2020