1
Programmierung mit JavaScript
2 Programmierung mit JavaScript
document:Dokument
formular:Formular
: A eGroesse: Eingabefeld
<script type="text/javascript"><!-- var groesse, gewicht, bmi; function berechnen() { groesse = document.formular.eGroesse.value; gewicht = document.formular.eGewicht.value; bmi = gewicht/(groesse*groesse); document.formular.aBMI.value = bmi; }//--></script>bRechnen: Button
: A eGewicht: Eingabefeld
: A
value="Berechnen" onClick="berechnen()"
: A aBMI: Eingabefeld
3 Teil 1
Interaktive Web-Seiten
4 Body-Mass-Index
http://www.actifit.ch/ActifitWomenOnly/Pages/bmi.htm
Eingabefeld
Button
5 Body-Mass-Index
...<script language="javascript">...function detBMI(aWeight, aHeight) { aHeight = aHeight / 100; return Math.round(aWeight/eval(aHeight * aHeight));}... </script>...
Darstellung der Web-Seite
Ausschnitt aus dem Quelltext
6 Browser als JavaScript-Interpreter
Browser
(Client)
WWW-Server
(Server)
Fordert ein Dokument an
Liefert das Dokument aus
www.actifit.ch
ActifitWomenOnly/Pages/bmi.htm
http
Der Browser zeigt die ausgelieferte Webseite an und führt das integrierte JavaScript-Programm (bei Bedarf) aus.
...<script language="javascript">...function detBMI(aWeight, aHeight) { aHeight = aHeight / 100; return Math.round(aWeight/eval(aHeight * aHeight));}... </script>...
http://www.actifit.ch/ActifitWomenOnly/Pages/bmi.htm
7 Zielsetzung
Ziel ist es, anhand einer vereinfachten Version den Aufbau einer interaktiven Web-Seite zu verstehen.
Vereinfachte Webseite
8
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>BMI</title><script type="text/javascript">...</script> </head><body><h2>Berechnen Sie Ihren BMI-Wert!</h2><form action ="" name="formular"><p>Groesse (in m): <input type="text" name="eGroesse" value="2.00"></p><p>Gewicht (in kg): <input type="text" name="eGewicht" value="100"></p><p><input type="button" name="bRechnen" value="Berechnen" onClick="berechnen()"></p><p>BMI: <input type="text" name="aBMI"></p></form></body></html>
Quelltext zur Webseite
9
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>BMI</title><script type="text/javascript">...</script> </head><body><h2>Berechnen Sie Ihren BMI-Wert!</h2><form action ="" name="formular"><p>Groesse (in m): <input type="text" name="eGroesse" value="2.00"></p><p>Gewicht (in kg): <input type="text" name="eGewicht" value="100"></p><p><input type="button" name="bRechnen" value="Berechnen" onClick="berechnen()"></p><p>BMI: <input type="text" name="aBMI"></p></form></body></html>
Struktur der Webseite
document:Dokument
: Überschrift
formular:Formular
: Absatz
: Absatz
eGroesse:EingabefeldeGewicht:EingabefeldbRechnen:Button
aBMI:Eingabefeld
: Absatz
: Zeichen
: Zeichen...
: Absatz
: Zeichen ... : Zeichen
......enthält
10
document:Dokument
Objekthierarchie
: Überschrift
formular:Formular
eGroesse:EingabefeldeGewicht:EingabefeldbRechnen:Button
aBMI:Eingabefeld
: Zeichen
......enthält
: Zeichen ... : Zeichen
<!DOCTYPE HTML ...><html>...</html>
<form action ="" name="formular">...</form>: A
: A
: A
: A
<input type="text" name="eGroesse" value="2.00"><input type="text" name="eGewicht" value="100"><input type="button" name="bRechnen" ...>
<input type="text" name="aBMI">
Objekttyp
Objektname
11 Eigenschaften von Objekten
eGroesse:Eingabefeld
<form action ="" name="formular">...</form>
: A<input type="text" name="eGroesse" value="2.00">
value = "2.00" ...
formular:Formular
action = ...
document:Dokument
title = ...
Attribut Attributwert
12 Ereignisbehandlung
document:Dokument
formular:Formular
: A eGroesse: Eingabefeld
<script type="text/javascript"><!-- var groesse, gewicht, bmi; function berechnen() { groesse = document.formular.eGroesse.value; gewicht = document.formular.eGewicht.value; bmi = gewicht/(groesse*groesse); document.formular.aBMI.value = bmi; }//--></script>bRechnen: Button
: A eGewicht: Eingabefeld
: A
value="Berechnen" onClick="berechnen()"
: A aBMI: Eingabefeld
Wenn der Benutzer auf den Button drückt, löst er ein Ereignis aus, das vom sog. „Eventhandler“ bearbeitet wird. Dieser Eventhandler veranlasst, die Javascript-Funktion „berechnen()“ auszuführen.
13 Variablen
document:Dokument
formular:Formular
: A eGroesse: Eingabefeldvalue = "2.00"
<script type="text/javascript"><!-- var groesse, gewicht, bmi; function berechnen() { groesse = document.formular.eGroesse.value; gewicht = document.formular.eGewicht.value; bmi = gewicht/(groesse*groesse); document.formular.aBMI.value = bmi; }//--></script>
eGewicht: Eingabefeldvalue = "100"
aBMI: Eingabefeld
value = ""
bRechnen: Buttongroesse:
gewicht:
bmi:
: A
: A
: A
14 Zugriff auf Attributwerte
eGroesse:Eingabefeldvalue = "2.00" ...
formular:Formular
action = ...
document:Dokument
title = ...
document.formular.eGroesse.value : "2.00"
<script type="text/javascript"><!-- var groesse, gewicht, bmi; function berechnen() { groesse = document.formular.eGroesse.value; gewicht = document.formular.eGewicht.value; bmi = gewicht/(groesse*groesse); document.formular.aBMI.value = bmi; }//--></script> groesse:
gewicht:
bmi:
: A
15 Kopieren der Eingabewerte
<script type="text/javascript"><!-- var groesse, gewicht, bmi; function berechnen() { groesse = document.formular.eGroesse.value; gewicht = document.formular.eGewicht.value; bmi = gewicht/(groesse*groesse); document.formular.aBMI.value = bmi; }//--></script> groesse: "2.00"
gewicht: "100"
bmi:
document:Dokument
formular:Formular
: A eGroesse: Eingabefeldvalue = "2.00"
eGewicht: Eingabefeldvalue = "100"
aBMI: Eingabefeld
value = ""
bRechnen: Button
: A
: A
: A
16 Verarbeitung
<script type="text/javascript"><!-- var groesse, gewicht, bmi; function berechnen() { groesse = document.formular.eGroesse.value; gewicht = document.formular.eGewicht.value; bmi = gewicht/(groesse*groesse); document.formular.aBMI.value = bmi; }//--></script> groesse: "2.00"
gewicht: "100"
bmi: 25.0
document:Dokument
formular:Formular
: A eGroesse: Eingabefeldvalue = "2.00"
eGewicht: Eingabefeldvalue = "100"
aBMI: Eingabefeld
value = ""
bRechnen: Button
: A
: A
: A
17 Kopieren des Ausgabewerts
<script type="text/javascript"><!-- var groesse, gewicht, bmi; function berechnen() { groesse = document.formular.eGroesse.value; gewicht = document.formular.eGewicht.value; bmi = gewicht/(groesse*groesse); document.formular.aBMI.value = bmi; }//--></script> groesse: "2.00"
gewicht: "100"
bmi: 25.0
document:Dokument
formular:Formular
: A eGroesse: Eingabefeldvalue = "2.00"
eGewicht: Eingabefeldvalue = "100"
aBMI: Eingabefeld
value = "25.0"
bRechnen: Button
: A
: A
: A
18 EVA-Prinzip
<script type="text/javascript"><!-- var groesse, gewicht, bmi; function berechnen() { // Eingabe groesse = document.formular.eGroesse.value; gewicht = document.formular.eGewicht.value; // Verarbeitung bmi = gewicht/(groesse*groesse); // Ausgabe document.formular.aBMI.value = bmi; }//--></script>Viele Programme lassen sich nach dem EVA-Prinzip entwerfen:
Man versucht, die Verarbeitungsprozesse nach dem Muster „Eingabe, Verarbeitung, Ausgabe“ zu gliedern.
E
V
A
19 Algorithmus
<script type="text/javascript"><!-- var groesse, gewicht, bmi; function berechnen() { // Eingabe groesse = document.formular.eGroesse.value; gewicht = document.formular.eGewicht.value; // Verarbeitung bmi = gewicht/(groesse*groesse); // Ausgabe document.formular.aBMI.value = bmi; }//--></script>
Eingabe: groesse, gewicht
bmi = gewicht/(groesse*groesse)
Ausgabe: bmi
Algorithmus
JavaScript-Programm
Struktur und Verhalten eines Programms lassen sich oft besser verstehen, wenn man den zu Grunde liegenden Algorithmus herausstellt.
20 Algorithmus
Eingabe: groesse, gewicht
bmi = gewicht/(groesse*groesse)
Ausgabe: bmi
E
V
A
Algorithmus zur Berechnung des BMI-Werts:
Struktur und Verhalten eines Programms lassen sich oft besser verstehen, wenn man den zu Grunde liegenden Algorithmus herausstellt.
21 Übung
Ziel ist es, ein interaktives Programm zur Flächeninhaltsberechnung zu entwickeln.
Verhaltensbeschreibung:Eingabe: Länge und Breite eines RechtecksAusgabe: Umfang und Flächeninhalt des Rechtecks
Entwerfen Sie zunächst- eine geeignete Benutzungsoberfläche und- einen Algorithmus zum gewünschten Verhalten.
Entwickeln Sie anschließend das Programm in Analogie zum BMI-Programm.
22 Übung
Ziel ist es, ein interaktives Programm zur Umrechnung eines Euro-Betrags in US-Dollar zu entwickeln.
Entwerfen Sie zunächst- eine Verhaltensbeschreibung (Eingaben und Ausgaben),- eine geeignete Benutzungsoberfläche und- einen Algorithmus zum gewünschten Verhalten.
Entwickeln Sie anschließend das Programm in Analogie zum BMI-Programm.
Hinweis: Aktuelle Kursdaten finden Sie unter http://dollar-kurse.de.
23 Teil 2
Variablenkonzept
24 Mäusepopulation
Wir betrachten die Entwicklung einer Mäusepopulation. Die Population wird unterteilt in junge Mäuse, erwachsene Mäuse und alte Mäuse. Wir gehen von den folgenden Annahmen aus:- In einem Simulationsschritt wird die Hälfte der jungen Mäuse erwachsen.- In einem Simulationsschritt erzeugt jede erwachsene Maus (im Durchschnitt) 4 junge Mäuse. Nur ein Drittel der erwachsenen Mäuse wird in einem Simulationsschritt alt.- In einem Simulationsschritt erzeugt jede alte Maus (im Durchschnitt) 2 junge Mäuse. Alle alten Mäuse sterben innerhalb dieses Simulationsschrittes.
25 Mäusepopulation
jung
6
erw.
9
alt
12
jung
60
erw.
3
alt
3
1/2 1/34 2
Schritt
0
Schritt
1
i i+1
26 Entwicklung der Mäusepopulation
Schritt Anzahl der Anzahl der Anzahl derjungen Mäuse erw. Mäuse alten Mäuse
0 6 9 12
1 60 = 4*9 + 2*12 3 = 6:2 3 = 9:32 18 = 4*3 + 2*3 30 = 60:2 1 = 3:33 122 = 4*30 + 2*1 9 = 18:2 10 = 30:34 56 = 4*9 + 2*10 61 = 122:2 3 = 9:35 250 = 4*61 + 2*3 28 = 56:2 20,3.. = 61:3
...
Zielsetzung: Automatisierung der Berechnung der jeweils nächsten Mäusepopulation
27 Berechnungsmodell
0
6.0
9.0
12.0
Schritt :
jung :
erwachsen :
alt :
Die zu verarbeitenden Daten werden in Speicherzellen abgelegt und mit Hilfe von Variablen verwaltet.
Variablenname
Speicherzelle
Variablenwert
{Schritt: [0]; jung: [6.0]; erwachsen: [9.0]; alt: [12.0]} Variablenzustand
28 Berechnungsmodell
alt 12.0
Variablenzustand vorher
Wertzuweisung
{Schritt: [0]; jung: [6.0]; erwachsen: [9.0]; alt: [...]}
Variablenzustand nachher{Schritt: [0]; jung: [6.0]; erwachsen: [9.0]; alt: [12.0]}
erwachsen jung / 2
{Schritt: [0]; jung: [6.0]; erwachsen: [9.0]; alt: [12.0]}
{Schritt: [0]; jung: [6.0]; erwachsen: [3.0]; alt: [12.0]}
Schritt Schritt +1
{Schritt: [0]; jung: [6.0]; erwachsen: [3.0]; alt: [12.0]}
{Schritt: [1]; jung: [6.0]; erwachsen: [3.0]; alt: [12.0]}
Eine Veränderung eines Speicherzelleninhalts kann mit Hilfe einer Wertzuweisung (an die entsprechende Variable) erfolgen.
Variablenzustand vorher
Wertzuweisung
Variablenzustand nachher
Variablenzustand vorher
Wertzuweisung
Variablenzustand nachher
29 Struktur einer Wertzuweisung
Schritt = Schritt + 1
Struktur einer Wertzuweisung (vorläufig): Eine Wertzuweisung besteht aus einer Variablen (der ein Wert zugewiesen wird) und einem Term (der den zuzuweisenden Wert festlegt).
alt = 12.0
erwachsen = jung / 2
Variable Term Wertzuweisung - Struktur
Wertzuweisungen in JavaScript
30 Auswertung einer Wertzuweisung
0Schritt : Variablenzustand vorher
Variable Term
Variablenzustand nachher
1
Schritt Schritt + 1
1Schritt :
Auswertung einer Wertzuweisung: Der Wert des Terms (rechte Seite der Wertzuweisung) wird bzgl. des aktuellen Variablenzustands ermittelt und der Variablen (linke Seite der Wertzuweisung) als neuer Wert zugewiesen. Der Inhalt der zur Variablen gehörenden Speicherzelle wird dabei überschrieben.
31
Berechnung einer neuen Population
vorher Die eingeführten Variablen beschreiben die Anfangspopulation. {Schritt: [0]; jung: [6.0]; erwachsen: [9.0]; alt: [12.0]}
nachher Die Variablen beschreiben die Population nach einem Simulationsschritt. {Schritt: [1]; jung: [60.0]; erwachsen: [3.0]; alt: [3.0]}
Algorithmus
Schritt Schritt + 1
jung erwachsen*4 + alt*2
erwachsen jung / 2
alt erwachsen / 3
Problemspezifikation
Vorschlag für einen Algorithmus
32 Trace-Tabelle
Variablenzustand
Schritt jung erw. alt
0 6.0 9.0 12.0
1 6.0 9.0 12.0
1 60.0 9.0 12.0
1 60.0 30.0 12.0
1 60.0 30.0 10.0
Wertzuweisung
Schritt Schritt + 1
jung erwachsen*4 + alt*2
erwachsen jung / 2
alt erwachsen / 3
Trace-Tabelle
Mit Hilfe einer Trace-Tabelle kann man die einzelnen Berechnungsschritte verfolgen.
Nicht korrekt!
33 Reihenfolge von Wertzuweisungen
Variablenzustand
Schritt jung erw. alt hilf
0 6.0 9.0 12.0
1 6.0 9.0 12.0
1 6.0 9.0 12.0 60.0
1 6.0 9.0 3.0 60.0
1 6.0 3.0 3.0 60.0
1 60.0 3.0 3.0 60.0
Wertzuweisung
Schritt Schritt + 1
hilf erwachsen*4 + alt*2
alt erwachsen / 3
erwachsen jung / 2
jung hilf
Beachte: Bei der Datenverarbeitung mit Hilfe von Wertzuweisungen muss man auf die Reihenfolge der Wertzuweisungen achten.
Trace-Tabelle
korrekt!
34 Algorithmus
Eingabe: Schritt, jung, erwachsen, alt
Schritt Schritt + 1
hilf erwachsen*4 + alt*2
alt erwachsen / 3
erwachsen jung / 2
jung hilf
Ausgabe: Schritt, jung, erwachsen, alt
E
V
A
Algorithmus zur Berechnung des jeweils nächsten Populationszustands:
35 Aufgabe
Testen Sie den folgenden Implementierungsversuch (siehe „Maeuse1“).var Schritt, jung, erwachsen, alt, hilf;
function berechnen(){ // Eingabe Schritt = document.formular.eSchritt.value; jung = document.formular.eJung.value; erwachsen = document.formular.eErwachsen.value; alt = document.formular.eAlt.value; // Verarbeitung Schritt = Schritt + 1; hilf = erwachsen*4 + alt*2; alt = erwachsen/3; erwachsen = jung/2; jung = hilf; // Ausgabe document.formular.eSchritt.value = Schritt; document.formular.eJung.value = jung; document.formular.eErwachsen.value = erwachsen; document.formular.eAlt.value = alt;}
36
function berechnen(){ // Eingabe Schritt = document.formular.eSchritt.value; jung = document.formular.eJung.value; erwachsen = document.formular.eErwachsen.value; alt = document.formular.eAlt.value; // Verarbeitung Schritt = Schritt + 1; hilf = erwachsen*4 + alt*2; alt = erwachsen/3; erwachsen = jung/2; jung = hilf; // Ausgabe document.formular.eSchritt.value = Schritt; document.formular.eJung.value = jung; document.formular.eErwachsen.value = erwachsen; document.formular.eAlt.value = alt;}
Programmtest: Maeuse1
Hier stimmt etwas nicht!
37
...document.write("Deklaration: var a: <br>");document.write("a hat den Datentyp <i>"+typeof(a)+"</i>.<br><br>");a = 1;document.write("Anweisung: a = 1: <br>");document.write("a hat den Datentyp <i>"+typeof(a)+"</i>.<br><br>");a = "1";document.write('Anweisung: a = "1": <br>');document.write("a hat den Datentyp <i>"+typeof(a)+"</i>.<br><br>");a = a+1;document.write("Anweisung: a = a+1: <br>");document.write("a hat den Datentyp <i>"+typeof(a)+"</i>.<br><br>");a = a*1;document.write("Anweisung: a = a*1: <br>");document.write("a hat den Datentyp <i>"+typeof(a)+"</i>.<br><br>");a = "1";document.write('Anweisung: a = "1": <br>');document.write("a hat den Datentyp <i>"+typeof(a)+"</i>.<br><br>");a = parseInt(a);document.write("Anweisung: a = parseInt(a): <br>");document.write("a hat den Datentyp <i>"+typeof(a)+"</i>.<br><br>")...
Programm: Typentest
38 Datentypen
Ein Datentyp legt einen Wertebereich und die Grundoperationen fest, die mit den Elementen des Wertebereichs durchgeführt werden können.
Datentyp: number (JavaScript)
Der Datentyp number beschreibt ganze Zahlen wie 1 oder -1 und Dezimalzahlen wie 3.14 oder -2.1. Beachte, dass der Wertebereich insgesamt endlich ist. Operationen: 3 + 2 53 – 2 13 * 2 63 / 2 1.53 % 2 1 (Rest bei ganzzahliger Division)
Datentyp: string (JavaScript)
Der Datentyp string beschreibt Zeichenketten wie "hallo" oder "Anweisung: a = 2". Grundoperation: "2" + "5" "25" (Konkatenation)
39
...function berechnen(){ Schritt = document.formular.eSchritt.value; jung = document.formular.eJung.value; erwachsen = document.formular.eErwachsen.value; alt = document.formular.eAlt.value; Schritt = Schritt + 1; hilf = erwachsen*4 + alt*2; alt = erwachsen/3; erwachsen = jung/2; jung = hilf; document.formular.eSchritt.value = Schritt; document.formular.eJung.value = jung; document.formular.eErwachsen.value = erwachsen; document.formular.eAlt.value = alt;}...<form action ="" name="formular"><p>Anzahl der Simulationsschritte: <input type="text" name="eSchritt" value="0"></p>
Zahl oder Zeichenkette?
Zeichenkette
"0" + "1" "01"
Schritt "0"
"0" + 1 ?
0 + 1 1
40
...function berechnen(){ Schritt = document.formular.eSchritt.value; jung = document.formular.eJung.value; erwachsen = document.formular.eErwachsen.value; alt = document.formular.eAlt.value; Schritt = Schritt + 1; hilf = erwachsen*4 + alt*2; alt = erwachsen/3; erwachsen = jung/2; jung = hilf; document.formular.eSchritt.value = Schritt; document.formular.eJung.value = jung; document.formular.eErwachsen.value = erwachsen; document.formular.eAlt.value = alt;}...<form action ="" name="formular"><p>Anzahl der Simulationsschritte: <input type=text name="eSchritt" value="0"></p>
Automatische Typumwandlung
Eingabe: string
Umwandlung: string number
Umwandlung: number string
Ausgabe: string7
41
...function berechnen(){ Schritt = parseInt(document.formular.eSchritt.value); jung = parseInt(document.formular.eJung.value); erwachsen = parseInt(document.formular.eErwachsen.value); alt = parseInt(document.formular.eAlt.value); Schritt = Schritt + 1; hilf = erwachsen*4 + alt*2; alt = erwachsen/3; erwachsen = jung/2; jung = hilf; document.formular.eSchritt.value = Schritt; document.formular.eJung.value = jung; document.formular.eErwachsen.value = erwachsen; document.formular.eAlt.value = alt;}...<form action ="" name="formular"><p>Anzahl der Simulationsschritte: <input type=text name="eSchritt" value="0"></p>
Explizite Typumwandlung
parseInt: string number
Autom. Umwandlung:
number string
Ausgabe: string
Eingabe: string
42 JavaScript und Typen
JavaScript ist nicht typisiert.
Der Typ einer Variablen wird bei einer Variablendeklaration nicht festgelegt.
JavaScript wandelt Typen automatisch um.
JavaScript versucht, aus dem Kontext (z. B. durchzuführende Operationen) zu erschließen, von welchem Typ die zu verarbeitenden Werte sind. Hierdurch kann es zu automatischen Typumwandlungen kommen.Vorteil:
Beim Programmieren mit JavaScript muss man sich oft nicht um Typen kümmern. Das macht die Sache einfacher.
Nachteil:
Fehler sind manchmal schwer zu finden. Die Klarheit leidet durch die nicht im Text angezeigten Umwandlungsoperationen.
43 Aufgabe
Ergänzen Sie im Programm „Maeuse1“ die erforderlichen Typumwandlungen.
Testen Sie anschließend das neue Programm.
44 Teil 3
Kontrollstrukturen
45 Bisher: Sequentielle Algorithmen
Eingabe: Schritt, jung, erwachsen, alt
Schritt Schritt + 1
hilf erwachsen*4 + alt*2
alt erwachsen / 3
erwachsen jung / 2
jung hilf
Ausgabe: Schritt, jung, erwachsen, alt
Eingabe: gewicht, groesse
bmi gewicht/(groesse*groesse);
Ausgabe: bmi
BMI-Berechnung Mäusepopulation
46 Variationen zur BMI-Berechnung
Das Programm zur Berechnung des BMI-Werts soll dem Benutzer weitere Informationen in Abhängigkeit des berechneten Werts liefern.
47 Zweiseitige Fallunterscheidung
BMI
bmi gewicht/(groesse*groesse)
bmi < 19ja nein
bewertung
"Untergewicht"
bmi > 26ja nein
bewertung
"Übergewicht"
bewertung
"Normalgewicht"
48 Zweiseitige Fallunterscheidung
function berechnen(){ groesse = parseFloat(document.formular.eGroesse.value); gewicht = parseFloat(document.formular.eGewicht.value); bmi = gewicht/(groesse*groesse); if (bmi < 19) { bewertung = "Untergewicht"; } else { if (bmi > 26) { bewertung = "Übergewicht"; } else { bewertung = "Normalgewicht"; }; }; document.formular.aBMI.value = bmi; document.formular.aBewertung.value = bewertung;}
49 Einseitige Fallunterscheidung
BMI
bmi gewicht/(groesse*groesse)
bewertung "Normalgewicht"
bmi < 19ja nein
bewertung
"Untergewicht"
bmi > 26ja nein
bewertung
"Übergewicht"
50 Einseitige Fallunterscheidung
function berechnen(){ groesse = parseFloat(document.formular.eGroesse.value); gewicht = parseFloat(document.formular.eGewicht.value); bmi = gewicht/(groesse*groesse); bewertung = "Normalgewicht"; if (bmi < 19) { bewertung = "Untergewicht"; }; if (bmi > 26) { bewertung = "Übergewicht"; }; document.formular.aBMI.value = bmi; document.formular.aBewertung.value = bewertung;}
51 Mehrfachauswahl
BMI
bmi Runden(gewicht/(groesse*groesse))
bmi
18 19 20 ... sonst
bewertung
"etwas zu
wenig"
bewertung
"am unteren
Limit"
bewertung
"wenig, aber
ok"
...
bewertung
"außerhalb des
Bereichs"
52 Mehrfachauswahl
function berechnen(){ groesse = parseFloat(document.formular.eGroesse.value); gewicht = parseFloat(document.formular.eGewicht.value); bmi = Math.round(gewicht/(groesse*groesse)); switch (bmi) { case 18: bewertung = "etwas zu wenig"; break; case 19: bewertung = "am unteren Limit"; break; case 20: bewertung = "wenig, aber ok"; break; ... default: bewertung = "außerhalb des Bereichs"; break; }; document.formular.aBMI.value = bmi; document.formular.aBewertung.value = bewertung;}
53 Variationen zur Mäusepopulation
Entwicklung der Mäusepopulation:- In einem Simulationsschritt wird die Hälfte der jungen Mäuse erwachsen.- In einem Simulationsschritt erzeugt jede erwachsene Maus (im Durchschnitt) 4 junge Mäuse. Nur ein Drittel der erwachsenen Mäuse wird in einem Simulationsschritt alt.- In einem Simulationsschritt erzeugt jede alte Maus (im Durchschnitt) 2 junge Mäuse. Alle alten Mäuse sterben innerhalb dieses Simulationsschritts.
Berechne die Population nach einer vorgegebenen Anzahl von Schritten.
Berechne, nach wie vielen Schritten die Population eine vorgegebene Grenze überschreitet.
Berechne, nach wie vielen Schritten die Population einen bestimmten Wert erreicht.
Berechnungsaufgaben:
54
Mäusepopulation
zaehler 0
SOLANGE (zaehler < 10)
...
zaehler zaehler+1
Zählschleife
Initialisierung
Test
Aktualisierung
Mäusepopulation
zaehler 0
SOLANGE (zaehler < 10)
schritt schritt + 1
hilf erwachsen*4 + alt*2
alt erwachsen/3
erwachsen jung/2
jung hilf
gesamt jung+erwachsen+alt
zaehler zaehler+1
Berechne die Population nach einer vorgegebenen Anzahl von Schritten.
55 Implementierung
...zaehler = 0;while (zaehler < 10){ Schritt = Schritt + 1; hilf = erwachsen*4 + alt*2; alt = erwachsen/3; erwachsen = jung/2; jung = hilf; gesamt = jung + erwachsen + alt; zaehler = zaehler + 1;};...
Implementierung mit einer while-Anweisung
Mäusepopulation
zaehler 0
SOLANGE (zaehler < 10)
schritt schritt + 1
hilf erwachsen*4 + alt*2
alt erwachsen/3
erwachsen jung/2
jung hilf
gesamt jung+erwachsen+alt
zaehler zaehler+1
Programmausschnitt
56 Implementierung
...for (zaehler = 0; zaehler < 10; zaehler = zaehler+1){ Schritt = Schritt + 1; hilf = erwachsen*4 + alt*2; alt = erwachsen/3; erwachsen = jung/2; jung = hilf; gesamt = jung + erwachsen + alt;};...
Implementierung mit einer for-Anweisung
Programmausschnitt
...zaehler = 0;while (zaehler < 10){ Schritt = Schritt + 1; hilf = erwachsen*4 + alt*2; alt = erwachsen/3; erwachsen = jung/2; jung = hilf; gesamt = jung + erwachsen + alt; zaehler = zaehler + 1;};...
57 Wiederholung mit ...
Berechne, nach wie vielen Schritten die Population eine vorgegebene Grenze überschreitet.
Mäusepopulation
zaehler 0
SOLANGE (gesamt < grenze)
hilf erwachsen*4 + alt*2
alt erwachsen/3
erwachsen jung/2
jung hilf
gesamt jung+erwachsen+alt
zaehler zaehler+1
Mäusepopulation
zaehler 0
SOLANGE (gesamt < grenze)
hilf erwachsen*4 + alt*2
alt erwachsen/3
erwachsen jung/2
jung hilf
gesamt jung+erwachsen+alt
zaehler zaehler+1
Anfangsbedingung
Endbedingung
58 ... Anfangs- bzw. Endbedingung
Bed.
Anw.
w
f
Bed.
Anw.
fw
Beachte: Die Anweisung wird hier mindestens einmal ausgeführt.
WH mit Anfangsbedingung
SOLANGE Bedingung
Anweisungsfolge
WH mit Endbedingung
SOLANGE Bedingung
Anweisungsfolge
Erst die Bedingung überprüfen, dann die Anweisungen ausführen!
Erst die Anweisungen ausführen, dann die Bedingung überprüfen!
59 Endbedingungen
Bed.
Anw.
fw
JavaScript: do {...} while (...);
WH mit Endbedingung
SOLANGE Bedingung
Anweisungsfolge
Bed.
Anw.
wf
Pascal, Delphi: repeat ... until ...;
WH mit Endbedingung
BIS Bedingung
Anweisungsfolge
Austritt aus der Schleife, wenn die Endbedingung nicht mehr erfüllt ist.
Austritt aus der Schleife, wenn die Endbedingung erfüllt ist.
60 Vorsicht: Endlosschleife
Berechne, nach wie vielen Schritten die Population einen bestimmten Wert erreicht.
Mäusepopulation
zaehler 0
SOLANGE (alt != 100)
hilf erwachsen*4 + alt*2
alt erwachsen/3
erwachsen jung/2
jung hilf
gesamt jung+erwachsen+alt
zaehler zaehler+1
Achtung:Bei bestimmten Eingaben nicht
erfüllbar!
61 Kontrollstrukturen
Kontrollstrukturen dienen dazu, den genauen Ablauf der Verarbeitung festzulegen. Wichtige Kontrollstrukturen sind die - Sequenz(bildung),- Fallunterscheidung,- Wiederholung.
62 Hinweise zur Implementierung
Sequenz:
Anweisungen{ ...};
Eine Sequenz von Anweisungen wird durch einen Anweisungsblock implementiert. Blockanfang und Blockende werden mit Hilfe von geschweiften Klammern markiert.
63 Hinweise zur Implementierung
Fallunterscheidung (zweiseitig)
Fallunterscheidung (einseitig)
Vergleichsoperatoren (für Zahlen):
== (gleich)!= (ungleich)< (kleiner)> (größer)<= (kleiner oder gleich)>= (größer oder gleich)
if (...){ ...};
Anweisungen
Bedingung
if (...){ ...}else{ ...};
Anweisungen
Anweisungen
Bedingung
64 Hinweise zur Implementierung
Wiederholung mit Anfangsbedingung
while (...){ ...};
Anweisungen
Bedingung
Wiederholung mit Endbedingung
do{ ...}while (...);
Anweisungen
Bedingung
Zählschleife
for (...; ...; ...){ ...};
Anweisungen
Initialisierung
Bedingung
Aktualisierung
65 Übungen
Annahmen über die Mäusepopulation:Sind weniger als 1000 Mäuse in der Population, so verhalten sich die Mäuse wie bisher: - In einem Simulationsschritt wird die Hälfte der jungen Mäuse erwachsen.- In einem Simulationsschritt erzeugt jede erwachsene Maus (im Durchschnitt) 4 junge Mäuse. Nur ein Drittel der erwachsenen Mäuse wird in einem Simulationsschritt alt.- In einem Simulationsschritt erzeugt jede alte Maus (im Durchschnitt) 2 junge Mäuse. Alle alten Mäuse sterben innerhalb dieses Simulationsschrittes.Ab 1000 Mäuse wird das Futter knapp. Alte Mäuse erzeugen dann keine jungen Mäuse mehr und jede erwachsene Maus erzeugt (im Durchschnitt) nur noch 1.5 junge Mäuse.Berücksichtigen Sie die oben dargestellten Veränderungen der
Population. Das Simulationsprogramm soll des weiteren um folgende Eingabe erweitert werden: Der Benutzer kann die Anzahl der Schritte, die jeweils berechnet werden, selbst festlegen (z. B. 5 Schritte).
66 Übungen
Der folgende Algorithmus beschreibt das Heron-Verfahren zur näherungsweisen Berechnung von Quadratwurzeln.
Implementieren und testen Sie diesen Algorithmus.
Heron-Verfahren
Eingabe: a, epsilon (beide > 0)
a > 1?ja nein
x - a
y - 1
x - 1
y - a
solange (x-y > epsilon)
x - (x+y)/2
y -a/x
Ausgabe: x, x²
Siehe auch:
http://hsg.region-kaiserslautern.de/faecher/inf/javascript/0304/index.php
67 Übungen
Entwickeln und implementieren Sie Algorithmen, mit denen man
- alle Teiler einer eingegebenen natürlichen Zahl bestimmen kann,
- testen kann, ob eine eingegebene Zahl eine Primzahl ist,
- alle Primzahlen bis zu einer eingegebenen Obergrenze bestimmen kann.Siehe auch:
http://hsg.region-kaiserslautern.de/faecher/inf/javascript/0304/index.php