Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Komplexe Zahlen - Scheme » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Komplexe Zahlen - Scheme
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
robby_hd
Grünschnabel


Dabei seit: 22.11.2012
Beiträge: 2

Komplexe Zahlen - Scheme Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Hallo liebe Leute, wir haben in der Uni folgende Aufgabe zu lösen:
Implementieren Sie einen Verbund für komplexe Zahlen. Definieren Sie dazu

einen Konstruktor make-complex (das erste Argument sollte der Realteil, das zweite Argument der Imaginärteil sein),
Selektoren (complex-real k) und (complex-imag k)

Implementieren Sie Operationen (complex+ k1 k2), (complex- k1 k2), (complex* k1 k2) und (complex-abs k), die komplexe Zahlen addieren, subtrahieren, multiplizieren bzw. deren Betrag berechnen.

Leider steh ich vor dem Problem, dass ich damit noch überhaupt nicht richtig zurecht komme, habe bisher nur das Gerüst erstellt und ich bin mir noch nicht einmal bei den Signaturvereinbarungen sicher. Ich hoffe, dass hier jemand weiterhelfen kann :-/

Meine Ideen:
; Konstruktor make-complex erstellen
(: make-complex (real imag -> complex))

(define make-complex
(lambda))

; Selektoren erstellen
(: complex-real (real -> real))
(: complex-imag (imag -> imag))

(define complex-real
(lambda (k)))


(define complex-imag
(lambda (k)))


; Operationen implementieren
(: complex+ (real imag -> complex))
(: complex- (real imag -> complex))
(: complex* (real imag -> complex))
(: complex-abs (real -> real))

(define complex+
(lambda))

(define complex-
(lambda))

(define complex*
(lambda))

(define complex-abs
(lambda))
22.11.2012 14:59 robby_hd ist offline E-Mail an robby_hd senden Beiträge von robby_hd suchen Nehmen Sie robby_hd in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,

ich kann leider kein Scheme und ich bräuchte sicher mehr als nur eine Stunde um mich entsprechend einzulesen. Deswegen kann ich Dir leider nicht helfen.

Sobald Du eine Lösung hast, wäre ich Dir dankbar, wenn Du sie hier (möglichst kommentiert) postest. So kann auch ich etwas lernen.

VG,

Karlito
23.11.2012 13:08 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
robby_hd
Grünschnabel


Dabei seit: 22.11.2012
Beiträge: 2

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Musterlösung

; Eine komplexe Zahl ist zusammengesetzt aus
; - einem Realteil (real)
; - einem Imaginärteil (real)
(define-record-procedures complex
make-complex complex?
(complex-real complex-imag))

(: make-complex (real real -> complex))
(: complex? (any -> boolean))
(: complex-real (complex -> real))
(: complex-imag (complex -> real))

; Addiert zwei komplexe Zahlen
(: complex+ (complex complex -> complex))
(check-expect (complex+ (make-complex 0 0)(make-complex 0 0)) (make-complex 0 0))
(check-expect (complex+ (make-complex 2 4)(make-complex 1 5)) (make-complex 3 9))
(check-expect (complex+ (make-complex -2 3)(make-complex 4 -4)) (make-complex 2 -1))


(define complex+
(lambda (c1 c2)
(make-complex (+ (complex-real c1) (complex-real c2))
(+ (complex-imag c1) (complex-imag c2)))))
; Subtrahiert zwei komplexe Zahlen
(: complex- (complex complex -> complex))
(check-expect (complex- (make-complex 0 0)(make-complex 0 0)) (make-complex 0 0))
(check-expect (complex- (make-complex 2 4)(make-complex 1 5)) (make-complex 1 -1))
(check-expect (complex- (make-complex -2 3)(make-complex 4 -4)) (make-complex -6 7))


(define complex-
(lambda (c1 c2)
(complex+ c1
(make-complex (- 0 (complex-real c2)) (- 0 (complex-imag c2))))))


; Multipliziert zwei komplexe Zahlen
(: complex* (complex complex -> complex))
(check-expect (complex* (make-complex 0 0)(make-complex 0 0)) (make-complex 0 0))
(check-expect (complex* (make-complex 2 4)(make-complex 1 5)) (make-complex -18 14))
(check-expect (complex* (make-complex -2 3)(make-complex 4 -4)) (make-complex 4 20))

(define complex*
(lambda (c1 c2)
(make-complex (- (* (complex-real c1) (complex-real c2))
(* (complex-imag c1) (complex-imag c2)))
(+ (* (complex-real c1) (complex-imag c2))
(* (complex-imag c1) (complex-real c2))))))

; Berechnet den Betrag einer komplexen Zahl
(: complex-abs (complex -> real))
(check-expect (complex-abs (make-complex 0 0)) 0)
(check-expect (complex-abs (make-complex 3 4)) 5)
(check-within (complex-abs (make-complex -2 2)) 2.8284 0.0001 )

(define complex-abs
(lambda (c)
(sqrt (+ (square (complex-real c)) (square (complex-imag c))))))


;Berechnet das Quadrat einer Zahl
(: square (number -> number))

(define square
(lambda (x) (* x x)))
23.11.2012 21:50 robby_hd ist offline E-Mail an robby_hd senden Beiträge von robby_hd suchen Nehmen Sie robby_hd in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Danke für die Lösung.

VG

Karlito
23.11.2012 22:05 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Komplexe Zahlen - Scheme