Я только начинаю работать с Fortran и пытался написать базовую программу, но получаю массу ошибок, которых не понимаю. Пожалуйста, проверьте следующее. Я ссылался на другие подобные вопросы, но безрезультатно.
program roots
real a,b,c
real disc
real root1,root2
write (*,*) , "Please provide a, b and c"
read (*,*) ,a,b,c
disc = b**2 -4.0*a*c
if disc < 0
print *,"No real roots"
else if disc = 0
print *,"Equal roots"
root1 = -b/2
print *,"root is :" ,root1
else
print *,"2 real roots"
2*root1 = -b + sqrt(b**2 - 4.0*a*c)
2*root2 = -b - sqrt(b**2 - 4.0*a*c)
print *,"root 1 is:" , root1
print *,"root 2 is:" , root2
end roots
ошибки:
Error: Unclassifiable statement at (1)
Error: Unexpected junk after ELSE statement at (1)
Error: Unexpected ELSE statement at (1)
Error: Non-numeric character in statement label at (1)
Error: Non-numeric character in statement label at (1)
Error: Expecting END PROGRAM statement at (1)
В вашем коде было несколько ошибок.
Прежде всего: всегда используйте implicit none
, иначе неопределенные переменные могут иметь неявные типы данных, которые трудно отлаживать.
В вашем блоке if .. end if
было несколько ошибок. Сравните оба кода.
program roots
implicit none
real a,b,c
real disc
real root1,root2
print *, "Please provide a, b and c"
read (*,*) a,b,c
disc = b**2 -4.0*a*c
if (disc < 0) then
print *, "No real roots"
else if (disc == 0) then
print *, "Equal roots"
root1 = -b/2
print *, "root is :", root1
else
print *,"2 real roots"
root1 = (-b + sqrt(b**2 - 4.0*a*c)) / 2
root2 = (-b - sqrt(b**2 - 4.0*a*c)) / 2
print *, "root 1 is:", root1
print *, "root 2 is:", root2
end if
end program