Leo Baumann wrote:
> das Programm berechnet das Integral (Simpson) der rel. Bestahlungsstärke
> einer geneigten Fläche durch die Sonne.
>
> Zwei funtionierende Programme für waagerechte und senkrechte Bestrahlung
> sind beigefügt.
Zunächst mal sind das keine Programme. HTML ist keine Programmiersprache.
> Simpsonneig() ist die Integration nach Simpson, function cosen() ist die
> Funktion für die rel. Bestrahlungsstärke.
>
> Die zugehörige Eingabe und der Aufruf für Simpsonneig() ist ganz unten.
>
> Für die eingetragenen Parameter kommt ein sinnvolles Ergebnis heraus,
> variiert man die Parameter, gibt es Probleme.
„Es gibt Probleme” ist keine Beschreibung.
> Hier die Programme:
Es wäre besser gewesen, den URI zu posten, statt hier mehr als gefühlt
200 Zeilen schlecht formatierten und schlecht dokumentierten Quellcode
abzukippen. (*So* hatte ich das in de.sci.physik sicher rNICHT gemeint.)
> <!DOCTYPE HTML>
> <html lang="de">
> <head>
> <script language="JavaScript">
Anfängerfehler Nr. 1: Kein gültiges HTML.
Lass dringend <
http://validator.w3.org/> über diesen Code laufen.
Schreib ausserdem hier
'use strict';
damit die gröbsten Programmierfehler in modernen Web-Browsern (die
ECMAScript Ed. 6 und neuer unterstützen) gleich erkannt werden.
Zum Beispiel:
> function cose(t,bb,lb,pi,nwk)
> {
> ls=2*pi/24*t-pi;
^^
> bs=Math.sin(2*pi/8760*t-pi/2)*nwk;
^^
> e=Math.sin(bb)*Math.sin(bs)+Math.cos(bb)*Math.cos(bs)*Math.cos(ls-lb);
^
Nicht deklarierte Variablen. Da kann alles Mögliche passieren.
> if (e<=0) e=0; // wenn die Sonne unter dem Horizont steht
> wird das nicht mit gerechnet
> return e
> }
>
> […]
| Die Bereitschaft fühlender Wesen, Deinen Code näher anzuschauen, liegt
| wohl selbst auf logarithmischen Skalen unter Null (das geht genau dann,
| wenn der Leidensdruck dieser Wesen beim Anschauen größer wird als die
| mathematische Notwendigkeit für Werte größer Null).
|
| –Dietmar Meier in dcljs
Siehe auch: <
https://github.com/airbnb/javascript>
> // Richtung zur Sonne
> vz=Math.sin(ls-lb)/Math.sin(h);
Die Sinusfunktion kann auch den Wert 0 annehmen, dann hat vz den Wert “NaN”
(“not-a-number”), da die Division durch Null in IEEE-754 (so wie auch meist
in der Mathematik) nicht definiert ist.
> if (vz<0) ri=-ri;
Dieser Fall wird davon dann nicht erfasst, denn NaN < 0 === false.
> var bb=Math.abs(parseFloat(document.eingabe3.gb.value)*pi/180);
Sauber:
document.forms['eingabe3'].elements['gb'].value
Das ganze Geraffel andauernd vor “elements” kann man sich aber sparen, wenn
man direkt eine Referenz auf das Formularobjekt übergibt:
function myCalc (f)
{
… f.elements['gb'].value …
}
<form onsubmit='myCalc(this); return false'>
…
<input type='submit' …>
</form>
Für die Umrechnung von Grad in Radians empfehle ich, eine eigene Funktion zu
schreiben und aufzurufen, damit sich nicht durch Wiederholung Fehler
einschleichen. (Der Standard bietet leider keine solche.)
> document.eingabe3.schritte.value=String(n+1);
Die Konvertierung nach String beim Schreiben der value-Eigenschaft ist
unnötig, das erledigt der Setter selbst.
> document.eingabe3.fehler.value=String(Math.round(fe*1e8)/1e8);
> document.eingabe3.erg.value=String(Math.round(sa/8760*1e4)/100);
> document.eingabe3.erg1.value=String(Math.round(sa*100)/100);
Falls das eine Rundung auf Nachkommastellen werden soll, so ist das falsch.
Benutz stattdessen Number.prototype.toFixed().
> </head>
>
> <a name="Start"></a>
Ungültig. Das a-Element muss im body-Element enthalten sein.
> <body link="#0000cb" vlink="#00008b" alink="#ff8c00"
> background="grid.gif">
Diese veralteten Attribute haben in HTML5 nichts zu suchen. Schon in HTML
4.01 Strict (1999) nicht mehr.
> <p><center><font face="Eras Bold ITC"><h1 style= "color:
> #0000cb"><u>Berechnungsprogramme</u></h1></font></center></p>
Autsch. Mit einem Struktureditor erstellt?
> <p><table border=1 bordercolor="0000b0" cellspacing="7" bgcolor="#fffff0">
> <tr><th>Art der Berechnung:</th></tr>
> <tr><td><img src="pfeilre.gif"><a href="#Sonne">effektive
> Sonnenbestrahlung, waagerechte Fläche</a></td></tr>
> <tr><td><img src="pfeilre.gif"><a href="#Sonnesenk">effektive
> Sonnenbestrahlung, senkrechte Fläche</a></td></tr>
> <tr><td><img src="pfeilre.gif"><a href="#Sonneneig">effektive
> Sonnenbestrahlung, geneigte Fläche</a></td></tr>
> </table></p>
table-Elemente sind schon Block-Level-Elemente, und p-Elemente dürfen sie
nicht enthalten (die sind nämlich für Absätze).
> <p><hr noshade color="#000000" size=1></p>
Autsch.
> <a name="Sonne"></a>
> <p><h4 style="color:#000000"><u><b>Berechnung der effektiven
> Bestrahlungsstärke der waagerechten Fläche durch die
> Sonne</b></u></h4></p>
Nein, sondern
<h4 id='Sonne'>Berechnung der effektiven Bestrahlungsstärke der
waagerechten Fläche durch die Sonne</h4>
Alles andere wird durch ein Stylesheet (CSS) erledigt. Das gilt auch für
die übrigen Elemente. Sonst wird/bleibt das ein Wartungsalbtraum.
Wenn Du diese Fehler beseitigt hast, solltest Du den Code oder URI eines auf
das *Minimum* reduzierten Testfall posten. Bei der Erstellung eines solchen
findest Du sogar womöglich den Fehler schon selbst.
--
PointedEars
FAQ: <
http://PointedEars.de/faq> | <
http://PointedEars.de/es-matrix>
<
https://github.com/PointedEars> | <
http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.