Galileo Computing <openbook>
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


PHP 4 von Thomas Theis
Webserver-Programmierung für Einsteiger
Zum Katalog
gp Kapitel I Mathematische Funktionen
  gp I.1 Taschenrechner-Funktionen
  gp I.2 Ganzzahl-Ermittlung, Extremwerte
  gp I.3 Trigonometrische Funktionen
  gp I.4 Zufallszahlen
  gp I.5 Mischen
  gp I.6 Formatierung von Zahlen
  gp I.7 Stellenwert-Systeme
  gp I.8 Alle mathematischen Funktionen

Kapitel I Mathematische Funktionen

Über die Grundrechenarten hinaus werden in PHP zahlreiche mathematischen Funktionen zur Durchführung von Berechnungen zur Verfügung gestellt. Diese Funktionen sind Inhalt des nun folgenden Abschnittes.

Zur Durchführung von mathematischen Berechnungen dienen die mathematischen Funktionen.

In den nachfolgenden Beispiel-Programmen werden zwei unterschiedliche Methoden verwendet. Diese beiden Methoden können generell bei allen Funktionsaufrufen angewendet werden. Sie werden hier noch einmal erwähnt, da die erste Methode besonders bei den mathematischen Funktionen angewendet wird.

gp  Methode 1: Das Ergebnis der mathematischen Funktion wird unmittelbar ausgegeben, d. h., Berechnung und Ausgabe finden in Einem statt. Diese Methode bietet den Vorteil der kompakteren Schreibweise.
gp  Methode 2: Das Ergebnis der mathematischen Funktion wird in einer Variablen gespeichert. Diese Variable wird anschließend ausgegeben, d. h., Berechnung und Ausgabe finden in zwei Schritten statt. Diese Methode hat den Vorteil, daß das Ergebnis später noch mehrmals verwendet werden kann, ohne dafür die Funktion erneut aufrufen zu müssen und dabei Rechenzeit zu beanspruchen.

Galileo Computing

I.1 Taschenrechner-Funktionen  downtop

Wurzel, e, ln,
log ...

Im Beispiel-Programm wird der Einsatz von »Taschenrechner-Funktionen« (Berechnung der Wurzel, e-Funktion, natürlicher Logarithmus, 10er Logarithmus, Potenzrechnung) sowie mathematische Konstanten behandelt.

Listing I.1   Datei ui01.php
<html>
<body>
<?php
   echo "<b>Mathematische Konstanten:</b><br>";
   echo "Kreiszahl Pi: " . M_PI . "<br>";
   echo "oder so: " . pi() . "<br>";
   echo "Euler'sche Zahl e: " . exp(1) . "<p>";

   echo "<b>Wurzel, Potenz, Logarithmus:</b><br>";
   $a=4.75;
   echo "Variable a: $a <br>";
   $erg = sqrt($a);
   echo "Wurzel aus a: $erg<br>";
   $erg = pow($a,2);
   echo "a zum Quadrat (a hoch 2): $erg<br>";
   $erg = pow($a,3);
   echo "a hoch 3: $erg<br>";
   $erg = log($a);
   echo "ln(a) = Natürlicher Logarithmus von a : $erg<br>";
   $erg = log10($a);
   echo "log(a), 10er-Logarithmus von a: $erg<p>";
?>
</body>
</html>

Die Konstante pi läßt sich auf zwei Arten ermitteln: zum einen als konstanter Wert (M_PI), zum anderen als Ergebnis der Funktion pi(). Die Eulersche Zahl läßt sich nur über den »Umweg« der Exponential-Funktion (e hoch 1) errechnen.

Die Bildschirmausgabe hat folgendes Aussehen:

Abbildung I.1   Taschenrechner-Funktionen
Abbildung


Galileo Computing

I.2 Ganzzahl-Ermittlung, Extremwerte  downtop

In diesem Abschnitt beschäftigen wir uns mit dem Folgenden:

Umwandlung zur ganzen Zahl

gp  Eine Zahl mit Dezimalstellen wird auf verschiedene Arten in eine Ganzzahl umgewandelt.

Maximum, Minimum

