DragorossoV2
25-01-2010, 15:45
Salve a tutti, ho provato a risolvere questo esercizio:
Data una matrice quadrata A di ordine N, calcolare la media degli elementi della diagonale e verificare se la somma degli elementi di ogni colonna è uguale alla media!
Questa è la mia function:
logical function prova2(n,a)
real,dimension(100,100)::a
integer::n
integer::i,j,somma
real::m
do i=1,n
somma=somma+a(i,i)
end do
m=somma/n
prova2=.true.
i=1
do
somma=0
do i=1,n
somma=somma+a(i,j)
end do
if (somma/=m)then
prova2=.false.
End if
i=i+1
if (j==n.or..not.prova2)exit
end do
return
end function
Questo invece é il programma chiamante:
program es1
integer, dimension(100,100)::A
integer::n
integer::i,j
logical::prova21, prova2
Write(*,*)"Inserisci l'ordine della matrice quadrata, n"
Read(*,*) n
Write(*,*)"Inserisci la matrice"
do i=1,n
Read(*,*)(a(i,j),j=1,n)
end do
do i=1,n
write(*,*)(a(i,j),j=1,n)
end do
prova21=prova2(n,a)
write(*,*) prova21
stop
end program
L'errore è che mi esce sempre False,anche quando la somma degli elementi di ogni colonna è uguale alla media!
Data una matrice quadrata A di ordine N, calcolare la media degli elementi della diagonale e verificare se la somma degli elementi di ogni colonna è uguale alla media!
Questa è la mia function:
logical function prova2(n,a)
real,dimension(100,100)::a
integer::n
integer::i,j,somma
real::m
do i=1,n
somma=somma+a(i,i)
end do
m=somma/n
prova2=.true.
i=1
do
somma=0
do i=1,n
somma=somma+a(i,j)
end do
if (somma/=m)then
prova2=.false.
End if
i=i+1
if (j==n.or..not.prova2)exit
end do
return
end function
Questo invece é il programma chiamante:
program es1
integer, dimension(100,100)::A
integer::n
integer::i,j
logical::prova21, prova2
Write(*,*)"Inserisci l'ordine della matrice quadrata, n"
Read(*,*) n
Write(*,*)"Inserisci la matrice"
do i=1,n
Read(*,*)(a(i,j),j=1,n)
end do
do i=1,n
write(*,*)(a(i,j),j=1,n)
end do
prova21=prova2(n,a)
write(*,*) prova21
stop
end program
L'errore è che mi esce sempre False,anche quando la somma degli elementi di ogni colonna è uguale alla media!