P1-WS04-MusterLoesung08.txt

Aus Fachschaft_Informatik
Zur Navigation springen Zur Suche springen
Die druckbare Version wird nicht mehr unterstützt und kann Darstellungsfehler aufweisen. Bitte aktualisiere deine Browser-Lesezeichen und verwende stattdessen die Standard-Druckfunktion des Browsers.
             P1 Übungen WS2004/2005
        Musterlösung 8 (Martin Burmester)
	

Aufgabe 1.)

Praefixnotation bedeutet, dass der Operator oder die Funktion vor den
Argumenten steht, bei Infixnotation steht der Operator zwischen den
Argumenten.

Die Praefixnotation scheint zunächst einmal gewisse Nachteile gegenüber
der Infixnotation zu haben: Es ist sehr ungewohnt, Terme auf diese Weise
zu schreiben; deshalb geht beim Lesen und Schreiben zunächst einmal die
Übersicht verloren. Dennoch hat die Präfixnotation bei genauerem Hinsehen
einige Vorteile:
Die "Operatoren" +, -, * und /, aber auch z.B. ** bzw. ^ werden hier
in ganz normaler Funktionsnotation geschrieben. Damit gibt es keinen
(künstlichen)  Unterschied zwischen "Funktionen" und "Operatoren" mehr.
Es hat aber auch den Vorteil, dass beliebig viele Argumente übergeben
werden können und so auch die mathematischen Operationen nicht auf
Zweistelligkeit beschränkt sind.  
Schliesslich bräuchte man keine Regeln, um die Bindungsstärke der
Operatoren zu beschreiben, denn alle Funktionen sind gleichberechtigt.
Für Informatiker gibt es noch einen weiteren Vorteil: Terme in
Präfixnotation lassen sich einfacher verarbeiten, da sie sich direkt
als Baum darstellen lassen:

2 + 3 * 4 + 1  =  (+ 2 (* 3 4 ) 1)

                         +
                        /|\
                       / | \
                      2  *  1
                        / \
                       /   \
                      3     4

In Scheme wird Praefixnotation verwendet.

Aufgabe 2.)

a)

(+ 4 4 4 4)
  
=> 16
  
  erwartungsgemäß
  
b)

(/ (/ (sin 1) (cos 1))
   (tan 1))
     
=> 0.9999999999999999

  Scheme arbeitet mit beschränkter Genauigkeit.
  Des weiteren führt Scheme keine algebraischen
  Umformungen durch[1] sondern wertet die einzelnen
  Funktionsaufrufe nacheinander numerisch aus. 
    
  [1] Mit sin x / cos x = tan x liesse sich der
  Term zu tan 1 / tan 1 umformen, und anschließend
  um tan 1 kürzen, so dass als Ergebniss 1 bleibt.

c)

SCM-Scheme:

> (/ 1 0)
+#.#

[[DrScheme]]:

> (/ 1 0)
[Käfer] /: division by zero

MIT-Scheme:

1 ]=> (/ 1 0)

;Division by zero signalled by /.
;To continue, call RESTART with an option number:
; (RESTART 1) => Return to read-eval-print level 1.

  Die Division durch 0 ist auch in Scheme nicht definiert.
	
Aufgabe 3.)

SCM-Scheme:

> (+ 2 (- (/ 6 4) 1))
2.5

[[DrScheme]]:

> (+ 2 (- (/ 6 4) 1))
2 1/2

MIT-Scheme:

1 ]=> (+ 2 (- (/ 6 4) 1))

;Value: 5/2

Der revised^5 report schreibt nicht vor, dass alle dort beschriebenen
Zahlentypen implementiert werden müssen.


b)

SCM-Scheme:

> (/ (- 2
>         (/ (+ 2 2)
>            (+ 3
>               (* 3 4))))
>      (sin (sin pi)))
14154208231265997.0

[[DrScheme]]:

> (/ (- 2
        (/ (+ 2 2)
           (+ 3
              (* 3 4))))
     (sin (sin pi)))
14154208231265998.0

MIT-Scheme:

1 ]=> (/ (- 2
        (/ (+ 2 2)
           (+ 3
              (* 3 4))))
     (sin (sin pi)))

;Unbound variable: pi
;To continue, call RESTART with an option number:
; (RESTART 3) => Specify a value to use instead of pi.
; (RESTART 2) => Define pi to a given value.
; (RESTART 1) => Return to read-eval-print level 1.

Der revised^5 report schreibt nicht vor, dass die Konstante
pi vordefiniert sein muss.

Eigentlich waere hier ein Division durch 0 Fehler zu erwarten,
da sin pi = 0 und sin 0 = 0, in SCM-Scheme ist aber:

> (sin pi)
1.2246467991473533e-16
> (sin (sin pi))
1.2246467991473533e-16

Da der Wert der PI Konstante nur eine Naeherung ist und auch die
sin Funktion nur naeherungsweise den Funktionswert der Sinusfunktion
berrechnet (etwa ueber eine Taylorreihe).

Aufgabe 4.)

> (* 2000 (/ 4 100))
80