gp  Das Maximum bzw. das Minimum von unterschiedlichen Anzahlen von Werten wird ermittelt.
Listing I.2   Datei ui02.php
<html>
<body>
<?php
   echo "<b>Zahlen in Ganzzahlen verwandeln:</b><br>";
   $a=4.75;
   echo "Variable a: $a <br>";
   echo "nächstniedrigere ganze Zahl zu a: " . 
         floor($a) . "<br>";
   echo "nächsthöhere ganze Zahl zu a: " .
         ceil($a) . "<br>";
   echo "a kaufmännisch gerundet (ab .5 aufwärts): " .
         round($a) . "<p>";

   echo "<b>Maxima, Minima:</b><br>";
   $b=5.37;
   $c=30;
   echo "Variable a: $a <br>";
   echo "Variable b: $b <br>";
   echo "Variable c: $c <br>";
   echo "Maximum von a und b: " . max($a,$b) . "<br>";
   echo "Maximum von a, b und c: " . max($a,$b,$c) . "<br>";
   echo "Minimum von a und b: " . min($a,$b) . "<br>";
   echo "Minimum von a, b und c: " . min($a,$b,$c) . "<p>";
?>
</body>
</html>

Eine Zahl mit Nachkommastellen kann auf verschiedene Weise gerundet werden:

gp  nach unten, Funktion floor()
gp  nach oben, Funktion ceil()
gp  kaufmännisch (bis 0.4999 abwärts, ab .5000 aufwärts), Funktion round()

Die Funktionen max() bzw. min() ermitteln aus einer beliebigen Menge an Zahlen die größte bzw. die kleinste Zahl. Sie können auch bei Arrays angewandt werden (s. Abschnitt über Arrays).

Die Bildschirmausgabe hat folgendes Aussehen:

Abbildung I.2   Ganzzahl-Ermittlung, Extremwerte
Abbildung


Galileo Computing

I.3 Trigonometrische Funktionen  downtop

sin, cos, tan

In diesem Abschnitt werden einige trigonometrischen Funktionen (Winkel-Funktionen: Sinus, Cosinus, Tangens usw.) vorgestellt. Dabei ist zu beachten, dass ein Winkel, der in Grad gegeben wird, zunächst in Bogenmaß umgerechnet werden muß.

Bogenmaß

Erst anschließend kann eine trigonometrische Funktion angewandt werden. Die Umrechnung von Winkel in Bogenmaß geschieht mit der folgenden Formel:

Bogenmass = Winkel / 180 * pi

Umgekehrt muss das Ergebnis einer Arcus-Funktion (Arcus-Sinus, Arcus-Cosinus, Arcus-Tangens) anschließend wieder von Bogenmaß in Grad umgewandelt werden.

Listing I.3   Datei ui03.php
<html>
<body>
<?php
   echo "<b>Trigonometrische Funktionen:</b><br>";
   $c=30;
   echo "Variable c: $c (in Grad)<br>";
   $cbm = $c / 180 * M_PI;
   echo "Variable c: $cbm (in Bogenmaß umgerechnet)<br>";
   echo "Sinus von c: " . sin($cbm) . "<br>";
   echo "Cosinus von c: " . cos($cbm) . "<br>";
   echo "Tangens von c: " . tan($cbm) . "<p>";
?>
</body>
</html>

Die Bildschirmausgabe hat folgendes Aussehen:

Abbildung I.3   Trigonometrische Funktionen
Abbildung


Galileo Computing

I.4 Zufallszahlen  downtop

In vielen Programmen (Spiele, Simulationen, Tests usw.) werden zufällige Zahlen gebraucht. Wie in fast jeder anderen Programmiersprache können diese Zufallszahlen auch in PHP zur Verfügung gestellt werden. Allerdings handelt es sich immer um Quasi-Zufallszahlen und keine mathematisch echten Zufallszahlen. Normalerweise genügen diese zufälligen Werte für die genannten Aufgaben.

Zufalls-Generator

Sie werden über einen sogenannten »Zufalls-Generator« produziert. Dieser muß nach Aufruf des Programmes zunächst einmal initialisiert werden, sonst werden bei jedem Programm-Aufruf die gleichen Abfolgen von dann nicht mehr zufälligen Zahlen produziert.

In PHP gibt es zwei verschiedene Zufalls-Generatoren:

