Ein wesentliches Element eines Programmes sind Befehle, die festlegen, dass bestimmte Programmzeilen nur ausgeführt werden, wenn eine Bedingung erfüllt ist. Diese Bedingung besteht im einfachsten Fall aus dem Vergleich einer Variablen mit einem Zahlenwert, kann aber auch sehr komplexe Formen annehmen. Wir beschränken uns vorläufig auf numerische Vergleiche, weil wir Zeichenketten später noch getrennt behandeln.
In allen Programmiersprachen hat das Resultat eines Vergleichs den Wert falsch oder wahr (in der wirklichen Welt könnte man auch den Wert unentscheidbar zulassen, für Programme wäre das eher ärgerlich). In C, C++, JavaScript, Perl und PHP gilt: Jede Zahl ausser 0 steht für den Wahrheitswert wahr, 0 steht für den Wahrheitswert falsch.
Vergleiche stellt man an, um je nach deren Ausgang unterschiedlichen Programmcode auszuführen: Falls
der Vergleich den Wert wahr ergibt, tue dieses, sonst tue jenes. Man benutzt dazu die
Schlüsselwörter if und else, sowie in PHP elseif (was nichts
weiter als ein zusammengezogenes else if darstellt).
Die Ausführungen in diesem Abschnitt sind nicht vollständig, dafür aber in C, C++, Perl, PHP und JavaScript gleichermassen gültig.
==. Beispiel:
var a = 3, b = 4, c = 12;
if(a * b == c) { // wenn ja, dann den Code zwischen der geöffneten
// geschweiften Klammer hier und der geschlosssenen
// geschweiften Klammer vor dem else
document.writeln("Ihr Computer rechnet richtig!");
} else { // andernfalls diesen Code
document.writeln("Kaufen Sie einen anderen Computer!");
}
oder in PHP
$a = 3;
$b = 4;
$c = 12;
if($a * $b == $c) { // wenn ja, dann den Code zwischen der geöffneten
// geschweiften Klammer hier und der geschlosssenen
// geschweiften Klammer vor dem else
echo "Ihr Computer rechnet richtig!\n";
} else { // andernfalls diesen Code
echo "Kaufen Sie einen anderen Computer!\n";
}
Zu beachten ist, das Tests auf Gleichheit mit Fliesskommazahlen unter Rundungsfehlern leiden können.
Wenn Sie z.B. schreiben if(cos(3.141592653589793238 / 2) == 0.0) wird der Wahrheitswert dieses
Vergleichs vermutlich falsch sein, weil 3.141592653589793238 / 2 eben doch nicht exakt gleich
pi/2 ist. Sicherer wäre im vorliegenden Fall:
if(abs(cos(3.141592653589793238 / 2)) < 1e-12),
damit testet man, ob der Cosinus von 3.141592653589793238 / 2 näher als 10-12 bei 0 liegt.
Die Operatoren für "ungleich", "grösser als", "grösser gleich", "kleiner als" und "kleiner gleich"
sind in allen C-ähnlichen Sprachen (C, C++, Java, Perl, JavaScript, PHP usw.) !=, >,
>=, < und <=.
Um zwei Bedingungen gleichzeitig zu testen und mit oder bzw. mit und zu verknüpfen,
gibt es die Operatoren || (für oder) und && (für und).
Z.B. testet if(a > 9 || a < 2) ob a grösser als 9 oder kleiner als 2
ist (in beiden Fällen ist der Wahrheitsgehalt der Gesamtaussage wahr), und
if(a >= 9 && b < 2) testet, ob a grösser gleich 9 und
gleichzeitig b kleiner als 2 ist (nur wenn beide Bedingungen erfüllt sind,
ist der Gesamtausdruck wahr).
Bei der Ausführung des Programms werden die Einzelaussagen immer von links nach rechts ausgewertet, und zwar nur so lange, wie unbedingt nötig. Das bedeutet:
Im Würfelspiel "Mäxchen" würfelt man mit zwei Würfeln. Sind beide Ziffern verschieden, bildet die höhere der beiden Ziffern den Zehnerwert des Wurfs, die andere Ziffer bildet den Einerwert. Sind beide Ziffern gleich, so ist der Wert "Einerpasch", "Zweierpasch", "Dreierpasch", "Viererpasch", "Fünferpasch" oder "Sechserpasch". Der Einerpasch ist weniger wert als der Zweierpasch, der Zweierpasch weniger als der Dreierpasch usw. Alle Päsche sind mehr wert als alle anderen Würfe. Die bis jetzt genannten Regeln haben eine wichtige Ausnahme: Der an sich niedrigstmögliche Wurf, bestehend aus einer 2 und einer 1, heisst "Mäxchen" und ist am meisten wert.1
Im Beispielprogramm wird das Würfeln simuliert, indem die Funktion zur Erzeugung von Zufallszahlen
aufgerufen wird. Da diese einen Wert zwischen 0 und 1 erzeugt, wird dieser zuerst mit 6 multipliziert und dann
auf die nächste ganze Zahl aufgerundet (mit der Funktion ceil(x)). Beim Ermitteln des Werts des
Wurfs wird zunächst untersucht, ob es sich um einen Pasch handelt, falls nicht, welche Ziffer grösser ist,
und dann ob ein Mäxchen vorliegt.
Das Programm ist nur in der JavaScript-Version angegeben, lässt sich aber leicht nach PHP übersetzen. Austesten können Sie das Programm hier.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Mäxchen</title>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1">
<link rel=stylesheet type="text/css" href="css/programmieren.css">
<style type="text/css">
<!--
td { padding:4px }
//-->
</style>
<script type="text/javascript" language="javascript">
function wuerfeln() {
wurf = new maexchen();
document.getElementById("zahl1").firstChild.nodeValue = wurf.zahl1;
document.getElementById("zahl2").firstChild.nodeValue = wurf.zahl2;
document.getElementById("bezeichnung").firstChild.nodeValue = wurf.bezeichnung();
}
function maexchen() {
this.zahl1 = Math.ceil(Math.random() * 6); // Math.random() liefert eine Zahl
this.zahl2 = Math.ceil(Math.random() * 6); // im Intervall (0,1], ceil liefert
this.bezeichnung = bezeichnung; // die nächsthöhere ganze Zahl
}
function bezeichnung() {
var wert;
if(this.zahl1 == this.zahl2) { // Zahlen gleich?
if(this.zahl1 == 1)
return("Einerpasch");
else if(this.zahl1 == 2)
return("Zweierpasch");
else if(this.zahl1 == 3)
return("Dreierpasch");
else if(this.zahl1 == 4)
return("Viererpasch");
else if(this.zahl1 == 5)
return("Fünferpasch");
else if(this.zahl1 == 6)
return("Sechserpasch");
else
return("Fehler");
} else {
if(this.zahl1 < this.zahl2)
wert = 10 * this.zahl2 + this.zahl1; // zahl1 < zahl2
else
wert = 10 * this.zahl1 + this.zahl2; // zahl1 > zahl2
if(wert == 21)
return("Mäxchen");
else return wert;
}
}
//-->
</script>
</head>
<body>
<h2>Mäxchen</h2>
<table style="border-style:none; margin-left:auto; margin-right:auto; border-spacing:0px">
<tr><td>Gewürfelte Augenzahlen:</td><td><span id="zahl1">3</span> und <span id="zahl2">4</span></td></tr>
<tr><td>Bezeichnung des Wurfs:</td><td><span id="bezeichnung">34</span></td></tr>
<tr><td colspan=2 style="text-align:center"><input type="button" value="neu würfeln" name="wuerfle" onClick="javascript:wuerfeln()"></td></tr>
</table>
<script type="text/javascript" language="javascript">
<!--<?php
wuerfeln(); // Diese Zeile wird unmittelbar nach dem Aufruf der Seite ausgeführt
//?>-->
</script>
<<p>
<a href="http://validator.w3.org/check/referer"><img border="0"
src="http://www.w3.org/Icons/valid-html401"
alt="Valid HTML 4.01!" height="31" width="88"></a>
<a href="http://jigsaw.w3.org/css-validator/check/referer">
<img style="border:0;width:88px;height:31px"
src="http://jigsaw.w3.org/css-validator/images/vcss"
alt="Valid CSS!" ></a></p>
</body>
</html>