Umgebungen

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Loading
Zurück zur Übungsübersicht


Gegenstand dieser Übung sind Umgebungen. Arbeiten Sie das Vorlesungsskript durch, erproben Sie die darin enthaltenen Beispiele und bearbeiten Sie die angegebenen Übungsaufgaben. Weiteres Übungsmaterial, das auch Inhalte früherer Computerübungen enthält, finden Sie in den folgenden Aufgaben.


Dualzahl

Schreiben Sie eine Prozedur (dualzahl x), die eine dezimale Gleitkommazahl in eine duale Gleitkommazahl umwandelt. Die Dualzahl soll als Zeichenkette zurückgegeben werden. Aufrufbeispiele:

> (dualzahl 0)
"0"
> (dualzahl 123)
"1111011"
> (dualzahl 10.125)
"1010.001"
> (dualzahl -0.346)
"-0.0101100010010011"

Hinweise: Die nachfolgende Darstellung demonstriert den Algorithmus zur Umwandlung:

Gleitkommazahl: 10,125

ganz: 10gebrochen: 0,125
10 : 2 = 5 Rest 00,125 * 2 = 0.25
5 : 2 = 2 Rest 10,250 * 2 = 0.5
2 : 2 = 1 Rest 00,500 * 2 = 1,0
1 : 2 = 0 Rest 1 1,0 ⇒ Ende
0 ⇒ Ende

Dualzahl: 1010,001

Definieren Sie geeignete Hilfsprozeduren zur Ermittlung der ganzen bzw. gebrochenen Teilzeichenkette im gesuchten “Dualstring”. Verwenden Sie Typkonvertierungen, wie number->string und string->list, um diese Teile zu extrahieren. Die Basis der internen Darstellung einer Dezimalzahl muss nicht 10 sein! Deshalb liefern gewisse Operationen mit Zahlen u. U. “merkwürdige” Effekte. Nach der Extraktion des Vor- und Nachkommateils der gegebenen Zahl findet eine Zahlenrechnung statt. Beachten Sie, dass auch “Dualbrüche” periodisch sein können! Brechen Sie den Algorithmus, falls notwendig, nach 16 dualen Nachkommastellen ab! Nutzen Sie statt floor und ceiling besser truncate zum Abschneiden der Nachkommas tellen und machen Sie sich zur Unterstützung mit den vordefinierten Prozeduren quotient, remainder und <tt>inexact->exact vertraut!

Nullstellen

Entwickeln Sie die Prozedur (nst f min max dx), die zu einer beliebigen stetigen Funktion f alle Nullstellen im Intervall [min ; max] als Liste zurückgibt. Die Nullstellen sollen mit einer Genauigkeit von 6 Dezimalstellen ermittelt werden.

Lösungsgedanken:

  1. Zerlege das Intervall [min ; max] in Teilintervalle der Breite dx.
    1. Prüfe an den Intervallgrenzen jedes Teilintervalls die Vorzeichen der Funktionswerte.
    2. Bei entgegengesetzten Vorzeichen muss die stetige Funktion in diesem Intervall eine Nullstelle haben. Ermitteln Sie diese durch Intervallschachtelung und füge sie der Lösungsmenge (Liste) hinzu.
    3. Setze die Suche in den Nachbarintervallen fort, bis die rechte Intervallgrenze max erreicht ist.

Aufrufbeispiele:

> (nst (lambda (x) (sin (- x 1))) -10 10 .1)
(-8.424778 -5.283185 -2.141593 1.0 4.141593 7.283185)
> (nst (lambda (x) (- (* 3 x x) (* 4 x) 17)) -10 10 1)
(-1.805399 3.138733)
> (nst (lambda (x) (- (* 0.5 x x) 4)) -10 10 1)
(-2.828427 2.828427)


 

Quelltext überprüfen:

Lösungsvorschlag. Bitte arbeiten Sie ihn durch und erproben Sie die Prozedur. Dann werden Sie auch Schwachstellen des Vorschlags erkennen, denn nicht in jedem Fall werden die Nullstellen auch wirklich gefunden.

Integral

Schreiben Sie die Prozedur (integral f li re dx), die das bestimmte Integral der Funktion f im Intervall [li ; re] ermittelt. Die Fläche unter dem Graphen dieser Funktion soll dazu mit möglichst vielen Trapezflächen angenähert werden, deren (kleine) Breite dx beträgt.

Hinweise: Beginnen Sie am besten damit, das bestimmte Integral von von bis (s. Beispiel 1 unten) analytisch zu berechnen. Das Ergebnis ist 103.3...

Rekursive Idee:

Fläche = 0, wenn li+dx > re, sonst Fläche = Trapezfläche mit Breite dx + Fläche Rest

Aufrufbeispiele:

> (integral (lambda (x) (+ (* 2 x x) 1)) 4 6 1)
104
> (integral (lambda (x) (+ (* 2 x x) 1)) 4 6 0.1)
103.33999999999985
> (integral (lambda (x) (+ (* 2 x x) 1)) 4 6 0.01)
103.33339999999914

 

Quelltext überprüfen:

Zurück zur Übungsübersicht

Persönliche Werkzeuge