fredag 31. august 2007

Fredag 31/8: Funksjon og presedens

Man leser kap. 4.3 og laget f(x)
  
 Function f (ByVal x As Double) As Double
   Return ( 2*x + x^2 ) / 3 * Math.sqrt (x)
 End Function
og en "klient" som bruker f(.) setter s til 4.0 og t ved bruk av f().
  
  Dim s as Double = 4.0
  Dim t as Double = f(s)
Den sekvensielt arbeidende f() vil jobbe etter presedens og fra venstre mot høyre:
  1. første parantes (fra venstre):
    1. første (og eneste) potensiering (fra venstre): 4.0^2 blir 16.0
    2. første (og eneste) mult. el. div. (fra venstre): 2*4.0 blir 8.0
    3. første (og eneste) pluss el. minus (fra venstre): 8.0 + 16.0 blir 24.0
  2. første mult. el. div. (fra venstre): 24.0 / 3 gir 8.0
  3. neste mult. el. div.: 8.0 * Math.sqrt(4.0)
    1. Math.sqrt(4.0) blir (via funksjonen) 2.0
  4. 8.0 * 2.0 gir 16.0
  5. funksjonen returnerer 16.0
Klienten setter så sin variabel t til 16.0. Verdien av s er fremdeles 4.0. Forskjell mellom ByVal og ByRef er at ByVal gir funksjonen en KOPI av originalen. ByRef gir derimot originalen (en peker dit), som gir funksjonen mulighet til å ENDRE originalen. Fordel med ByRef: Sparer tid og plass hvis parametrene er store (gigabyte med data som skal kopieres hvis en brukte ByVal). Ulempen med ByRef er at klienten risikerer at originalen endres. I lab arbeidet man med 4.3

Ingen kommentarer: