Kontrollstrukturen Einführung der Kontrollstrukturen über Verbalstrukturen ................................................ 2 Block ................................................................................................................................. 2 Vergleichsoperatoren......................................................................................................... 2 Verzweigungen in Javascript (mit Struktogramm) ........................................................... 3 Verzweigung nur mit bedingter Anweisung .......................................................... 3 Verzweigung mit bedingter und alternativer Anweisung ...................................... 3 Beispiele: ............................................................................................................... 3 Aufgaben (Verzweigungen): ................................................................................. 3 Lösungen: .............................................................................................................. 4 Schleifen in Javascript (mit Struktogrammen) .................................................................. 6 Schleife mit Eingangsbedingung ........................................................................... 6 Schleife mit Ausgangsbedingung .......................................................................... 6 Zählschleife ........................................................................................................... 6 Aufgaben (Schleifen):............................................................................................ 6 Aufgaben (Schleifen und Verzweigungen): .......................................................... 6 Lösungen: .............................................................................................................. 7 Griepentrog / SZ Blumenthal Seite 1 14. Mai 2016 Einführung der Kontrollstrukturen über Verbalstrukturen über einen Alltagsalgorithmus, z.B. „Anleitung zum Telefonieren in der Telefonzelle“. Kontrollstrukturen: - abgeschlossene Anweisung (Folge, Sequenz, closed statement) - bedingte Anweisung / alternative Anweisung (Verzweigung, Selektion, conditional statement): wenn <BEDINGUNG> dann <ANWEISUNG> wenn <BEDINGUNG> dann <ANWEISUNG> sonst <ANWEISUNG> - wiederholende Anweisung (Schleife, Repetition, repetitive statement): solange <BEDINGUNG> tue <ANWEISUNG> für <VARIABLE>von <WERT> bis <WERT> tue <ANWEISUNG> Block mehrere Befehle können durch geschweifte Klammern zu einem Block zusammengefasst werden, z.B. { <ANWEISUNG> <ANWEISUNG> ... <ANWEISUNG> } Vergleichsoperatoren Mit den Vergleichsoperatoren == , < , > , <= (für ) , >= (für ) , != (für ) lassen sich zwei beliebige Ausdrücke zu einer Bedingung zusammensetzen, wie z.B.: zahl >= 0 oder zahl1 - zahl2 == 5 25 / zahl - 3 != (zahl + 5) * 2 Griepentrog / SZ Blumenthal Seite 2 oder 14. Mai 2016 Verzweigungen in Javascript (mit Struktogramm) Verzweigung nur mit bedingter Anweisung if (<Bedingung>) { <Anweisungen> } Bedingung ja nein Verzweigung mit bedingter und alternativer Anweisung if (<Bedingung>) { <Anweisungen> } else { <Anweisungen> } Beispiele: nur mit bedingter Anweisung: if (zahl > 0) { alert(zahl + ' ist positiv') } mit bedingter und alternativer Anweisung: if (zahl > 0) { alert(zahl + ' ist positiv') } else { alert(zahl + ' ist nicht positiv'); } Aufgaben (Verzweigungen): v1) Bei der ganzzahligen Division soll durch eine entsprechende Prüfung das Teilen durch Null verhindert werden. v2) Zwei Zahlen prüfen, ob eine ein Teiler der anderen ist. v3) Berechnung von Funktionswerten einer stückweise definierten Funktion. v4) Für die Stromabrechnung gelten mehrere Tarife, z.B. mtl. Grundbetrag Preis pro kWh Normaltarif: 10 DM 0,17 DM Billigtarif: 25 DM 0,10 DM Das Programm soll den Stromverbrauch erfragen und dann den günstigeren Tarif ermitteln. v5) Zwei eingegebenen Uhrzeiten (Std. / Min. / Sek.) oder Tagesdaten (Tag / Monat / Jahr) sollen in die richtige Reihenfolge gebracht werden. Griepentrog / SZ Blumenthal Seite 3 14. Mai 2016 Lösungen: Eingabe: Dividend Aufgabe v1) Eingabe: Divisor // Attribute var dividend, divisor; Divisor = 0 ja nein // Dienst Ausgabe Ausgabe function teilenOhneNull() { dividend = prompt(“Dividend“); einer des dividend = parseInt(dividend); Warnung Quotienten divisor = prompt(“Divisor“); divisor = parseInt(divisor); if (divisor == 0) alert(“Teilen durch Null nicht möglich“); else alert(dividend + “ : “ + divisor + “ = “ + dividend / divisor); } Aufgabe v2) // Attribute var zahl, teiler, quotient; // Dienst function istTeiler() { zahl = prompt(“Zahl“); zahl = parseInt(zahl); teiler = prompt(“Teiler“); teiler = parseInt(teiler); quotient = zahl / teiler; if (quotient == Math.floor(quotient)) alert(teiler + “ ist ein Teiler von “ + zahl); else alert(teiler + “ ist kein Teiler von “ + zahl); } Aufgabe v3) Exemplarisch für die Funktion x2 1 F: x 2 x 2 falls x 1 falls x 1 // Attribute var x, fx; // Dienst function funktion() { x = prompt(“An welcher Stelle soll die Funktion“ + “ berechnet werden?“); x = parseFloat(x); if (x > 1) fx = 2 * x – 2; else fx = x * x – 1; Griepentrog / SZ Blumenthal Seite 4 14. Mai 2016 alert(“Der Funktionswert beträgt: “ + fx); } Aufgabe v4) // Attribute var verbrauch, normal, billig; // Dienst function stromtarif() { verbrauch = prompt(“Stromverbrauch in kWh“); verbrauch = parseFloat(verbrauch); normal = 10 + 0.17 * verbrauch; billig = 25 + 0.10 * verbrauch; if (billig < normal) alert(“Billigtarif: “ + billig); else alert(“Normaltarif: “ + normal); } Aufgabe v5) // Attribute var std1, std2, min1, min2, sek1, sek2; //Dienst function ordne() { std1 = prompt(“Stunde des ersten Zeitpunktes“); min1 = prompt(“Minute des ersten Zeitpunktes“); sek1 = prompt(“Sekunde des ersten Zeitpunktes“); std2 = prompt(“Stunde des zweiten Zeitpunktes“); min2 = prompt(“Minute des zweiten Zeitpunktes“); sek2 = prompt(“Sekunde des zweiten Zeitpunktes“); if ((std1==std2)&&(min1==min2)&&(sek1==sek2)) { alert(“Die Zeiten sind gleich“); } else if ((std1 < std2) || ((std1 == std2)&&(min1 < min2)) || ((std1==std2)&&( min1==min2)&& ( sek1<sek2))) { alert(“erst: “+std1+“:“+min1+“:“+sek1+ “\n dann: “+std2+“:“+min2+“:“+sek2);} else alert(“erst: “+std2+“:“+min2+“:“+sek2); “\n dann: “+std1+“:“+min1+“:“+sek1);} } Griepentrog / SZ Blumenthal Seite 5 14. Mai 2016 Schleifen in Javascript (mit Struktogrammen) Schleife mit Eingangsbedingung Eingangsbedingung while (<Bedingung>) { <Anweisungen> } Schleife mit Ausgangsbedingung do { <Anweisungen> } while (<Bedingung>); Ausgangsbedingung Zählschleife Für ... von ... bis ... for (var i=0; i < max; i++) { <Anweisungen> } Aufgaben (Schleifen): s1) Für den Halley-Kometen sollen die nächsten 20 Begegnungen mit der Erde berechnet werden. s2) Für mehrere Kunden ist ein Nettobetrag einzugeben, um Mehrwertsteuer und Bruttobetrag zu berechnen. Eventuell sollen alle Bruttobeträge aufsummiert und Summe am Ende ausgegeben werden. Die Berechnung soll bei Eingabe von Null beendet werden. s3) Fibonacci-Zahlen: Zu Beginn existiert ein nicht zeugungsfähiges Kaninchen. Nach einem Monat werden alle Kaninchen zeugungsfähig und jedes zeugungsfähige Kaninchen bringt ein neues, nicht zeugungsfähiges hervor. Aufgaben (Schleifen und Verzweigungen): m1) Eine Zahl prüfen, ob sie eine Primzahl ist. m2) Alle Primzahlen von 2 bis 1000 berechnen. m3) Primfaktorzerlegung einer ganzen Zahl berechnen. m4) Für mehrere Kunden den günstigeren Stromtarif ermitteln und den Umsatz des Stromanbieters berechnen. Griepentrog / SZ Blumenthal Seite 6 14. Mai 2016 Lösungen: Aufgabe s1) //Attribute var jahr, letztes; var fenster; //Dienst function komet(){ jahr=prompt("Sag mir das aktuelle Jahr!"); jahr=parseInt(jahr); letztes = jahr - (jahr – 10)%76; fenster = open(); for (var i=0; i<20; i++) { letztes = letztes + 76; fenster.document.write(i + “. Begegnung“ + letztes); } fenster.document.close(); } Aufgabe s2) Alternative 1 //Attribute var netto, mwst, brutto, summe; //Dienst function brutto() { summe = 0; while (true) { netto = prompt("Gib den Nettobetrag ein"); netto = parseFloat(netto); if (netto == 0) break; mwst = netto * 0.16; brutto = netto + mwst; summe = summe + brutto; alert("Der Nettobetrag ist " + netto + “\nDie Mehrwertsteuer ist: " + mwst + "\nDer Verkaufspreis ist: " + brutto); } alert(“Summe: “ + summe); } Griepentrog / SZ Blumenthal Seite 7 14. Mai 2016 Alternative 2 //Attribute var netto, mwst, brutto, summe; //Dienst function brutto() { summe = 0; do { netto = prompt("Gib den Nettobetrag ein"); netto = parseFloat(netto); mwst = netto * 0.16; brutto = netto + mwst; summe = summe + brutto; alert("Der Nettobetrag ist " + netto + “\nDie Mehrwertsteuer ist: " + mwst + "\nDer Verkaufspreis ist: " + brutto); } while (netto != 0); alert(“Summe: “ + summe); } Aufgabe s3) //Attribute var reif, nichtReif; //Dienst function kaninchen() { reif = 0; nichtReif = 1; fenster = open(); fenster.document.write( “reif nicht reif“); while (reif < 1000000) { reif = reif + nichtReif; nichtReif = reif - nichtReif; fenster.document.write(reif + “ “ + nichtReif); } fenster.document.close(); } Griepentrog / SZ Blumenthal Seite 8 14. Mai 2016 Aufgabe m1) //Attribute var zahl, teiler, quotient; //Dienst function prim() { zahl = prompt(“eine Zahl“); zahl = parseInt(zahl); teiler = 2; quotient = zahl / teiler; while ((teiler < zahl) && (quotient != Math.floor(quotient))) { teiler++; quotient = zahl / teiler; } if (quotient == Math.floor(quotient)) { alert(zahl + “ ist keine Primzahl“); } else { alert(zahl + “ ist eine Primzahl“); } } Aufgabe m2) //Attribute var zahl, teiler, quotient, fenster; //Dienst function allePrimzahlen() { zahl = 2; fenster = open(); while (zahl <= 1000) { teiler = 2; quotient = zahl / teiler; while ((teiler < zahl) && (quotient != Math.floor(quotient))) { teiler++; quotient = zahl / teiler; } if (quotient != Math.floor(quotient)) { fenster.document.write(zahl + “<br>“); } zahl++; } fenster.document.close(); } Griepentrog / SZ Blumenthal Seite 9 14. Mai 2016 Aufgabe m3) //Attribute var zahl, faktor, teiler, quotient, fenster; //Dienst function allePrimzahlen() { zahl = prompt(“eine Zahl“); faktor = 2; fenster = open(); fenster.document.write(zahl + “ = 1“); while (faktor < zahl) { teiler = 2; quotient = faktor / teiler; while ((teiler < faktor) && (quotient != Math.floor(quotient))) { teiler++; quotient = faktor / teiler; } if (quotient != Math.floor(quotient)) { if (zahl/faktor == Math.floor(zahl/faktor)) { fenster.document.write(“*“ + faktor); zahl = zahl / faktor; } else { faktor++; } } } fenster.document.close(); } Griepentrog / SZ Blumenthal Seite 10 14. Mai 2016 Aufgabe m4) // Attribute var verbrauch, normal, billig, summe; // Dienst function stromtarif() { summe = 0; do { verbrauch = prompt(“Stromverbrauch in kWh“); verbrauch = parseFloat(verbrauch); normal = 10 + 0.17 * verbrauch; billig = 25 + 0.10 * verbrauch; if (billig < normal) { alert(“Billigtarif: “ + billig); summe = summe + billig; } else { alert(“Normaltarif: “ + normal); summe = summe + normal; } } while (verbrauch > 0); alert(“Umsatz: “ + summe); } Griepentrog / SZ Blumenthal Seite 11 14. Mai 2016