8. Funktionen

Inhalt

Einführendes Beispiel

  Code

  Ausgabe

  Erläuterung

  Beispiel zur Sichtbarkeit von Variablen

Aufgaben

  Aufgabe A81 (Wieder der Pythagoras)

  Aufgabe A82 - Volumen des Kreiszylinders

  Aufgabe A83 - Färben mit Funktionen

  Aufgabe A84 - Färben mit Funktionen (2)

  Aufgabe A85 - Folge den Buchstaben

Zusatzaufgaben

  Aufgabe Z81 - Schmetterling

  Aufgabe Z82 - Zum Gipfel

  Aufgabe Z83 - Sortieren

  Aufgabe Z84 - Median

  Aufgabe Z85 - Taschenrechner

Werden Programme größer oder müssen Teile eines Programms immer wieder bzw. von mehreren anderen Programmteilen benutzt werden, ist es sinnvoll, diese Teile in eigene Funktionen auszulagern. Im Gegensatz zur Mathematik, wo Funktionen meist mit Formeln gleichgesetzt werden, sind in Programmiersprachen Funktionen beliebige Teilprogramme bzw. Unterprogramme.

Funktionen werden mit dem Schlüsselwort function oder kurz fun eingeleitet.

Einführendes Beispiel

Code

function sageHallo(zu)
{
  return "Hallo " + zu + "!";
}

var s1 = sageHallo("Merle");
print(s1);
print(sageHallo("Puschel"));
var h = "Spot";
print(sageHallo(h));

Ausgabe

Hallo Merle!
Hallo Puschel!
Hallo Spot!

Erläuterung

Das Schlüsselwort function leitet die Deklaration der Funktion ein. Danach folgt stets der Name der Funktion, hier sageHallo.

In runden Klammern werden die Parameter der Funktion angegeben, hier: zu. Die Parameter sind die Namen der Werte, die der Funktion übergeben werden. Gibt es mehrere Parameter, werden diese durch Komma getrennt. Hat die Funktion keine Parameter, müssen die Klammern als () dennoch angegeben werden.

Sowohl für den Funktionsnamen als auch für die Namen der Parameter gelten die gleichen Regeln wie für die Namen von Variablen.

Der sogenannte Körper der Funktion (engl. body) wird innerhalb von geschweiften Klammern angegeben. Hier können andere Anweisungen verwendet werden (z.B. Ausdrücke, if und repeat-Anweisungen).

Das Schlüsselwort return dient dazu, Werte als Ergebnis der Funktion, den sogenannten Rückgabewert, zurückzugeben. Im obigen Beispiel ist dies die Verknüpfung von Strings.

Eine Funktion wird aufgerufen, indem man ihren Namen angibt und in runden Klammern die Werte, die der Funktion zur Abarbeitung übergeben werden, hier z.B. die Zeichenkette "Puschel". Die Funktion wird also durch sageHallo("Puschel") aufgerufen. Besitzt die Funktion keine Parameter, sind die Klammern trotzdem zu schreiben.

Im Beispielcode verknüpft die Funktion sageHallo die im Parameter zu übergebene Zeichenkette mit der Zeichenkette "Hallo" und einem Ausrufungszeichen zu einem Gruß.

Dann wird die Funktion mit den konkreten Werten "Merle", "Puschel" und "Sppt" aufgerufen und gibt die entsprechenden Grüße aus.

Das Beispiel demonstriert außerdem, dass Funktionen nicht auf das Arbeiten mit Zahlen beschränkt sind, sondern alle Datentypen als Parameter und Rückgabewerte auftreten können.

Beispiel zur Sichtbarkeit von Variablen

var x=5;
fun f()
{
  x=7; // Sichtbarkeit ändert sich mit var
  print ("in f: "+x);
}
f();
print ("draußen f: "+x);

Aufgaben

Aufgabe A81 (Wieder der Pythagoras)

Gegeben ist folgendes Puzzle:

