Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

motja

Trainee

  • "motja" started this thread

Posts: 53

Date of registration: Nov 8th 2004

1

Sunday, January 21st 2007, 3:14pm

Scheme Übung11

Hallo,

ich habe eine frage zur Aufgabe 1c).
Schreiben Sie eine Prozedur (copy mat), die eine Liste von Zahlen erwartet und eine Kopie der gegebenen Liste zurückgibt. D.h. Folgendes gilt:
(define m ’(1 2 3 0 5 6 7 8 9))
(define mc (copy m))
mc --> (1 2 3 0 5 6 7 8 9)
(eq? m mc) --> #f.

Wenn ich mich richtig errinere prüft eq? die Identität(Zeiger gleich) und equal? die Gleichheit(Struktur gleich).
Ist es möglich zwei Listen gleicher Struktur zu haben, die eq? #f liefern?

Markus

the one and only Unterstrich!

Posts: 2,571

Date of registration: Oct 9th 2003

2

Sunday, January 21st 2007, 3:48pm

RE: Scheme Übung11

Quoted

Original von motja
Ist es möglich zwei Listen gleicher Struktur zu haben, die eq? #f liefern?


Klar, warum nicht?

Source code

1
2
3
4
5
6
7
8
(define a (list 1 2))
(define b (list 1 2))
(eq? a b)
(equal? a b)

#f
#t
> 
Charmant sein? Hab ich längst aufgegeben. Glaubt mir doch eh keiner...

motja

Trainee

  • "motja" started this thread

Posts: 53

Date of registration: Nov 8th 2004

3

Sunday, January 21st 2007, 4:50pm

Aufgabe 3

Danke, Markus.

Nächste Frage hat mehr mit Mathe asl mit Scheme zu tun:
um 'CIRCUMFERENCE von einem Parallelogramm zu finden, rechnet man (Seite1 + Seite2)*2.
Zum testen wird ein Parallelogramm mit Seiten 6 und 7 vorgegeben.
Es soll aber CIRCUMFERENCE=40 rauskommen.

Rechne ich das falsch (habe 26) oder ist der Fehler auf dem Übungsblatt?

Markus

the one and only Unterstrich!

Posts: 2,571

Date of registration: Oct 9th 2003

4

Sunday, January 21st 2007, 5:16pm

Ohne mich zu weit aus dem Fenster lehnen zu wollen, sieht das für mich nach Schreibfehlern auf dem Übungsblatt aus. Wenn ich mich nicht verrechnet habe, müssten

Source code

1
2
(send-msg para ’AREA) --> 36.37
(send-msg para ’CIRCUMFERENCE) --> 26

als Ergebnis rauskommen.
Charmant sein? Hab ich längst aufgegeben. Glaubt mir doch eh keiner...

motja

Trainee

  • "motja" started this thread

Posts: 53

Date of registration: Nov 8th 2004

5

Sunday, January 21st 2007, 5:34pm

36.37 und 26 habe ich auch.

In der Aufgabe 2 sollte man unterschiedliche Anzahl von Argumenten übergeben können.

(define (create-matrix-obj n . args) (create-instance martix-class n . args)) funtioniert nicht.
Fehlermeldung: "application: bad syntax (illegal use of `.') in: (create-instance martix-class n . args)".

Gibt es dafür eine andere Möglichkeit?

Philipp

Praktikant

  • "Philipp" is male

Posts: 13

Date of registration: Nov 11th 2006

6

Sunday, January 21st 2007, 6:34pm

@motja

Ne, ich glaube eher das Grundseite, Höhe, Winkel übergeben wird. Der Umfang passt trotzdem nicht, habe das gleiche Problem.

"(define (create-matrix-obj n . args) (create-instance martix-class n . args))"
--> beim Zweiten brauchst du keine Unbekannte Parameterzahl mehr anzugeben. Die unbekannte Parameteranzahl in create-matrix-obj wird dir ja vom Scheme Interpreter bereits in args als Liste gepackt. Du erstellst dann einfach (create-instance martix-class n args) so dein "Objekt" und dann passt das.
Mögen all deine Träume sich erfüllen, Träumer; mögen sie dir stets Glück und Erkenntnis bringen. ( Sergio Bambaren, Der träumende Delphin )

