PDA

Visualizza la versione completa : [FORTRAN] Calcolo media elementi della diagonale di una matrice


anna2312
21-01-2010, 18:27
Salve a tutti! ho un problema...
Devo risolvere quest algoritmo
Avendo una matrice A, calcolare la media degli elementi della diagonale e verificare per ogni colonna se la somma degli elementi è uguale alla media!
Io l'ho provato a risolvere in questo modo, ma nn funziona!



integer function colonna(n,a)
integer::n
integer,dimension(100,100)::a
integer::somma,i,media,j

somma=0
do i=1,n
somma=somma+a(i,i)
end do
media=somma/n
j=1
colonna=0
do i=1,n
somma=somma+a(i,j)
do
if (somma/=media.or.j==n)exit
colonna=1
end do
somma=0
j=j+1
end do
return
end function

Grazie mille!

YuYevon
23-01-2010, 13:18
Se non hai già risolto, prova a postare codice compilabile con tanto di programma chiamante.

anna2312
23-01-2010, 13:26
program es1
integer, dimension(100,100)::A

integer::n
integer::i,j
integer::colonna1, colonna

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

colonna1=colonna(n,a)
write(*,*) colonna1


stop
end program

YuYevon
23-01-2010, 13:59
Riscrivendo così la funzione



integer function colonna(n,a)
integer::n
integer, dimension(100,100)::a
integer::somma, i, media, j

somma = 0

do i = 1, n
somma = somma + a(i, i)
end do

somma = 0
colonna = 0

do j = 1, n
do i = 1, n
somma = somma + a(i, j)
end do

if (somma .EQ. media) then
Write (*,*) "colonna:", j
end if

somma = 0
end do

return
end function


otterresti la stampa di tutti gli indici di colonna che soddisfano la condizione che hai detto. Come comunicarli al programma chiamante però è da rivedere: volendo potresti fare un ciclo iterativo e richiamare la funzione j volte (con j numero di colonne) e per ogni colonna verificare la condizione. La media potresti calcolarla con una funzione a parte...

anna2312
25-01-2010, 16:21
Posto un nuovo codice che però mi da sempre 0, anche quando la somma degli elementi di ogni colonna è uguale alla media degli elementi della diagonale!


integer 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=1
i=1
do
somma=0
do j=1,n
somma=somma+a(i,j)
end do
if (somma/=m)then
prova2=0
End if
i=i+1
if (i==n.or.prova2==0)exit
end do
return
end function

Loading