Kategorien
Benutzer:Arbiedz/Projekte/Ausbaustufenrechner
Zur Navigation springen
Zur Suche springen
Ein kleiner Javascript-Rechner, der Kosten und Zeiten der ersten n Ausbaustufen eines Gebäudes so formatiert ausgibt, dass die Ausgabe in einen fwwiki-Artikel eingefügt werden kann.
Benutzung: Auf Bearbeiten drücken, Kopieren des Quelltextes ab einschließlich des <html> bis einschließlich </html> in einen Editor, lokal speichern als HTML-Datei, mit Browser aufrufen, Basiswerte eingeben und dann berechnen lassen.
Oder hier online verwenden.
Korrekturen, Ergänzungen und Kommentare sind willkommen.
<html>
<head>
<title>Ausbaustufenberechnung</title>
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
<script type="text/javascript">
<!--
var Version = 3;
var Versiondate = "03. April 2009";
function Ausbaukosten(Stufe, Stufe1Kosten, ExpFaktor, ExpBasis) {
/* integer-Rückgabe der Ausbaukosten von *Stufe*-1 zu *Stufe* */
if (Stufe == 1) return Stufe1Kosten;
// return Math.floor(10*Math.pow(1.33, Stufe-1));
return Math.floor(ExpFaktor * Math.pow(ExpBasis, Stufe-1));
}
function Tausenderpunkt(Ganzzahl) {
/* string-Rückgabe *Ganzzahl* mit Tausenderpunkten */
var ergebnis = "";
var GanzzahlStr = String(Ganzzahl);
var Dezimalstellenanzahl = GanzzahlStr.length;
var AnzahlTausenderpunkte = Math.floor((Dezimalstellenanzahl-1) / 3);
var i;
for (i=1; i <= AnzahlTausenderpunkte; i++)
ergebnis='.' + GanzzahlStr.substring(Dezimalstellenanzahl-3*i, Dezimalstellenanzahl-3*(i-1)) + ergebnis;
return GanzzahlStr.substring(0, Dezimalstellenanzahl - AnzahlTausenderpunkte * 3) + ergebnis;
}
function FormatPretty(Kommazahl) {
var KommazahlStr = String(Kommazahl);
var i=KommazahlStr.indexOf(".");
if (i>=0) {
KommazahlStr=KommazahlStr.substring(0,i) + ',' + KommazahlStr.substring(i+1,i+2);
}
else { KommazahlStr=KommazahlStr+',0' };
return KommazahlStr;
}
function PluralSingular(Zahlwert, Nomen, Pluralpostfix) {
/* falls Zahlwert=1, wird *Nomen* unverändert zurückgegeben, ansonsten der Pluralpostfix angehängt */
if (Zahlwert==1) { return Nomen; } else { return Nomen + Pluralpostfix };
}
function SecToHumanreadabletime(sec) {
/* String-Rückgabe der Sekundenangabe *sec* im Format "t Tage h Stunden m Minuten s Sekunden"
führende Einheiten mit Nullen werden weggelassen */
function FormattedToken(Value, Nomen, Pluralpostfix) {
return String(Value) + " " + PluralSingular(Value, Nomen, Pluralpostfix);
}
var ergebnis = "";
var f;
var n;
// ganze Tage:
f = sec/60/60/24;
n = Math.floor(f);
if (f >= 1) {
ergebnis = FormattedToken(n, "Tag", "e") + " ";
}
sec = sec - n*24*60*60;
// ganze Stunden:
f=sec/60/60;
n = Math.floor(f);
if (f >= 1 || ergebnis != "") {
ergebnis = ergebnis + FormattedToken(n, "Stunde", "n") + " ";
}
sec = sec - Math.floor(f)*60*60;
// ganze Minuten:
f=sec/60;
n = Math.floor(f);
if (f >= 1 || ergebnis != "") {
ergebnis = ergebnis + FormattedToken(n, "Minute", "n") + " ";
}
sec = sec - n * 60;
return ergebnis + FormattedToken(sec, "Sekunde", "n");
}
function SubstVars(FormatStr, Stufe, KostenStufe, KostenGesamt, AusbaudauerMin, WartezeitSec) {
SubstStrs = new Array("S", "KE", "KG", "A", "WH", "WS", "UD");
var FindIndex = 0;
var SubstStr = "";
for (var i = 0; i < SubstStrs.length; ++i)
while ((FindIndex = FormatStr.indexOf("$(" + SubstStrs[i] + ")")) >= 0) {
switch (SubstStrs[i]) {
case "S":
SubstStr = Stufe;
break;
case "KE":
SubstStr = Tausenderpunkt(KostenStufe);
break;
case "KG":
SubstStr = Tausenderpunkt(KostenGesamt);
break;
case "A":
SubstStr = Tausenderpunkt(AusbaudauerMin);
break;
case "WH":
SubstStr = SecToHumanreadabletime(WartezeitSec);
break;
case "WS":
SubstStr = Tausenderpunkt(WartezeitSec);
break;
case "UD":
SubstStr = FormatPretty(Math.round(1/WartezeitSec*60*60*24*10)/10);
break;
}
FormatStr = FormatStr.substr(0, FindIndex) + SubstStr + FormatStr.substr(FindIndex + SubstStrs[i].length + 3);
};
return FormatStr;
}
function main() {
var AusbaukostenSumme = 0;
var Kosten = 0;
var Wartezeit = 0;
document.Formular.Ausgabe.value = document.Formular.Pretext.value;
for (var Stufe = 1; Stufe <= parseInt(document.Formular.Endstufe.value); Stufe++) {
Kosten = Ausbaukosten(Stufe, parseInt(document.Formular.Anfangskosten.value), eval(document.Formular.ExpKostenFaktor.value), eval(document.Formular.ExpKostenBasis.value));
Wartezeit = Math.floor(eval(document.Formular.ExpZeitFaktor.value) * Math.pow(eval(document.Formular.ExpZeitBasis.value), Stufe))
AusbaukostenSumme += Kosten;
document.Formular.Ausgabe.value += SubstVars(document.Formular.Formatstring.value, Stufe, Kosten, AusbaukostenSumme, 100 * (Stufe -1), Wartezeit) + "\n";
}
document.Formular.Ausgabe.value += document.Formular.Posttext.value;
}
//-->
</script>
</head>
<body>
Berechnung der Ausbaustufen (mit Voreinstellung für das <em>Haus der Portale</em>) mit entsprechender Formatierung zum Einfügen in die Artikelbearbeitung.<br>
<script type="text/javascript">
<!--
document.write("Version " + Version + " vom " + Versiondate + ".");
//-->
</script>
<form name="Formular" action="">
<fieldset>
<legend>Kosten <i>K</i></legend>
K<sub>(S)</sub> = F<sub>k</sub> · B<sub>k</sub><sup>S</sup> <i>(K=Kosten, S=Stufe, F<sub>k</sub>=Faktor Kostenfunktion, B<sub>k</sub>=Basis Kostenfunktion)</i><br>
Anfangskosten K<sub>0</sub>: <input name="Anfangskosten" type="text" size="5" maxlength="5" value="200">
Faktor F<sub>k</sub>: <input name="ExpKostenFaktor" type="text" size="15" maxlength="55" value="10">
Basis B<sub>k</sub>: <input name="ExpKostenBasis" type="text" size="15" maxlength="55" value="1.33">
</fieldset>
<fieldset>
<legend>Wartezeit <i>W</i> zwischen zwei Anwendungen</legend>
W<sub>(S)</sub> = F<sub>w</sub> · B<sub>w</sub><sup>S</sup> <i>(W=Wartezeit, S=Stufe, F<sub>w</sub>=Faktor Wartezeitfunktion, B<sub>w</sub>=Basis Wartezeitfunktion)</i><br>
Faktor F<sub>w</sub>: <input name="ExpZeitFaktor" type="text" size="15" maxlength="55" value="2592000">
Basis B<sub>w</sub>: <input name="ExpZeitBasis" type="text" size="15" maxlength="55" value="1/1.30">
</fieldset>
<fieldset>
<legend>Ausgabe</legend>
führender Text:<br>
<textarea cols="140" rows="3" name="Pretext">
{| class='wikitable'
!Stufe
!Ausbaukosten
diese Stufe
!Ausbaukosten
gesamt
!Minuten
für Ausbau
!Zeit zwischen zwei Anwendungen
!Anwendungen/Tag
</textarea><br>
Formatstring:<br>
<textarea cols="140" rows="5" name="Formatstring">
|-
|align="right"|$(S)||align="right"|$(KE)||align="right"|$(KG)||align="right"|$(A)||align="center"|$(WH)||align="right"|$(UD)</textarea><br>
Folgende Variablen werden substituiert:
<table border>
<tr><th>Notation</th><th>Inhalt</th></tr>
<tr><td>$(S)</td> <td>Stufe</td></tr>
<tr><td>$(KE)</td><td>Ausbaukosten für diese Stufe</td></tr>
<tr><td>$(KG)</td><td>Ausbaukosten bis zu diese Stufe (Gesamt-Ausbaukosten)</td></tr>
<tr><td>$(A)</td> <td>Ausbaudauer für diese Stufe</td></tr>
<tr><td>$(WH)</td><td>Wartezeit zwischen zwei Anwendungen im Format <em>T Tag(e) H Stunde(n) M Minute(n) S Sekunde(n)</em> Es wird jeweils die passende Plural- oder Singularform verwendet.</td></tr>
<tr><td>$(WS)</td><td>Wartezeit zwischen zwei Anwendungen im Format <em>Sekunden</em></td></tr>
<tr><td>$(UD)</td><td>Anwendungen/Tag</td></tr>
</table>
abschließender Text:<br>
<textarea cols="140" rows="3" name="Posttext">|----
|}</textarea>
</fieldset>
Berechne bis Stufe: <input name="Endstufe" type="text" size="5" maxlength="5" value="50">
<input type="button" value="Ausrechnen" onclick="main()">
<textarea cols="140" rows="15" name="Ausgabe">
</textarea>
</form>
Bekannte/vermutete (?) Werte:
<table border>
<tr>
<th></th>
<th>K<sub>0</sub></th>
<th>F<sub>k</sub></th>
<th>B<sub>k</sub></th>
<th>F<sub>w</sub></th>
<th>B<sub>w</sub></th>
</tr>
<tr>
<th>Haus der Portale</th>
<td align="right">200</td>
<td align="right">10</td>
<td align="right">1.33</td>
<td align="right">2592000</td>
<td align="right">1/1.30 ≈ 0.7692</td>
</tr>
<tr>
<th>Türme von Loranien</th>
<td align="right">200</td>
<td align="right">1.8</td>
<td align="right">1.33</td>
<td align="right">5184000</td>
<td align="right">1/1.25 = 0.80 (?)</td>
</tr>
<tr>
<th>Fischzucht</th>
<td align="right">200</td>
<td align="right">10</td>
<td align="right">1.25</td>
<td align="right">2591991 (?)</td>
<td align="right">1/1.19 ≈ 0.8403 (?)</td>
</tr>
<tr>
<th>Baru-Getreide</th>
<td align="right">200</td>
<td align="right">10</td>
<td align="right">1.05</td>
<td align="right">15 Tage = 1.296.000s</td>
<td align="right">1/1.04</td>
</tr>
<tr>
<th>Sumpfgas</th>
<td align="right">200</td>
<td align="right">10</td>
<td align="right">1.27</td>
<td align="right">2592000 (?)</td>
<td align="right">1/1.2 ≈ 0.8333 (?)</td>
</tr>
<tr>
<th>Ölturm</th>
<td align="right">100</td>
<td align="right">10</td>
<td align="right">1.38</td>
<td align="right">2592000 (?)</td>
<td align="right">1/1.2 ≈ 0.8333 (?)</td>
</tr>
</table>
</body>
</html>