ctk

Trainee

  • "ctk" is male

Posts: 113

Date of registration: Oct 15th 2004

7

Monday, January 22nd 2007, 11:54am

Quoted


(define (create-matrix-obj n . args) (create-instance martix-class n . args)) funtioniert nicht.
Fehlermeldung: "application: bad syntax (illegal use of `.') in: (create-instance martix-class n . args)".

Gibt es dafür eine andere Möglichkeit?

Source code

1
2
3
4
(define (create-matrix-obj .args)
   (let ((n (car args))
        (args (cdr args)))
         ...))

würde theoretisch gehen. ich glaube aber nicht, das variable parameter erlaubt sind
Technik ist der Wettlauf der Intelligenz mit der Kreativität der Narren.
Bis heute haben die Narren immer gewonnen.

  • "Schokoholic" is male

Posts: 2,518

Date of registration: Oct 4th 2006

Location: Hannover

Occupation: Haarspaltung

8

Monday, January 22nd 2007, 1:24pm

Naja, zumindest sollen wir laut Aufgabenstellung eine Funktion mit variabler Parameterzahl schreiben. Da muss das wohl erlaubt sein.

@motja:

Du hast wahrscheinlich matrix-class etwa so definiert:

Source code

1
2
(define (matrix-class n . elemente)
  ...)
oder?

Weil das einfachste wäre es doch, matrix-class so umzuschreiben, dass es einfach nur n und eine Liste als Parameter erwartet und nicht eine variable Anzahl von Parametern.
Also etwa folgendermaßen:

Source code

1
2
3
4
(define (matrix-class n elemente)
  ...)

(define (create-matrix-obj n . args) (create-instance matrix-class n args))
Weil args ist ja wie Philipp schon meinte einfach ne Liste, die du auch so weitergeben kannst.

This post has been edited 1 times, last edit by "Schokoholic" (Jan 22nd 2007, 1:26pm)


ctk

Trainee

  • "ctk" is male

Posts: 113

Date of registration: Oct 15th 2004

9

Monday, January 22nd 2007, 1:32pm

Quoted

Original von Philipp
Ne, ich glaube eher das Grundseite, Höhe, Winkel übergeben wird. Der Umfang passt trotzdem nicht, habe das gleiche Problem.

Ich hab mit Herrn Wichers gesprochen: Genau so ist es (wobei immer der Winkel zwischen Grundseite und linker Seite gemeint ist). Das Beispiel auf dem Aufgabenblatt ist falsch. Der Winkel muss pi/6 sein, damit 40 raus kommt (bei pi/3 kommt 28,... raus). Es wird ein korrigiertes Aufgabenblatt geben.
Technik ist der Wettlauf der Intelligenz mit der Kreativität der Narren.
Bis heute haben die Narren immer gewonnen.

This post has been edited 1 times, last edit by "ctk" (Jan 22nd 2007, 1:37pm)


TheGmpS

Praktikant

  • "TheGmpS" is male

Posts: 15

Date of registration: Oct 4th 2006

Location: Hannover

Occupation: Bsc.Informatik 3.Semester

10

Tuesday, January 23rd 2007, 9:23pm

Hab auch eine Frage zu Scheme11:
(Aufgabe 1 b ) )
muss man den "so gehen sie am besten vor" -Vorschlag beachten?

"Denken Sie dabei an let und gehen Sie am besten so vor:
Sie sollten beide Matrizen in einer Hilfs-Prozedur durchlaufen, wobei Sie je einen Zähler für die aktuellen Einträge der Liste verwenden, der die Nummer des je nächsten Elements der Liste angibt und der in Zeilen- und Spalten-Position umgerechnet werden sollte."