rand, mt_rand

gp  Der einfache Zufalls-Generator arbeitet mit der Funktion rand() und stellt beliebige Zahlen zwischen 0 und 32  767 zur Verfügung. Die Obergrenze kann mit der Funktion getrandmax() ermittelt werden.
gp  Der verbesserte Zufalls-Generator arbeitet mit der Funktion mt_rand() und stellt beliebige Zahlen zwischen 0 und 2  147  483  647 zur Verfügung. Die Obergrenze kann mit der Funktion mt_getrandmax() ermittelt werden. Es wird hier ein schnellerer und verbesserter Algorithmus zur Ermittlung der Zahlen verwendet.

srand, mt_srand, microtime

Der einfache Zufalls-Generator wird mit Hilfe der Funktion srand(), der verbesserte mit der Funktion mt_srand() initialisiert. Beide Initialisierungen benutzen dabei die Funktion microtime(), die die Systemzeit als absolute Zahl in Mikrosekunden ermittelt. Diese ist natürlich zu jedem Zeitpunkt unterschiedlich, daher ergibt sich bei jedem Aufruf ein anderer Startwert für den Zufalls-Generator.

Listing I.4   Datei ui04.php
<html>
<body>
<?php
   echo "<b>Einfache Zufallszahlen:</b><br>";
   srand((double)microtime()*1000000);
   echo "Größte mögliche Zufallszahl: " .
        getrandmax() . "<br>";
   echo "6 Zufallszahlen: ";
   for ($i=1; $i<=6; $i++)
   {
      $erg = rand();
      echo "$erg ";
   }
   echo "<p>";

   echo "<b>Bessere Zufallszahlen:</b><br>";
   mt_srand((double)microtime()*1000000);
   echo "Größte mögliche Zufallszahl: " .
        mt_getrandmax() . "<br>";

   echo "6 bessere Zufallszahlen: ";
   for ($i=1; $i<=6; $i++)
   {
      $erg = mt_rand();
      echo "$erg ";
   }
   echo "<br>";

   echo "15 bessere Zufallszahlen zwischen 1 und 49: ";
   for ($i=1; $i<=15; $i++)
   {
      $erg = mt_rand() % 49 + 1;
      echo "$erg ";
   }
   echo "<p>";
?>

</body>
</html>

Die »15 besseren« Zufallszahlen zwischen 1 und 49 werden mit Hilfe des Modulo-Operators (%) ermittelt. Der Zufalls-Generator erzeugt jedes Mal eine ganze Zahl zwischen 0 und 2  147  483  647. Teilt man jede beliebige Zahl, die dabei ermittelt werden kann, durch 49, so bleibt ein Rest, der zwischen 0 und 48 liegt. Wird noch der konstante Wert 1 addiert, so hat man das gewünschte Ergebnis (zwischen 1 und 49).

Die Bildschirmausgabe hat z. B. folgendes Aussehen:

Abbildung I.4   Zufallszahlen
Abbildung


Galileo Computing

I.5 Mischen  downtop

Bei näherem Hinsehen fällt auf, dass die Zufalls-Generatoren mehrmals die gleiche Zahl ermitteln können. Bei den »15 besseren« Zufallszahlen aus dem letzten Abschnitt sind dies z. B. die 16 (zwei Mal) und die 7 (drei Mal). Dies ist erklärbar, da bei jeder einzelnen Zufallszahl aus dem gesamten Bereich der Zufallszahlen, also von 0 bis 2  147  483  647 gezogen werden kann. Es wird keine Zahl von der Ziehung ausgeschlossen. Das Ergebnis der Modulo-Berechnung kann für mehrere gezogene Zahlen identisch sein.

Lotto

Für viele Problemstellungen ist es allerdings erforderlich, die bereits gezogenen Zahlen von der Ziehung auszuschließen. Man denke an die Ziehung der Lottozahlen, bei der ja unmöglich eine Kugel mit einem bestimmten Zahlenwert zwei Mal gezogen werden kann.

Karten

Genauso sieht es beim Mischen von Karten aus. Ziel ist die Ermittlung einer zufälligen Abfolge von Zahlen aus einem bestimmten Bereich, wobei jede Zahl nur einmal vorkommen darf.