>:)H4sIAAAAAAAACpWPy2rDQAxF9wL9g34gxmP3EQJaJ
IEsS1bZy2PZHlrLMB7H5O8zpqV0252Qrg7nIhxa7RA8n
yV9IAjXCA2/IDgWhIobhJo9wqGPoUUoXJUDJE2R5209a
sq5NRgx3eSLanL0WpQlgsmofNw72tH1kQbppygzXRb7T
GEyhG4xP+evcborRZWW1hiSZmawbkI4aVQ/2GI9mfjhL
2QM6RekllW+Swi/b/L7/9m6snjLqZ/bE0YeJTARAQAA
function quadrat(a)
{
  return a * a;
}

function pythag(a, b)
{
  // hier deinen Code ergänzen
}

var a = readNumber(); move("E");
var b = readNumber(); move("E");
var c = pythag(a, b);
write(toFixed(c, 2));

Das Programm soll nach dem Satz des Pythagoras die Länge der Hypotenuse berechnen.

  1. Ergänze die Funktion pythag im Programm so, dass das Puzzle gelöst wird.

  2. Warum wird der Inhalt von Variable x quadriert, obwohl innerhalb der Funktion die Variable a heißt?

Aufgabe A82 - Volumen des Kreiszylinders

Das Volumen eines Kreiszylinders wird mit der Formel berechnet.

Gegeben ist ein Puzzle und ein Programmfragment. Ergänze das Programm um die Funktion zylVolumen(r,h), die das Volumen berechnet und dessen Wert zurück gibt. Benutze wieder die Funktion quadrat aus Aufgabe A81.

>:)H4sIAAAAAAAACpWPvWoDMQzHd4HeQS+QgH2BhoCGt
tCl0PF256xLTO9kkO0c7dPXaUv3buL/hX4IpygzwsTPo
b4hBB4QznxAcGwInq8IA48Ip4uliLB3vgconPf9nrq8S
g0IW1JiGsNCAzlyrmc0rMKPR087GvPSVlGKUujVJJXPj
yVpFCsIc9Op9O6ab0ImIdJmqUpfTjpnhCcxma7a9PJd/
50q1LSK0Si2ica7e8tKL03fa8oq2t/7AQv8cAc6/pPAD
/7P+gK4XmIiJAEAAA==
var r = readNumber(); move("E");
var h = readNumber(); move("E");
var c = zylVolumen(r, h);
write(toFixed(c,0));

Verwende für die Aufgaben A83 und A84 Funktionen zum Zeichnen der Teilmuster.

Aufgabe A83 - Färben mit Funktionen

>:)H4sIAAAAAAAACk2OUWrDMAyG3w2+gw7QBcY22Ap5a
FPyMvbSG6ix3JjG8lDsDXKe3WQXm+KwMfiRQPr/T7Jm7
8hbM7QdZmukPZODU8CY2Fmzv0rQ1qgaEVUtqzTRiA630
kg17SNltOYzcNulKUmXCmc4ToV+kXD/tIN/O05MW3l8s
YYxUnt4foA76L+/5EIMMWToC99yUBNb4wsPcxvTB0Euw
vCOQTHDStT7gX2yZsuCCwRnLFkplwkLUGD98Uhc8qJbX
OqI/vC7mnA4w1uZMwksFIaRKUPRx6X4ipwJIo3icRgBi
1eiNSfNveJK1dyYASMc2CNfV0c9EmEiEv2kp8lp5gddn
wHNdwEAAA==

Aufgabe A84 - Färben mit Funktionen (2)

>:)H4sIAAAAAAAACm1OQWoDMQy8G/wHHVtI9xBSaAN7S
DbspfSSHyhrOWuylovXbmHf05/0Y5UdWgopyJIZzYxGq
60hq9XQdpi0iu2RDBwc+sBGq+05OhmNVBOb6ystVqB8K
hpL3XD+RYZbjpzxlFCrD8dtF6YQu5A5wX7K9BMF1psV/
NlxYLq250etGD21u6cNPED/9RlPxOBdgj7zJTkhMdyt7
7WymYe59eGdIOXI8IZOrIbiKhkc26DVVQ/GERwxJ5GeJ
sxAjiXnnjinRba4VIh+T6yqwuAMr3lOFGEhN4xMCbKEj
9lWy5nA0xgtDiNgtuKo1UF0L1hcRTcmQA87tsjnwqhHP
ExEUZL0NBnRfANaFzdEswEAAA==

