Προς το περιεχόμενο

Προβλημα σε κλήση function


Naval

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα. Καταρχλην να πω ότι to prοject γινεται σε fortran.

 

Έχω μια subroutine-εστω bisec- η οποία λύνει μια εξίσωση f(x)=0, όπου η f πρέπει να περνά από το όρισμά της. Το θέμα είναι ότι πρέπει να λύσω πολλές συναρτήσεις με ονομόματα διαφορετικά από το f που έχει ώς dummy argument μέσα της η bisec.

Πως το κάνουμε αυτό?

Αν απλά βάλω να περνά από το όρισμα άλλο όνομα από φ πετάει λάθος...

 

 

thanx in advance!

Δημοσ.

To "η f πρέπει να περνά από το όρισμά της" δεν είναι σαφώς διατυπωμένο.

Αν κατάλαβα καλά, θέλεις να καλείς μια ρουτίνα για να λύνεις με την μέθοδο της διχοτόμησης μια εξίσωση, η δε εξίσωση ορίζεται ως συνάρτηση και είναι όρισμα της υπορουτίνας.

Απλούστατο είναι, η συνάρτηση πρέπει να δηλωθεί EXTERNAL εκεί που χρησιμοποιείται καθώς επίσης και το dummy argument της υπορουτίνας που την καλεί.

Μελέτησε το παρακάτω παράδειγμα.

 

>program test    
implicit none 
[b][color="Red"]real,external[/color][/b]::my_func     ! function to evaluate (is passed as an argument)
real::val

call ave_val(my_func, 0., 1., 101, val)             ! pass as an argument the function my_func

write(*,10) "my_func", val
10 format(" The average value of ",a," between 0. and 1. is ",f12.8)

end program


! subroutine to compute the average 
subroutine ave_val(func, startVal, lastVal, n, average)
implicit none
real::startVal,lastVal,average, delta,sum,x
[b][color="red"]real,external[/color][/b]::func
integer::n, i

delta = (lastVal-startVal)/(n-1)

sum=0.
do i=1,n
  x = (i-1)*delta
  sum = sum + func(x)
end do

average = sum/n

end subroutine


! function to evaluate (it is used as an argument)
function my_func(x)
implicit none
real::my_func,x

my_func = 3.*x*2

end function

 

 

Μια υπορουτίνα, η ave_val, βρίσκει τη μέση τιμή μιας συνάρτησης που την δέχεται ως όρισμα.

Η συνάρτηση-όρισμα είναι η my_func και εισέρχεται κανονικά στο dummy argument της ave_val.

Για συναρτήσεις που δέχονται όρισμα άλλες συναρτήσεις κάνεις το ίδιο.

Το ίδιο επίσης γίνεται και για να περάσεις υπορουτίνες ως όρισμα σε άλλες υπορουτίνες ή συναρτήσεις.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...