In einem Programm, das diese Abfolge ermitteln soll, muss demzufolge festgehalten werden, welche Zahl bereits gezogen wurde. Sollte diese Zahl per Zufalls-Generator noch einmal gezogen werden, so muss die aktuelle Ziehung wiederholt werden.

Dies ist im folgenden Beispiel für die Folge der ganzen Zahlen von 1 bis 32 durchgeführt worden. Ordnet man anschließend jeder dieser Zahlen eine Karte aus einem Skatblatt (mit 32 Karten) zu, so wird durch das Programm das Mischen von Karten für ein Skatspiel durchgeführt.

Listing I.5   Datei ui05.php
<html>
<body>
<?php
   mt_srand((double)microtime()*1000000);

   /* 32 Zähler auf Null setzen */
   for ($i=1; $i<=32; $i++) $cnt[$i]=0;

   /* 32 mal ziehen */
   for($i=1; $i<=32; $i++)
   {
      /* Ziehung wiederholen, falls Zähler */
      /* der aktuellen Karte größer Null   */
      do
      {
         $z = mt_rand() % 32 + 1;
      }
      while($cnt[$z]>0);

      /* Zähler erhöhen */
      $cnt[$z] = $cnt[$z]+1;

      /* Karte speichern */
      $karte[$i] = $z;
   }

   /* 32 Karten ausgeben */
   for ($i=1; $i<=32; $i++)
   {
      echo $karte[$i] . " ";
   }
?>

</body>
</html>

Im Feld $karte werden die 32 verschiedenen zufälligen Zahlen gespeichert. Im Feld $cnt wird gespeichert, wie oft eine Zahl (=Karte) schon gezogen wurde. Zu Beginn wird dieser Wert für alle Karten auf 0 gestellt, während der Ziehung wird dieser Wert überprüft. Nach erfolgreicher Ziehung einer Zahl, die vorher noch nicht gezogen wurde, wird dieser Wert auf 1 gestellt.

Die Bildschirmausgabe hat z. B. folgendes Aussehen:

Abbildung I.5   32 Zahlen (Karten) werden gemischt
Abbildung


Galileo Computing

I.6 Formatierung von Zahlen  downtop

number_format

In diesem Abschnitt wird die formatierte Ausgabe von Zahlen erläutert. Diese Formatierung dient der übersichtlichen und einheitlichen Darstellung von Zahlen z. B. in Tabellen. Sie kann mit der Funktion number_format() durchgeführt werden.

Listing I.6   Datei ui06.php
<html>
<body>
<?php
   echo "<b>Zahlen-Formatierung:</b><br>";
   $d = 12.3 * 3098.55397 * 445.2;
   echo "Variable d: $d<br>";
   echo "Mit Tausender-Teilung (englisch), ohne
     Dezimalstellen: " . number_format($d) . "<br>";
   echo "Mit Tausender-Teilung, auf drei Dezimalstellen
     gerundet (englisch): " . number_format($d,3) . "<br>";
   echo "Mit Tausender-Teilung, auf drei Dezimalstellen
     gerundet (deutsch): " . number_format($d,3,",",".") . "<p>";
?>
</body>
</html>

Die Funktion number_format() kann mit ein, zwei oder vier Parametern aufgerufen werden:

gp  Falls Sie mit einem Parameter aufgerufen wird, so wird die Zahl mit Kommata als Tausender-Trennzeichen ausgegeben, und zwar ohne Nachkommastellen.
gp  Falls Sie mit zwei Parametern aufgerufen wird, so wird die Zahl mit Kommata als Tausender-Trennzeichen ausgegeben, und zwar mit der Anzahl an Nachkommastellen, die im zweiten Parameter angegeben ist.
gp  Falls Sie mit vier Parametern aufgerufen wird, so wird die Zahl mit dem vierten Parameter als Tausender-Trennzeichen ausgegeben, der gewünschten Anzahl an Nachkommastellen und dem dritten Parameter als Dezimal-Trennung.

Die Bildschirmausgabe hat folgendes Aussehen:

Abbildung I.6   Zahlen-Formatierung
Abbildung


Galileo Computing

I.7 Stellenwert-Systeme  downtop