Aufgabe A85 - Folge den Buchstaben

Achtung: Die Katze kann nur die Werte von Felder vor ihr einlesen! Man muss sie also geschickt manövrieren.

>:)H4sIAAAAAAAACk2PT0vEMBTE7w/yHeYDrMIiihRyW
P+sB8GDexC8ZdtpGmhSbBIrfnpfXYW9JI+8mcn8jDQde
yOtvXfFiLdPM5lw+KhuJt4DRyPJvhihfTSS7cHIYt+Mf
NnTrvFz6IwYAeAvNUfd+hpZnCpDWmN3BVfYao6LtLvba
1xgP42e6PSnu9oOubjjautrarON0ycx02lsE1I/GXkIP
NPBcz1d2iAkLBzbgXgN7VBq8sg6oFPDsyvfxJELvapjz
XmjjZiSSghX+1WVGbHn2CEXDkX7//EoDZl/76QBJ7CsF
dfFP6DO54w32OIH9zUROk8BAAA=

Zusatzaufgaben

Aufgabe Z81 - Schmetterling

Nutze Funktionen, um den Weg effektiv zu beschreiben!

>:)H4sIAAAAAAAACnWUzW6DMAzH75HyDn6ADYnusBUph
7XSdthtPVTaLQXzIdFUS2FIfZ49xm59sYUQiANtDpDYP
9v/OATOkgxzzjqxl3XNWSq2suGsEO8aUcHuu5UaOdPiE
zPODmJTt2aZFLoyS84Aun7AvWG9BrPvu5zzeu4mOfmms
rfIboGNxhlE1PUz7yGUN1pq8NpgO0ntymULIbCxgxOow
UEuVaDYzKMl46JHZBA1Z2yqkXGyPeN1jyOaaQ5VmGfhL
BFBSOfGslMDwy2FqnyJwUDj7WrsMwUd6bc0CAtyue5M5
3EHgQXiS/la4VGR7yDcHzneKfks2fwTClro2k4bSkVPO
w5bPgeIe3EMQXpi6+9rcsRGmtteqf6evzawiiF+4kzJI
4qvlxgeYZeWBmpQ15UqOMtblZ7F8fSD0LRacVbKcynit
Vzh+jlemV9HUqn8xNkGOywQsgrhQzYXBNnmkMkzFPr6p
xDesM4e4FSaac/sr78qQ7i0cEADlBpV1Cv8BwEqVw+RB
AAA

Aufgabe Z82 - Zum Gipfel

>:)H4sIAAAAAAAACm1RS07DMBDdjzR3mAuAYjtJq0pe8
BEsWLLrzk0niUXigu1QifP0DFygF2NchJAQs/Jo3nvz/
AZhs+ceobN3LiMM9jEyB3p+W1xkWiFUtkJQViFoqxGMN
Qi1rREa2yC0tkVYWcGt7RphM0S/RyAyWoak6qZtBEDK6
HYQjlJaGZlUneiRCG9mzg7h6EPZf5OpIVkS3Mx2u9Z0R
dtlpkf/2vOE0C+hS3Y+vDPlJQaK7PZ0jD6zCPnQHxDuP
dOTyx9M85ISJd+N5OeZI7mlJ/aBaTx/jhw50QNP4jXwT
v57Ae74yIM0O1+YTHuXCrobU+YLmjhGFmS+RrhlT8NUO
hoPY2FxcN24czFLU9AsFl9cKOJMH0t/Pk2TH4qJJG7S8
XwaJw4i9X2BP9H/plmV0lpL8JKb0qauS5RVpXSttTyNM
bVupOQol7qE/v1cDXKb9qf+CXxFQvsCndRNygYCAAA=

