PMG1719/GL 5
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Javascript</language>
<font color = grey>Diese Beispiele sind z.T. dem ''Brückenkurs Webapps der HS Zittau/Görlitz entnommen.''</font>
== Zählschleife ==
Das wiederholte Aufschreiben von Code ist sehr mühsam. Außerdem sind die so entstandenen Programme nicht sehr flexibel.
Eine übliche allgemeine Notation einer for-Schleife sieht z.B. wie folgt aus:
for( var i = startwert; i < obergrenze; i++) {
...
}
Anstelle von ... werden die Anweisungen eingesetzt, die wiederholt werden sollen.
Die Anweisung '''i++''' ist eine Abkürzung für die Anweisung '''i=i+1'''.
Eine for-Schleife durchläuft mehrere ''Iterationen''. In jeder Iteration werden alle Anweisungen zwischen den Klammern {...} ausgeführt.
Für das oben gezeigte Muster gilt:
# Vor der ersten Iteration erhält ''i'' den Wert ''startwert''. Das ist die '''Anfangszuweisung'''.
# Nach der Iteration wird der Wert von ''i'' um 1 erhöht (''i++''). Das ist die '''Wiederholungszuweisung'''.
# Es wird geprüft, ob die Bedingung ''i<obergrenze'' erfüllt ist. Das ist die '''Wiederholungsbedingung'''.
# Wenn die Wiederholungsbedingung erfüllt ist, wird eine weitere Iteration durchgeführt.
# Die Schritte 2 bis 4 werden wiederholt, bis die Wiederholungsbedingung nicht mehr erfüllt ist. In diesem Fall werden keine weiteren Iterationen durchgeführt.
Beispiel:
<code id="5aa3ff948e2b7">
function print(){
for(var i=0; i<5; i++){
console.log(i);
}
}
</code>
<run id="5aa3ff948e469">
print();
</run>
Für die for-Schleife gibt es verschiedene Variationen:
* anstelle von ''i'' andere Variablennamen einsetzen
* für ''startwert'' und ''obergrenze'' beliebige Werte einsetzen.
* Wiederholungszuweisung ändern; Beispiele:
** ''i=i+2'' bedeutet: ''i'' wird nach jeder Iteration um 2 erhöht.
** ''i--'' oder ''i=i-1'' bedeutet: ''i'' wird nach jeder Iteration um 1 erniedrigt.
* Wiederholungsbedingung ändern: statt ''i<5'' z.B. ''i>5'' schreiben
=== Beispiele ===
Anderer Startwert, andere Obergrenze (5, 10):
<code id="5aa3ff948e32b">
function print(){
for(var i=5; i<10; i++){
console.log(i);
}
}
</code>
<run id="5aa3ff948e4c3">
print();
</run>
Andere Wiederholungszuweiung (i=i+5):
<code id="5aa3ff948e393">
function print(){
for(var i=0; i< 55; i = i + 5){
console.log(i);
}
}
</code>
<run id="5aa3ff948e519">
print();
</run>
Andere Wiederholungsbedingung (i>=0)
<code id="5aa3ff948e3ee">
function print(){
for(var i=10; i>=0; i--){
console.log(i);
}
}
</code>
<run id="5aa3ff948e56e">
print();
</run>
== Bedingungen ==
Oft sollen bestimmten Anweisungen nur ausgeführt werden, wenn eine bestimmte Bedingung erfüllt ist.
=== Aufbau von If-Anweisungen ===
if(<Bedingung>){
...
}
Zwischen die geschweiften Klammern werden ein oder mehrere Anweisungen geschrieben, die ausgeführt werden sollen, wenn die <Bedingung> wahr ist. Es handelt sich um den sogenannten '''If-Block'''.
Natürlich können auch mehrere Bedingungen nacheinander geschrieben werden:
if(<Bedingung1>){
...
}
if(<Bedingung2>){
...
}
Eine If-Anweisung kann auch einen Sonst-Block (oder '''Else-Block''') besitzen:
if(<Bedingung>){
...
}else{
...
}
Zwischen die geschweiften Klammern des Else-Blocks werden ein oder mehrere Anweisungen geschrieben, die ausgeführt werden sollen, wenn die <Bedingung> false ergibt.
=== Beispiel ===
Das Programm gibt den Text "Es ist kalt." aus, wenn die Temperatur <= 15 ist. Ändern Sie den Wert der Variable "temperatur", um das Programm zu testen!
<code id="5aa40219921b9">
var temperatur = 20;
</code>
<run id="5aa402199264d">
if(temperatur > 15){
console.log("Es ist warm.");
}else{
console.log("Es ist kalt.");
}
</run>
=== Aufbau von Bedingungen ===
Die <Bedingung> muss ein logischer Ausdruck sein, der wahr oder falsch (d.h. true oder false) ergibt.
'''Beispiele für logische Ausdrücke'''
Ändern Sie in den folgenden Beispielen die Werte der Variablen x und y, um die Programme zu testen!
''x > y''
<code id="5aa4021992258">
var x = 6;
var y = 7;
</code>
<run id="5aa40219926bf">
if(x > y){
console.log("x ist größer als y");
}else{
console.log("x ist kleiner als y");
}
</run>
''x < y''
<code id="5aa40219922e9">
var x = 6;
var y = 7;
</code>
<run id="5aa402199272e">
if(x < y){
console.log("x ist kleiner als y");
}else{
console.log("x ist größer als y");
}
</run>
Außerdem können die Operatoren >= (größer gleich) sowie <= (kleiner gleich) verwendet werden.
''x>=a && x<=b'' (Test, ob x zwischen den Werten a und b liegt)
<code id="5aa4021992369">
var a = 0;
var b = 10;
var x = 3;
</code>
<run id="5aa402199279c">
if(x>=a && x<=b){
console.log("x liegt zwischen a und b");
}else{
console.log("x liegt außerhalb von a und b");
}
</run>
''x == y'' (Test, ob x und y den gleichen Wert besitzen)
<code id="5aa40219923dc">
var x = 6;
var y = 6;
</code>
<run id="5aa402199280b">
if(x == y){
console.log("x ist gleich y");
}else{
console.log("x ist ungleich y");
}
</run>
''x != y'' (Test, ob x und y ungleiche Werte besitzen)
<code id="5aa402199244b">
var x = 6;
var y = 7;
</code>
<run id="5aa4021992879">
if(x != y){
console.log("x ist ungleich y");
}else{
console.log("x ist gleich y");
}
</run>
=== Aufgaben ===
Erstellen Sie eine If-Anweisung: Wenn der Wert von x > 0 ist, soll der Text "die Zahl ist positiv" ausgegeben werden. Ansonsten soll der Text "die Zahl ist negativ" ausgegeben werden.
<code id="5aa40219924bc">
var x = 5;
</code>
<run id="5aa40219928e9">
</run>
Erstellen Sie eine If-Anweisung: Wenn das Alter größer gleich 18 ist, soll der Text "Die Person ist volljährig." ausgegeben werden. Ansonsten soll der Text "Die Person ist minderjährig" ausgegeben werden.
<code id="5aa402199252d">
var alter = 25;
</code>
<run id="5aa4021992958">
</run>
Formulieren Sie nacheinander folgende If-Anweisungen:
* Wenn die Uhrzeit zwischen 0 und 6 liegt - Ausgabe: "Es ist Nacht."
* Wenn die Uhrzeit zwischen 6 und 12 liegt - Ausgabe: "Es ist Vormittag."
* Wenn die Uhrzeit zwischen 12 und 18 liegt - Ausgabe: "Es ist Nachmittag."
* Wenn die Uhrzeit zwischen 18 und 24 liegt - Ausgabe: "Es ist Abend."
* Wenn die Uhrzeit < 0 ist - Ausgabe "ungültige Uhrzeit"
* Wenn die Uhrzeit > 24 ist - Ausgabe "ungültige Uhrzeit"
<code id="5aa402199259d">
var uhrzeit = 10;
</code>
<run id="5aa4021992a36">
</run>
=== Bedingungen mit Und verknüpfen ===
Mit dem Operator ''&&'' (Und) lassen sich beliebig viele Bedingungen verknüpfen.
'''Beispiel'''
Gegeben ist folgender Entscheidungsbaum bei der Risikoabschätzung für eine KFZ-Versicherung:
[[Datei: Kfz-risiko-baum.gif | 300px]]
* Wenn das Geschlecht "weiblich" ist, besteht ein '''geringes Risiko'''.
* Wenn das Geschlecht "männlich" '''und''' das Alter <= 35 ist, besteht ein '''geringes Risiko'''.
* Wenn das Geschlecht "männlich" '''und''' das Alter > 35 '''und''' der Autotyp "Van" ist, besteht ein '''geringes Risiko'''.
* Wenn das Geschlecht "männlich" '''und''' das Alter > 35 '''und''' der Autotyp "Coupe" ist, besteht ein '''hohes Risiko'''.
Es soll eine Funktion ''bewertung'' entwickelt werden, die in Abhängigkeit von den Parametern ''Geschlecht'', ''Alter'' und ''Autotyp'' die Ausgabe "hohes Risiko" oder "geringes Risiko" erzeugt.
<code id="5aa413bc27790">
function bewertung(geschlecht, alter, autotyp){
if(geschlecht=="weiblich"){
console.log("geringes Risiko");
}
if(geschlecht == "männlich" && alter <= 35){
console.log("geringes Risiko");
}
if(geschlecht == "männlich" && alter > 35 && autotyp == "Van"){
console.log("geringes Risiko");
}
if(geschlecht == "männlich" && alter > 35 && autotyp == "Coupe"){
console.log("hohes Risiko");
}
}
</code>
<run id="5aa413bc27ceb">
bewertung("weiblich", 60, "Van");
bewertung("männlich", 66, "Van");
bewertung("männlich", 40, "Coupe");
</run>
'''Aufgabe 1'''
Entwickeln Sie eine Funktion, die vorhersagt, ob ein Apfelbaum Früchte tragen wird.
Wenn er Früchte trägt, soll die Funktion "ja" ausgeben, ansonsten: "nein".
Die Vorhersage hängt von den Parametern ''Alter'', ''Sorte'' und ''Boden'' ab und wird von diesem Entscheidungsbaum abgeleitet:
[[Datei:baum.png]]
<code id="58e7bbba97634">function traegt(alter, sorte, boden){
}</code>
<run id="5aa413bc27d7a">
traegt("jung", "natürlich", "mager");
traegt("alt", "natürlich", "mager");
</run>
'''Aufgabe 2'''
Entwickeln Sie eine Funktion zur Kreditprüfung. Ob ein Kredit gewährt wird oder nicht, hängt vom Verschuldungsgrad und vom Einkommen ab. Die Entscheidung wird aus diesem Entscheidungsbaum abgeleitet:
[[Datei:baum3.png]]
Die Funktion ''pruefe_kredit'' soll "Kreditzusage" ausgeben, wenn der Kredit bewilligt wird und "kein Kredit", wenn er nicht bewilligt wird. Verschuldungsgrad und Einkommen werden als Parameter übergeben. Der Verschuldungsgrad wird als gebrochene Zahl zwischen 0 und 1 repräsentiert (z.B. 0.4 für 40%)
<code id="5aa413bc2789d">function pruefe_kredit(verschuldung, einkommen){
}</code>
<run id="5aa413bc27e05">pruefe_kredit(0.1, 30.000)</run>
=== Boolesche Variablen ===
Boolesche Variablen nehmen entweder den Wert ''true'' (wahr) oder ''false'' (falsch) an.
Damit können ebenfalls Bedingungen formuliert werden.
'''Beispiel'''
Die Variable ''volljaehrig'' nimmt den Wert ''true'' oder ''false'' an.
Wenn der Wert ''true'' ist, soll "Alkohol OK" ausgegeben werden, ansonsten: "Alkohol verboten".
<code id="5aa413bc27982">
var volljaehrig = false;
</code>
<run id="5aa413bc27e90">
if(volljaehrig){
console.log("Alkohol OK");
}else{
console.log("Alkohol verboten");
}
</run>
Ändern Sie den Wert der Variable ''volljaehrig'' auf ''true''!.
'''Hinweis'''
Die Schreibweise
if(volljaehrig){...}
ist equivalent zu der Schreibweise:
if(volljaehrig == true){...}
'''Beispiel 2'''
Die Variable ''volljaehrig'' nimmt den Wert ''true'' oder ''false'' an.
Wenn der Wert '''nicht''' ''true'' ist, soll "Alkohol verboten" ausgegeben werden, ansonsten: "Alkohol OK".
<code id="5aa413bc27a66">
var volljaehrig = false;
</code>
<run id="5aa413bc27f1c">
if(!volljaehrig){
console.log("Alkohol verboten");
}else{
console.log("Alkohol OK");
}
</run>
Ändern Sie den Wert der Variable ''volljaehrig'' auf ''true''!.
'''Hinweis'''
Die Schreibweise
if(!volljaehrig){...}
ist equivalent zu der Schreibweise:
if(volljaehrig == false){...}
'''Beispiel 3'''
Es soll eine Funktion "pruefeAlkohol" entwickelt werden, die die boolesche Variable "volljaehrig" als Parameter besitzt:
<code id="5aa413bc27afc">
function pruefeAlkohol(volljaehrig){
if(volljaehrig){
console.log("Alkohol OK");
}else{
console.log("Alkohol verboten");
}
}
</code>
<run id="5aa413bc27fa7">
pruefeAlkohol(true);
pruefeAlkohol(false);
</run>
'''Aufgabe 1'''
Eine Stadt ist eine ''Metropole'', wenn sie eine Hauptstadt ist '''und''' mehr als 1000000 Einwohner besitzt.
Die Funktion "pruefeMetropole" besitzt die Parameter ''istHauptstadt'' und ''anzahlEinwohner''. Der Parameter ''istHauptstadt'' ist eine boolesche Variable und nimmt die Werte ''true'' oder ''false'' an. Der Parameter ''anzahlEinwohner'' ist eine Zahl.
Vervollständigen Sie die Funktion, sodass der Text "Metropole" ausgegeben wird, wenn die Stadt eine Metropole ist, ansonsten: "keine Metropole".
<code id="5aa413bc27b8e">
function pruefeMetropole(istHauptstadt, anzahlEinwohner){
}
</code>
<run id="5aa413bc28033">
pruefeMetropole(true, 3000000);
pruefeMetropole(true, 500000);
pruefeMetropole(false, 6000000);
</run>
'''Aufgabe 2'''
Eine Person darf Auto fahren, wenn Sie eine Fahrerlaubnis besitzt '''und''' alle Papiere dabei hat '''und''' nicht betrunken ist.
Die Funktion "pruefeAutofahrt" besitzt folgende Parameter:
* ''fahrerlaubnis'' - eine boolesche Variable, die angibt, ob eine Fahrerlaubnis vorliegt (true) oder nicht (false)
* ''papiere'' - eine boolesche Variable, die angibt, ob alle Papiere vorhanden sind (true) oder nicht (false)
* ''betrunken'' - eine boolesche Variable, die angibt, ob die Person betrunken ist (true) oder nicht (false)
Vervollständigen Sie die Funktion, sodass der Text "Autofahrt OK" ausgegeben wird, wenn die oben genannten Bedingungen erfüllt sind, ansonsten "Autofahrt verboten".
<code id="5aa413bc27c1c">
function pruefeAutofahrt(fahrerlaubnis, papiere, betrunken){
}
</code>
<run id="5aa413bc280c1">
pruefeAutofahrt(true, true, true);
pruefeAutofahrt(true, false, false);
pruefeAutofahrt(true, true, false);
</run>