Naval Δημοσ. 27 Ιουνίου 2010 Δημοσ. 27 Ιουνίου 2010 Καλησπέρα. Καταρχλην να πω ότι to prοject γινεται σε fortran. Έχω μια subroutine-εστω bisec- η οποία λύνει μια εξίσωση f(x)=0, όπου η f πρέπει να περνά από το όρισμά της. Το θέμα είναι ότι πρέπει να λύσω πολλές συναρτήσεις με ονομόματα διαφορετικά από το f που έχει ώς dummy argument μέσα της η bisec. Πως το κάνουμε αυτό? Αν απλά βάλω να περνά από το όρισμα άλλο όνομα από φ πετάει λάθος... thanx in advance!
V.I.Smirnov Δημοσ. 27 Ιουνίου 2010 Δημοσ. 27 Ιουνίου 2010 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. Για συναρτήσεις που δέχονται όρισμα άλλες συναρτήσεις κάνεις το ίδιο. Το ίδιο επίσης γίνεται και για να περάσεις υπορουτίνες ως όρισμα σε άλλες υπορουτίνες ή συναρτήσεις.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.