Aufgabe Z83 - Sortieren

>:)H4sIAAAAAAAACoVRy2rDQAy8C/QP+oC2+G03sIe00
N4KTW65ubbsLMRrKq9ryLf11h+rbOcQSiGY9Wh3RxrtC
GFTc4NQmefS7xFa8yrMjvafYylMKYKYHdeXPUJgAoTQh
AiRiRBiEyMkJkFIjXIzkyHkJkcoTIGwacXWWlvLhnEWJ
YKghx37EmGyzryN3UDh8lGkv4goVoiJEoWEKFXQiq7s2
ByKmO5p34u3LOwQmtFVg+n6LyY/iiPhsqZJrNc2N9Y1P
cKTWNcy1ZbpUB5P+q7zZIfqqEGt64PtDO9jWUvpNbJu4
Yqtjt5q4o6tcpv+1PIDwnZsNK2jVn6+nbJf+FTT4Pnol
6ytO6uGMuQidrccD2vHniaWWW3oT3qn5Vbj/xiur71yr
cizNAlv2aZGzbalq23ZaltOGoU0T+E/nVDHeCWU51Ecp
Xka3xS7zEhhFtNRzWIKs5h2kK9QrB08rhAGMyIMVS9so
iBQ8V8aSLbeeQIAAA==

Aufgabe Z84 - Median

Der Median kann auf folgende Weise bestimmt werden:

Nutze deinen Algorithmus aus Z83

>:)H4sIAAAAAAAACm2RzU7DMAyA75b8Dn4Bpv63muTDQ
IITSDCJw26hcddIayrSlEl7Nm68GN7GYQxOcWL7i/UZY
WmlQ2j5zsQ1wpYfgoin9ftsglCJEPhF7M8dIeEEIeUUI
eMMIeccoeACoWStrbhCqLlGaLhBWG6Ds8pWbJpXWREQ9
HGQaBD2zvPTPExUUUoK8WYQ3jQF3dCjWGc8Qjf7duJh/
BCKc/AUxFjaBxd1jqXz3YhwK0Ha3gtZnfncp2Ggjel3+
nLYu6ntNTim38Qdj+fZ2GCi+AXCau40NdA2fH16zd3Lz
tIUpY9kndDKH5RzAdQWhHXbB3Fvv/50+oWZKIxRThAtP
Hu98ql6LqQ0dVUW6bWVV7OjWqWUCzX6LyXVHVxg6jrLs
7Iu8z+ok+A0VZhuaGrHIJwliXZ/A005wuj3AQAA

Aufgabe Z85 - Taschenrechner

Schwerste Aufgabe im Kurs!

>:)H4sIAAAAAAAACnWSwW7bMAyG7wT4DjzL9RDbcRoE4
KEbth1XNMUOvSk24whNmI2W2z7cbnuxMi2w9LBAB4HCx
1+/fgph1csWoeMvMa8RBv5uIkrr31M0QTC+k/5fNeMZQ
sUVQs01QsMNwpznCC23CAteIFzzNcKSlwgvzAgFFwgll
wiBA8JqsNT7bY4UTbl4GRD88CA5Ijwn5Z9xTwuqyNU0H
oQfli2VdB/Hbidq0u1UDGE7aTfy4fgklCdTMok9PVvKb
nGVdHtEWHc7k7QRSkp9HGmwv39U6Jvs+7f6qw2y0TRSL
0Z3Liwap+0QN/IJ4bPEbpeFbid9zPR0NFpnSydFNzDp4
MjNfqQfv8RiTkf1vLJJ9k0no+LKLU/aUyCXdPY94Q9PL+
vQXHy653pGHSyqi6gnfUab4Kuch/+HWs2c92md+Sq4eJ
iH9lJHfbqh9oGfe9qyLpui9tG1YXbBWHVy5h/hFRs97o
laAgAA