回 帖 发 新 帖 刷新版面

主题:本人非常小白,求帮助

题目为求两整数之间所有完全平方数,然后写入一个文本文件。
题目注明要先做一个逻辑方程判定一个数是否为完全平方数,然后用这个方程判定两整数直接所有完全平方数,求高手看下下面有什么问题,还有如何计算写入文本文件的数据总个数?新手求指导啊。
program question_1
implicit none
integer::x,y,n
real::m
LOGICAL::IS_SQUARE
write(*,*) "please input the smaller integer:"
read(*,*) x
write(*,*) "please input the larger integer:"
read(*,*) y
OPEN(UNIT=12, FILE="squares.txt",STATUS = "new")
do  n=x,y
m=sqrt( n*(1.0) )
if ( IS_SQUARE==.true.) then
write(12,"(/I)") n
end if
end do
close(12)
pause
end program question_1
LOGICAL FUNCTION IS_SQUARE(m)
IMPLICIT NONE
real,INTENT(IN) ::m
if (abs(m-nint(m))<0.001) then
IS_SQUARE=.true.
else
IS_SQUARE=.false.
end if
END FUNCTION IS_SQUARE

回复列表 (共2个回复)

沙发

好了,解决了~
program question_1
implicit none
integer::x,y,n,p=0
real::m
LOGICAL::IS_SQUARE
write(*,*) "please input the smaller integer:"
read(*,*) x
write(*,*) "please input the larger integer:"
read(*,*) y
OPEN(UNIT=12, FILE="squares.txt",STATUS = "unknown")
do  n=x,y

if ( IS_SQUARE(m,n)==.true.) then
write(*,*)n
write(12,"(I)") n
p=p+1
end if
end do
write(12,"(A,I)") "the number of the squirt number is :", p
write(*,*) "the number of the squirt number is :", p
close(12)
pause
end program question_1

LOGICAL FUNCTION IS_SQUARE(m,n)
IMPLICIT NONE
real::m
integer,INTENT(IN) ::n
m=sqrt( n*(1.0) )
if (abs(m-nint(m))<0.001) then 
IS_SQUARE=.true.
else 
IS_SQUARE=.false.
end if
END FUNCTION IS_SQUARE
不太懂为什么,不过总算是勉强能用了

板凳

Function 通常不叫方程,叫 “函数”

手工作了轻微的优化,未上机调试(也没有装FORTRAN)

Program Question_1
  Implicit None
  Integer::Imin,Imax,I,Np=0
  Logical::Is_Square
  Write(*,*) "Please enter the Lower-End Integer:"
  Read(*,*) Imin
  Write(*,*) "Please enter the High-End Integer:"
  Read(*,*) Imax
  Open(Unit=12, File="Squares.Txt",Status = "Unknown")
  !
  Do I=Imin,Imax
    If (Is_Square(I)) Then
      Write(*,*)I
      Write(12,*) I
      Np=Np+1
    End If
  End Do
  Write(12,*) "The Number of the Squirt Number is :", Np
  Write(*,*) "The Number of the Squirt Number is :", Np
  Close(12)
  Pause
End Program Question_1
  
Logical Function Is_Square(N)
  Implicit None
  Real::M
  Integer,Intent(In) ::N
  M=Sqrt(N*1.0)
  Is_Square=(Abs(M-Nint(M))<0.0001)
End Function Is_Square

我来回复

您尚未登录,请登录后再回复。点此登录或注册