Primalita' In Fortran 95

M.C.D.1
Ragazzi Ho provato a realizzare in Fortran una funzione esterna alla main che dato un vettore di interi mi restituisce True se il numero di primi e' maggiore di 5 False Altrimenti

Il Codice che ho scritto e' il seguente:


logical function prime(M,dim) result(p)

integer,intent(in) :: dim
integer,dimension(100),intent(in) :: M
integer :: i,j,k
logical :: primo

i=1
j=0

do i =1,dim
  
  primo =.false.
  
  if(M(i) .ge. 2) then
  
  primo =.true.
  k=2

  do while(k .lt. M(i) .and. primo)

  primo = M(i)-(M(i)/k) * k .ne. 0

  k=k+1
  end do
end if
  
	if(primo)then
     j=j+1
    end if
   
end do

p = j .gt. 5

end function

program Prime_Vector

Integer, dimension(100) :: C
integer :: n,i


write(*,*) "inserisci dimensione vettore"
read(*,*) n

if(n .gt. 0 .and. n. le. 100) then
  
do i=1,n
  read(*,*) C(i)
end do

write(*,*) prime(C,n)

 
end if
  end program


Tuttavia mi genera un errore alla riga seguente


write(*,*) prime(C,n)


l'errore e': Attempt to call a subroutine as if it were an integer(kind=3) function

Un Aiutino?

Risposte
M.C.D.1
Ragazzi Mea Culpa ^^
non ho dichiarato nel program il tipo della funzione :)
inserendo infatti Logical, External :: prime
tutto torna ^^
E poiche' non avevo inserito IMPLICIT NONE il compilatore non mi ha restituito errore ed ha assegnato alla funzione il tipo di default ovvero REAL ^^

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.