oder reicht es wenn man folgendes einhält (was meine funktion tut):
"Schreiben Sie eine Prozedur (mult n m1 m2 i j), die zwei Listen m1 und m2 der gleichen Länge n · n erwartet und mit Hilfe der aus der Linearen Algebra bekannten Matrizen-Multiplikation das Ergebnis der Multiplikation der i-ten Zeile und der j-ten Spalte zurückgibt."

Habs anders gemacht (in meinen augen auch eleganter :D ).
Hab 2 hilfsprozeduren(statt eine) ,welche jeweils fortlaufend die benötigten spalten/zeilen - elemente zurückgeben, und den rest, zB, zähler und sonstige temporäre variablen, kapseln ). Hab keinen Zähler verwendet, der "die Nummer des je nächsten Elements der Liste angibt ". Bei mir wird auch kein Zähler wieder in Zeilen/Spalten zurückgerechnet. Mache nur eine Umrechnung von Spalte/Zeile -> Zähler, damit die Funktion funktionieren kann.

Meine eigentliche frage: ist meine funktion dadurch so "falsch" dass ich dafür Punkte abgezogen kriege? Hab ich den Vorschlag überhaupt richtig verstanden (ich bezweifle es :D ) ? ?(
[test]

This post has been edited 2 times, last edit by "TheGmpS" (Jan 23rd 2007, 9:28pm)


  • "Schokoholic" is male

Posts: 2,518

Date of registration: Oct 4th 2006

Location: Hannover

Occupation: Haarspaltung

11

Tuesday, January 23rd 2007, 11:21pm

Quoted

Original von ctk
Ich hab mit Herrn Wichers gesprochen: Genau so ist es (wobei immer der Winkel zwischen Grundseite und linker Seite gemeint ist). Das Beispiel auf dem Aufgabenblatt ist falsch. Der Winkel muss pi/6 sein, damit 40 raus kommt (bei pi/3 kommt 28,... raus). Es wird ein korrigiertes Aufgabenblatt geben.


Öhm... ja, das Aufgabenblatt wurde laut Scheme-Seite heut aktualisiert, aber wirklich was geändert wurde ja nicht... (/ pi 3) durch (/ pi 6) ersetzt, wenn ich das richtig sehe.

Also ich weiß zwar nicht, ob es daran liegt, dass ich zu blöd bin mir die Formel für Umfang und Fläche eines Parallelogramms herzuleiten, aber ich komme da in keinem Fall auf 42 oder 40...
42 wäre ja die Fläche eines Rechtecks mit den Seitenlängen 6 und 7, aber hier muss man das doch noch mit sin(winkel) multiplizieren, richtig? Bei pi/3 also 36.373... und bei pi/6 dann 21 bzw. 20,9999...
Und wie man auf 40 für den Umfang kommen soll, das will mir gar nicht in den Kopf. Das ist doch eigentlich nur 2*(a+b) oder?? Also 26.

Habt ihr da was ähnliches?


@TheGmpS:
Also aus der Formulierung "am besten" würd ich ableiten, dass du es so machen kannst wie du willst, solange es nur funktioniert. Zumindest sofern du dich an die Liste der erlaubten Befehle hältst.
Ich habs zumindest selber auch nicht so gemacht wie es da steht.

[edit]typo[/edit]

This post has been edited 1 times, last edit by "Schokoholic" (Jan 23rd 2007, 11:23pm)


double

Trainee

  • "double" is male

Posts: 43

Date of registration: May 12th 2004

Location: Barsinghausen

12

Wednesday, January 24th 2007, 12:01pm

Umfang und Flächeninhalt

@Fläche Parallelogramm:

Gegeben sind GRUNDSEITE g und HÖHE h (nicht mit Seite A und B verwechseln!):

A = g * h

@Umfang Parallelogramm:

U = 2 * (a + b)
= 2 * (g + (A / g * sin(alpha) ) )
= 2 * (g + (g * h / g * sin(alpha) ) )
= 2 * (g + (h / sin(alpha) ) )

mit:
a = g
b = A / g * sin(alpha) = h / sin(alpha)

This post has been edited 1 times, last edit by "double" (Jan 24th 2007, 2:11pm)


Markus

the one and only Unterstrich!

Posts: 2,571

Date of registration: Oct 9th 2003

13

Wednesday, January 24th 2007, 1:40pm

Quoted

Original von Schokoholic
Also ich weiß zwar nicht, ob es daran liegt, dass ich zu blöd bin mir die Formel für Umfang und Fläche eines Parallelogramms herzuleiten, aber ich komme da in keinem Fall auf 42 oder 40...


Ich weiß nicht, ob du zu blöd bist ( :P SCNR), aber hier steht alles, was du brauchst. ;)
Charmant sein? Hab ich längst aufgegeben. Glaubt mir doch eh keiner...

  • "Schokoholic" is male

