PMG1719/Programmiersprachen/Seite Scheme

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>SchemeJS</language>
== Aufgabe 1 ==
Es soll eine Funktion '''ringarea''' definiert werden, die die Fläche berechnet, die zwischen den beiden konzentrischen Kreisen mit den Radien r1 und r2 liegt. 
 Dazu werden die Konstante pi und die Hilfsfunktion sq definiert. 
 Diese werden von '''ringarea''' dann für die Berechnung benutzt.

<code id="5a9a8119aa196">
(define ringarea 
  (lambda (r1 r2)
    (let ([pi 3.14] [sq (lambda (x) (* x x))])
      (* pi (- (sq r1) (sq r2))))))
</code>

<run id="5a9a8119aa3c0">
(ringarea 10 8.5)
</run>

== Aufgabe 2 ==
Ermitteln Sie die Summe einer beliebigen Anzahl natürlicher Zahlen:
<math>S=\sum^n_{i=0}i=1 + 2 + 3 + ... + n</math>.<br />

<code id="5a9a8119aa209">
(define summe  
  (lambda (n)    
    (if (= n 0)        
      0        
      (+ n (summe (- n 1))))))
</code>

<run id="5a9a8119aa43f">
(summe 100)
</run>


== Aufgabe 3 ==
Bei einer Mathematikolympiade wurde folgende Aufgabe gestellt:

 ''20 m Stoff werden auf einen Stab von 5 cm Durchmesser aufgewickelt.''<br>
 ''Der Stoff ist 1 mm dick.''
 ''Wie dick wird die Rolle?''

Eine Realisierung des Sachverhalts als Programm könnte folgendermaßen aussehen:

<code id="5a9a8119aa278"> 
(define ballen1
  (lambda (laenge d)
    (let [(pi 3.1416)]
      (if (<= laenge 0)
          d
          (ballen1 (- laenge (* pi d)) (+ (* 2 0.001) d))))))
</code>

<run id="5a9a8119aa4aa">
(ballen1 20 0.05)
</run>

<font color="darkgreen">Sie werden festgestellt haben, dass unsere Lösung für die Problemstellung bereits einem Algorithmus entspricht, da die (end-)rekursive Problemlösung zur Implementation formale Parameter benötigt .</font>
<br>
<font color="darkgreen">'''Die Aufgabe wird im Folgenden stärker verallgemeinert, damit der aufzustellende Algorithmus dann eine Klasse gleichartiger Probleme löst, wobei die Abarbeitung abhängig von den Eingaben eindeutig, endlich erfolgt und unter gleichen Bedingungen zum gleichen Ergebnis führt.'''</font>

'''''Stoff beliebiger Länge wird auf einen Stab mit beliebigem Durchmesser aufgewickelt.''<br>'''
'''''Der Stoff ist beliebig dick.'''''
'''''Wie dick wird die Rolle?''<br><br>'''

<code id="5a9a8119aa2ef">
(define ballen2
  (lambda (laenge durchmesser dicke)
    (let [(pi 3.1416)]
      (if (<= laenge 0)
          durchmesser
          (ballen2 (- laenge (* pi durchmesser)) (+ (* 2 dicke) durchmesser) dicke)))))
</code>

<run id="5a9a8119aa507">
(ballen2 20 0.05 0.001)
</run>

== Aufgabe 4 ==
Ein Turtlebeispiel

<code id="5a9a8119aa34f">
(define quadrat
 (lambda (turtle laenge)
  (clear canvas)
  (home turtle)
  (penwidth turtle 5)
  (pencolor turtle 255 0 0)
  (forward turtle laenge)
  (right turtle 90)
  (pencolor turtle 255 255 0)
  (forward turtle laenge)
  (right turtle 90)
  (pencolor turtle 0 255 0)
  (forward turtle laenge)
  (right turtle 90)
  (pencolor turtle 0 0 255)
  (forward turtle laenge)
  (hide turtle)))
</code>

<canvas></canvas>

<run id="5a9a8119aa561">
(quadrat turtle1 50)
</run>