Ein Stellenwert-System ist ein System zur Darstellung von Zahlen durch Ziffern und Zeichen, bei denen der Wert einer Ziffer von der Stelle abhängt, an welcher sie sich innerhalb der Zahl befindet.

dezimal, dual, hexadezimal

Das gebräuchlichste Stellenwert-System ist das Dezimalsystem (Zahlen zur Basis 10). In der Informatik werden außerdem das Dualsystem (Basis 2) und das Hexadezimalsystem (Basis 16) eingesetzt, seltener das Oktalsystem (Basis 8).

Die benutzten Ziffern und Zeichen in den verschiedenen Systemen sind: Im Dualsystem 0 und 1, im Oktalsystem 0 bis 7, im Dezimalsystem 0 bis 9, im Hexadezimalsystem 0 bis 9 und A bis F. Die Buchstaben A bis F nehmen dabei die Dezimal-Werte von 10 bis 15 an.

Beispiele :

Dezimal-Zahl 456 : 4 mal 10 hoch 2 + 5 mal 
10 hoch 1 + 6 mal 10 hoch 0 
= 400 + 50 + 6 = 456
Dual-Zahl 11001 : 1 mal 2 hoch 4 + 1 mal 2 
hoch 3 + 0 mal 2 hoch 2 +0 mal 2 hoch 1 + 1 
mal 2 hoch 0 = 16 + 8 + 0 + 0 + 1 = 25 (dezimal)
Hexadezimal-Zahl 2A5F : 2 mal 16 hoch 3 + 10 mal 
16 hoch 2 +5 mal 16 hoch 1 + 15 mal 16 hoch 0 
= 2 mal 4096 + 10 mal 256 +5 mal 16 + 15 = 10847 (dezimal)

decbin, decoct, dechex

PHP stellt u. a. die Funktionen decbin(), decoct() und dechex() zur Umrechnung zwischen den verschiedenen Stellenwert-Systemen zur Verfügung. Es gibt Funktionen zur direkten Umrechnung zwischen zwei bestimmten Stellenwert-Systemen.

base_convert

Außerdem bietet die Funktion base_convert() die Möglichkeit der Umrechnung zwischen zwei beliebigen Stellenwert-Systemen im Bereich von 2 bis 36. Die Begrenzung 36 existiert deshalb, weil zur Darstellung der Ziffern und Zeichen nur die Ziffern 0 bis 9 und die 26 Buchstaben verwendet werden.

Listing I.7   Datei ui07.php
<html>
<body>
<?php
   echo "<b>Zahlen-Systeme:</b><br>";
   $e = 57;
   echo "Variable e: $e (als Dezimalzahl)<br>";
   echo "als Binärzahl (Zahl zur Basis 2): " .
         decbin($e) . "<br>";
   echo "als Oktalzahl (Zahl zur Basis 8): " .
         decoct($e) . "<br>";
   echo "als Hexadezimalzahl (Zahl zur Basis 16): " .
         dechex($e) . "<br>";
   echo "als Zahl zur Basis 4: " .
         base_convert($e,10,4) . "<br>";
   echo "als Zahl zur Basis 32: " .
         base_convert($e,10,30) . "<br>";
?>
</body>
</html>

Die Bildschirmausgabe hat folgendes Aussehen:

Abbildung I.7   Stellenwert-Systeme
Abbildung

Übung UI08

Erstellen Sie eine HTML-Tabelle. Darin soll das Ergebnis der nachfolgend beschriebenen Berechnungen stehen. Für jeden Wert x von 5 bis 85 in Schritten von 5 (also die Werte x = 5, x = 10, x = 15, x = 20 .... x = 75, x = 80, x = 85) sollen die folgenden Funktionen berechnet werden (Datei ui08.php):

gp  Umrechnung des Wertes x in Bogenmaß
gp  Sinus, Cosinus und Tangens des Bogenmaß-Wertes
gp  Wurzel(x), Quadrat von x
gp  Natürlicher Logarithmus von x, 10er-Logarithmus von x
gp  e hoch (x/10)
gp  x als Binärzahl und als Hexadezimalzahl

Die Ergebnisse sollen jeweils mit drei Nachkommastellen in deutscher Schreibweise mit Tausender-Zeichen formatiert ausgegeben werden, jedoch mit Ausnahme von: Wert x, Quadrat von x, Binärzahl und Hexadezimalzahl. Diese sollen unformatiert ausgegeben werden.

