# Programmieren mit DrRacket (Scheme) Problem :(



## Vinz1911 (25. Oktober 2014)

Hallo Leute,

ich habe dieses Jahr mein Informatik Studium begonnen und bei einer Aufgabe bei meiner Hausübung bin ich etwas überfordert.
Wir haben Angefangen Programmieren zu lernen mit einer Assembler Sprache (Scheme), DrRacket. 

Die ersten beiden Aufgaben waren eine beliebige Einheit in Kilowatt umzurechnen (dazu gab es eine Tabelle mit 4 Einheiten),
Die andere Aufgabe, Kilowatt in eine beliebige Einheit umzurechnen nach dem Muster (define (KilowattinEinheit Zahl Einheit)

Nun mein Problem, ich soll eine Prozedur schreiben welche Eine beliebige Einheit in eine Beliebige Einheit umrechnet, nach dem Muster (EinheitinEinheit Zahl Einheit1 Einheit2) , die erste Einheit soll dabei erst in Kilowatt umgerechnet werden. Ich bin damit irgendwie Überfragt, da ich nicht weiß wie man in Scheme Symbole so definiert, das er mit dem errechneten Wert dann weiter rechnet :/

Hat hier jemand eine Idee oder ist eine Art Scheme-Crack 

EDIT: Die ersten beiden Aufgaben habe ich gelöst, mir geht es auch nicht darum, das mir jemand die Hausaufgaben macht. Ich würde nur gern Wissen wie man das macht, damit ich es verstehen kann :/


----------



## Noirsoleil (25. Oktober 2014)

Kannst du nicht einen deiner Studenten Kollegen fragen?


----------



## Vinz1911 (25. Oktober 2014)

In meiner Übungsgruppe habe ich leider keinen der da eine Lösung weis.
Ein Kumpel und Ich haben auch schon stundenlang gegrübelt


----------



## TroaX (26. Oktober 2014)

Puh das ist schon eine sehr seltsame Sprache ... und wirkt vor allem extrem unpraktikabel 

Wenn ich das aber richtig verstanden habe, willst du im Grunde eine Zahl übergeben, diese umrechnen und das Ergebnis nochmals umrechnen. Dazu kannst du ja eine Zwischenvariable setzen. Allerdings scheint das Wort Variable Mangelware in der DrRacket Doku zu sein.

Wenn ich das richtig verstanden habe, bekommt man mit dem Code


> (define test 10)


eine Variable heraus, die den Wert 10 enthält.

Vielleicht kannste das Ergebnis ja in einer Zwischenvariable parken und dann mit dem Ergebnis weiterrechnen. Somit hast du beide Ergebnisse separat:


> (define ergebnis1 zwischenergebnis)



Aber wenn das falsch sein sollte, bin ich überfragt. Denn DrRacket bzw. Racket hat vom Programmaufbau zwar Ähnlichkeiten zum Assembler, verwendet aber längere und eindeutigere Bezeichner als Schlüsselwörter für Funktionen und Konstrukte. Die Syntax dabei ähnelt dem Scheme-Dialekt.

Scheme wird mittlerweile relativ selten eingesetzt und Assembler fast nur noch für zeitkritische Routinen verwendet. Ich drück dir die Daumen, das hier vielleicht jemand mit der Sprache mal Berührungen hatte. Aber ich denke viele sind es nicht.


----------



## Magogan (26. Oktober 2014)

Scheme ist eine funktionale Sprache. Also keine Variablen im eigentlichen Sinn, nur Funktionsaufrufe mit Parametern.

Das im Spoiler ist zwar auch ein Lösungsansatz, aber du sollst das wohl wie unten (Edit) machen: 



Spoiler



Probier mal etwas wie (Pseudocode):

```
(define (EinheitInEinheit Zahl Einheit1 Einheit2)(
if(Einheit1==Einheit2) Zahl
if(Einheit1=="kWh") (EinheitInEinheit (* Zahl 1000) "Wh" Einheit2)
if(Einheit1=="Wh") (EinheitInEinheit (* Zahl 3600) "Ws" Einheit2)
if(Einheit1=="Ws") (EinheitInEinheit (/ Zahl 3600000) "kWh" Einheit2)
))
```

Ich bin mir fast sicher, dass die Syntax falsch ist, aber von der Idee her sollte das so gehen.



Edit: Hab nochmal gelesen, was du in den ersten Aufgaben hattest. 

```
(define (EinheitInEinheit Zahl Einheit1 Einheit2)
(KilowattInEinheit (EinheitInKilowatt Zahl Einheit1) Einheit2)
)
```

So sollte es gehen.


----------



## Magogan (1. November 2014)

Hat meine Lösung denn nun funktioniert?


----------

