Kategorien
Benutzer:Arbiedz/Projekte/Ausbaustufenrechner: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
SniGG (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
K (Bot: Automatisierte Textersetzung (-prettytable +wikitable)) |
||
Zeile 187: | Zeile 187: | ||
führender Text:<br> | führender Text:<br> | ||
<textarea cols="140" rows="3" name="Pretext"> | <textarea cols="140" rows="3" name="Pretext"> | ||
{| class=' | {| class='wikitable' | ||
!Stufe | !Stufe | ||
!Ausbaukosten | !Ausbaukosten |
Aktuelle Version vom 26. April 2016, 13:47 Uhr
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>