Aufgaben (Verzweigungen)

Werbung
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
Herunterladen