function auswerten($text){
//String prüfen
if(preg_match('=([^0-9A-Za-z\. ()\[\],]+)=',$text,$fehler)){
echo "Fehler 1! Ungültige(s) Zeichen '".$fehler['0']."' bei der Eingabe!";
return;
}
// Multiplikator bestimmen
if(preg_match("(^[0-9]+,*[0-9]*)",$text,$vorfaktor)) {
$multiplikator=str_replace(",",".",$vorfaktor['0']);
$text=substr($text,strlen($vorfaktor['0']));
}else{$multiplikator=1;}
// Ersetzungen machen
$text=preg_replace("=\[=","(",$text);
$text=preg_replace("=\]=",")",$text);
$text=preg_replace("= =","",$text);
// .H2O u.ä. berücksichtigen, ggf. zwei + hintereinander wegmachen und Kommazahlen tunen
$text=preg_replace("=\.([0-9]*,*[0-9]*)(.*)=","+(\\2)*\\1",$text);
$text=preg_replace("=([^\+])\(=","\\1+(",$text);
$text=str_replace(",",".",$text);
//aus X3 (X*3) machen
$text=preg_replace("=([A-Z][a-z]*)([0-9]+)=","+(\\1*\\2)",$text);
//aus (XY)3 (XY)*3 machen
$text=preg_replace("=(\)+)([0-9]+)=","\\1*\\2",$text);
//aus X +(X) machen
while(preg_match("=(.*[^\(])([A-Z][a-z]*)(.*)=",$text,$pole)){
//foreach($pole as $txt) echo "".$txt."
";
$text=$pole['1']."+(".$pole['2'].")".$pole['3'];
}
//unnötige Zeichen entfernen
$text=preg_replace("=^\+=","",$text); // Plus am Anfang
$text=preg_replace("=\*$=","",$text); // Mal am Ende
$text=preg_replace("=\(\+=","(",$text); // Plus am Anfang einer Klammer
// Sonderfall: nur ein Element steht da
$text=preg_replace("=^([A-Z][a-z]*)$=","(\\1)",$text);
echo "Auswertung: ".$multiplikator." ".$text."
";
// Elementsgewichte einsetzen, aus Datenbank einlesen
do {
include("../../etc/connect.php");
@$vysledek=MySQL_Query("SELECT Elementsymbol,Atommasse FROM pse");
if(!$vysledek):
echo "
Tut uns leid, aber es ist ein Fehler beim Verbinden mit der Datensätze aufgetreten. Der Webmaster wird automatisch benachrichtigt. Bitte versuchen sie es später erneut
\n";
break;
endif;
while($zaznam=MySQL_Fetch_Array($vysledek))
{
$text=preg_replace("=".$zaznam['Elementsymbol']."([^a-z])=",$zaznam['Atommasse']."\\1",$text);
}
MySQL_Close($spojeni);
}while(false);
// Überprüfen
if(preg_match("=([^0-9\+\(\)\*\.]+)=",$text,$fehler)){
echo "Fehler! Ungültige(s) Zeichen '".$fehler['1']."' bei der Eingabe!";
return;
}
echo "Berechnung: ".$multiplikator."*(".$text.")
";
//Gleichung auswerten und Multiplikator berücksichtigen
$text=$multiplikator."*(".$text.")";
@eval("\$text = $text;");
if(preg_match("=[^0-9\.]+=",$text)){
echo "Fehler bei der Eingabe! Achte auf fehlende Klammern o.ä.";
return;
}
echo "Molekulargewicht [g mol-1]: ".$text."";
}
?>
Chemiestudent.de - Molgewichtsberechnung
include("../header.php"); ?>
Formel eingeben:
$text=$_POST["text"];
if (isset($text)){
echo "Vorgabe: ".$text."
";
// schön machen
$stext=preg_replace("=([A-Z][a-z]*)([0-9]+)=","\\1\\2",$text);
$stext=preg_replace("=(\)+)([0-9]+)=","\\1\\2",$stext);
echo "Schönschrift: ".$stext."
";
auswerten($text);
}
?>
Anleitung
Formel ganz normal eingeben. Bitte keine Ladungen (+,-) angeben. Bei reellen Zahlen Komma und nicht Punkt verwenden. Hydratwasser werden falls angegeben berücksichtigt. Im folgenden sind ein paar Beispiele angeführt:
K3[Fe(CN)5NO].2 H2O entspricht K3[Fe(CN)5NO].2H2O
5 H2O entspricht 5 H2O oder 5H2O
O,5 NaCl
Hintergrund
Die Einheit Molgewicht (auch Molekulargewicht oder Molekularmasse) geht von einem Molekül aus und bezeichnet die Summe der Atommassen aller Atome, die an dem Aufbau des speziellen Moleküls beteiligt sind. Dazu muss man alle Atommassen des Moleküls addieren. In der Praxis ist es wichtig das Molgewicht zu kennen, weil man damit bei Stoffen wie beispielsweise Salzsäure die richtige Konzentration einstellen kann (z.B. 0,1 molar) und die benötigten Mengenverhältnisse für eine Reaktion bestimmen kann.
include("../footer.php");
?>