Ein Tipp zur Durchführung: Schreiben Sie dieses umfangreiche Programm in mehreren Schritten. Lassen Sie zunächst die HTML-Tabelle mit einer einzigen Spalte (Wert x) anzeigen. Nachdem Sie diese Aufgabe erfolgreich bewältigt haben, erweitern Sie die Tabelle nach und nach um die weiteren Spalten. So lassen sich evtl. auftretende Fehler leichter finden.

Das Ergebnis sollte folgendes Aussehen haben:

Abbildung I.8   Tabelle mit Berechnungen aus mathematischen Funktionen
Abbildung

Übung UI09

Es soll das Ergebnis einer Geldanlage berechnet werden. Stellen Sie dem Benutzer ein Formular zur Verfügung (Datei ui09.htm), in dem er einen Anlagebetrag A, eine Laufzeit in Jahren L und einen Zinssatz in Prozent Z eintragen kann. Nach dem Eintragen der Werte kann er das Formular absenden, und ihm wird der Endbetrag genannt (Datei ui09.php). Dieser berechnet sich über die folgende Formel:

Endbetrag = A mal ((1 + Z/100) hoch L)

Zur Kontrolle: Ein Betrag von 1000 DM, angelegt über 2 Jahre bei einem Zinssatz von 5%, ergibt einen Endbetrag von 1102,50 DM.

Das Formular sollte wie folgt aussehen:

Abbildung I.9   Eingabe der Daten für die Geldanlage
Abbildung

Der Webserver berechnet und liefert das folgende Ergebnis:

Abbildung I.10   Ergebnis für die Geldanlage
Abbildung


Galileo Computing

I.8 Alle mathematischen Funktionen  toptop

Alle Funktionen

Im vorliegenden Abschnitt werden eine ganze Reihe von mathematischen Funktionen in PHP eingesetzt. Zur besseren Übersicht eine Liste aller Funktionen mit einer kurzen Erläuterung. Weitergehende Ausführungen finden sich im PHP-Manual.

Funktion Erläuterung
abs() Betrag
acos() Arcus Cosinus
asin() Arcus Sinus
atan() Arcus Tangens
atan2() Arcus Tangens von zwei Variablen
base_convert() Konvertierung zwischen verschiedenen Stellenwertsystemen
bindec() Konvertierung von Binär in Dezimal
ceil() Aufrunden
cos() Cosinus
decbin() Konvertierung von Dezimal in Binär
dechex() Konvertierung von Dezimal in Hexadezimal
decoct() Konvertierung von Dezimal in Oktal
exp() e hoch
floor() Abrunden
getrandmax() größte »einfache« Zufallszahl
hexdec() Konvertierung von Hexadezimal in Dezimal
log() natürlicher Logarithmus
log10() 10er-Logarithmus
max() Maximum
min() Minimum
mt_rand() ermittelt eine »bessere« Zufallszahl
mt_srand() initialisiert den »besseren« Zufallszahlen-Generator
mt_getrandmax() größte »bessere« Zufallszahl
number_format() Zahlen-Formatierung mit Tausenderzeichen und Dezimalstellen
octdec() Konvertierung von Oktal in Dezimal
pi() mathematische Konstante pi
pow() “Hoch-Rechnung«, Basis hoch Exponent
rand() ermittelt eine »einfache« Zufallszahl
round() Runden
sin() Sinus
sqrt() Wurzel
srand() initialisiert den »einfachen« Zufallszahlen-Generator
tan() Tangens

  

Perl – Der Einstieg




Copyright © Galileo Press GmbH 2001 - 2002
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken und speichern. Ansonsten unterliegt das <openbook> denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
Die Veröffentlichung der Inhalte oder Teilen davon bedarf der ausdrücklichen schriftlichen Genehmigung von Galileo Press. Falls Sie Interesse daran haben sollten, die Inhalte auf Ihrer Website oder einer CD anzubieten, melden Sie sich bitte bei: stefan.krumbiegel@galileo-press.de


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, fon: 0228.42150.0, fax 0228.42150.77, info@galileo-press.de