Christian Wagenknecht/Lehre/HIT2010

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>SchemeJS</language>
==Miniworkshop zum Thema "Programming Wiki"==
(Prof.Dr.Christian Wagenknecht, 14.01.2010)

<code id="55b1f2e48d888">
(define (fib n)
    (if (< n 2) 
      1
      (+ (fib (- n 1))(fib (- n 2)))))
</code>
<run id="55b1f2e48d974">(fib 8)</run>


#Bedarf: Programme entwickeln und kommentieren (rekursiv, iterativ)
#Mitschriften -> Textdatei -> Web -> Wiki -> Programming Wiki
#Kommentierte, editierbare Programme ohne IDE-Installation im Web

=== Alles Gute im Neuen Jahr ===

A: "Hallo und alles Gute im Neuen Jahr."

D.h., alles Gute am 1., 2., 3., 4., ..., 365. Tag.

Kann man das dem Computer beibringen?

Idee 1: ''iterativ''
 Für i=1,2,3,...,365:
 schreibe "Alles_Gute_am_Tag_i".

Das ist iterativ, d.h. wir müssen die Aufgabenstellung in einen Zyklus umsetzen.

B: "Danke. Ich hoffe, Sie sind gut ins Neue Jahr gekommen. Und auch für den Rest alles Gute."

Idee 2: ''rekursive'' Beschreibung

Gute Wünsche für 2010 <br/>
= Alles Gute am esten Tag<br/>
und Gute Wünsche für das Restjahr-2010

===Rekursives Programm===

 Gute Wünsche für 365 Tage des Jahres
   Alles Gute am ersten Tag
   Gute Wünsche für die restlichen 364 Tage des Jahres  

====Fälle====

n ... Anzahl der Rest-Tage:
: n=365: OK, kleiners n ist auch OK
: ABER: n = 0: Solche "Wünsche" brauche ich nicht!

 Gute Wünsche für n Tage des Jahres
   Wenn n = 0, 
   dann "Schluss!"
   ansonsten:
     Alles Gute am ersten Tag
     Gute Wünsche für n-1 Tage des Jahres  

====Programm====

<code id="4b4b2c869795e">
(define (wuensche i)
  (if (= i 0)
     'schluss
     (begin
        (display "Alles Gute am Tag ")(display i)(display ".")(newline)
        (wuensche (- i 1)))))
</code>
<run id="4f6c2b0b9aa4b">(wuensche 365)</run>

[[Christian Wagenknecht/Lehre/HIT2010/HIT2010-Java01|Java-Version]] mit <tt>for</tt>-Schleife.

===Programming Wikis===
[http://programmingwiki.de http://programmingwiki.de]

====Übungsaufgaben====
#Arbeiten Sie diese PW-Seite durch und starten Sie die Programme ''unverändert''.
#Modifizieren Sie die Programme ein wenig: z.B. durch Veränderung der Ausgabe.
#Legen Sie ein Benutzerkonto beim Programming Wiki an. Registrieren Sie sich anschließend. Schreiben Sie eine eigene neue Seite. Hierfür suchen Sie einfach nach dem Namen der (zukünftigen) Seite. Wird er nicht gefunden, erhält man das Angebot, die neue Seite (dieses Namens) zu erstellen.

===Anderes Beispiel: Turtle Grafik===
[http://programmingwiki.de/Scheme_Turtle Scheme Turtle]

====Beispiel: Rosette====

<popup name="Beispiel: Rosette">

Wir stellen nunächst eine Pozedur zum Zeichnen eines Quadrats bereit.

<canvas></canvas>

<code id="4b4c3e0c94e17">
(define (quadrat seite)
  (forward turtle seite)(right turtle 90) 
  (forward turtle seite)(right turtle 90) 
  (forward turtle seite)(right turtle 90) 
  (forward turtle seite)(right turtle 90))
</code>
<run id="4f6c2b0b9aab4">(quadrat 50)</run>

Wir verwenden <tt>quadrat</tt> zur Definition von <tt>rosette</tt>. 

<code id="4b4c3e0c95da1">
(define (rosette winkel laenge)
  (if (>= winkel 360)
    'stop
    (begin
      (quadrat laenge)
      (right turtle 20)
      (rosette (+ winkel 20) laenge))))
</code>

<run id="4f6c2b0b9ab2f">(rosette 0 70)</run>

</popup>

===Zusammenfassung===

* Rekursive Programmierung abstrahiert vom "Wie" der Implementierung.
* Ein Programming Wiki enthält Code-Abschnitte, mit denen man experimentieren kann.
* Ein Programming-Wiki-Thema ist überall und ohne Zusatzinstall. via Browser verfügbar.
* Jeder kann beitragen - ohne technischen Zusatzaufwand.