Posts: 2,518

Date of registration: Oct 4th 2006

Location: Hannover

Occupation: Haarspaltung

14

Wednesday, January 24th 2007, 1:52pm

RE: Umfang und Flächeninhalt

Quoted

Original von double
Gegeben sind GRUNDSEITE g und HÖHE h (nicht mit Seite A und B verwechseln!):

Hätte man auch irgendwo hinschreiben können.... andererseits hätte man auch drauf kommen können. Aber zumindest hatten mehrere Leute das gleiche Problem.

Quoted

Original von Markus
Ich weiß nicht, ob du zu blöd bist ( :P SCNR), aber hier steht alles, was du brauchst. ;)

Ich weiß wohl, was ein Parallelogram ist, danke ;). Dachte nur, es wären die Seitenlängen gegeben... aber hey, da war meine Formel sogar richtig 8)



Quoted

Original von double
mit a = g und b = A / g * sin(alpha)

Du meinst b= A / (g * sin(alpha)) = h / sin(alpha), oder?

This post has been edited 2 times, last edit by "Schokoholic" (Jan 24th 2007, 2:00pm)


double

Trainee

  • "double" is male

Posts: 43

Date of registration: May 12th 2004

Location: Barsinghausen

15

Wednesday, January 24th 2007, 2:14pm

RE: Umfang und Flächeninhalt

Quoted

Du meinst b= A / (g * sin(alpha)) = h / sin(alpha), oder?

yup!

U = 2 * (g + (h / sin(alpha) ) ) mit g = Grundseite, h= Höhe

This post has been edited 1 times, last edit by "double" (Jan 24th 2007, 2:15pm)


motja

Trainee

  • "motja" started this thread

Posts: 53

Date of registration: Nov 8th 2004

16

Thursday, January 25th 2007, 8:46pm

habe eine Frage zur Aufgabe 2.

wie kann ich iterativ auf eine Methode zugreifen (bei der Definition von 'PRINT gebe ich erstes Element von args aus und möchte weiter mit der Methode auf Rest der Liste zugreifen) ?

neweb

Erfahrener Schreiberling

  • "neweb" is male

Posts: 496

Date of registration: Jun 16th 2006

Location: Hannover

17

Thursday, January 25th 2007, 9:51pm

Quoted

Original von motja
habe eine Frage zur Aufgabe 2.

wie kann ich iterativ auf eine Methode zugreifen (bei der Definition von 'PRINT gebe ich erstes Element von args aus und möchte weiter mit der Methode auf Rest der Liste zugreifen) ?


Einfach eine Hilfsfunktion im Lambda-Block definieren, die du dann mit einem Befehl dahinter aufrufst.

Source code

1
2
3
4
'PRINT (lambda ()
	(define (helper-function list)
		( [...] (helper-function (cdr list)) [...] ))
	(helper-function some-list-data))
Das Wesen der Dinge ist es, dass sie plötzlich verschwinden und dann unerwartet an einem ganz anderen Ort wieder auftauchen.

This post has been edited 2 times, last edit by "neweb" (Jan 25th 2007, 9:55pm)