Procedure

Messaggioda galles90 » 16/03/2019, 13:54

Buongiorno,

lo so che il fortran non è un linguaggio molto comune o meglio poco usato, ma spero che qualcuno posso aiutarmi con il mio problema.

In sintesi ho la seguente traccia dove richiede:
Sia dato una matrice A di interi positivi di dimensione nxn. Scrivere una funzione che restituisca true se e solo se nella matrice A: c’è almeno un numero pari in ogni riga.

Vi riporto i codici, in cui il primo senza subroutine, funziona, invece l'algoritmo call-subroutine non va.

Vi chiedo dove sto sbagliando, ci sono errori sulla testata ?? :-)

1.
Codice:
program main
integer:: i,j,n,m,k,x
real:: a(100,100),f
logical:: v,w
v= .true.
w= .false.
print*, "ordine matrice"
read*, n,m
print*, "inserire elementnti"
do i=1,n
   do j=1,m
      read*, a(i,j)
   end do
end do
p=2
k=0
do i=1,n
   j=0
   do
   j=j+1
   f=a(i,j)
      if (mod(f,p)==0) then
      x=1
      else
      x=0
      end if
   if (j==m .or. x==1) exit
   end do
k=k+x
print*, "k" ,k
end do
if (k==n) then
print*, v
else
print*, w
end if
end 


2
call
Codice:
program main
integer:: i,j,n,m,t,ld
real:: b(100,100)
logical:: v,w
v=.true.
w=.false.
print*, "ordine matrice nxm"
read*, n,m
print*, "inserire elementi matrice"
do i=1,n
   do j=1,m
      read*, b(i,j)
   end do
end do
call pari(b,100,100,t)
if (t==n) then
print*, v
else
print*, w
end if
end


subroutine
Codice:
subroutine pari(b,ld,m,u)
integer:: i,j,n,m,ld,k,x,u
real:: b(ld,m),f
P=2
K=0
do i=1,n
   j=0
   do
   j=j+1
   f=b(i,j)
      if (mod(f,p)==0) then
      x=1
      else
      x=0
      end if
   if (j==m .or. x==1) exit
   end do
k=k+x
end do
u=k
return
end


Cordiali saluti.
Avatar utente
galles90
Senior Member
Senior Member
 
Messaggio: 688 di 1796
Iscritto il: 17/10/2016, 17:56
Località: Salerno

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite