Napsala jsem kdysi takový jednoduchý skriptík na přepočítání něčeho co často používám, a pamatuju si, že když ho při jedné příležitosti viděl někdo kdo tomu rozumí, tak se nad ním dost ušklíbl.
Já nejsem programátor a ten skript funguje dobře, takže mi to bylo docela jedno, nicméně nejspíš na něj budu někde odkazovat, tak bych ráda věděla, jestli tam není nějaká fakt ošklivá lamařina za kterou by se mi někdo vysmál. Jako jenom fakt očividný věci, co vás napadnou když se na to kouknete.
function PocetKopii() {
var hmotnost = document.getElementById("hmotnost").value; //načteni, parsování, nahrazení desetinné čárky
hmotnost = parseFloat(hmotnost.replace(",","."));
var delka = document.getElementById("delka").value;
delka = parseInt(delka);
if (isNaN(hmotnost)|| isNaN(delka) || delka == 0) {alert("Špatně zadané")} //kontrola správnosti zadání
else {
var Avg = 6.022*Math.pow(10,23);
var vysledek = ((hmotnost*Math.pow(10,-9))/(delka*660))*Avg; // výpočet
vysledek = Math.round(vysledek); // zaokrouhlení
vysledek = vysledek.toString(); // převedení na 10^x-tou
var rad = vysledek.length;
mez = vysledek/Math.pow(10,rad-2);
alert("Výsledek je " + Math.round(mez)/10 + " x 10 na " + (rad-1) + " kopií\/\u03bcl");}
}
Slouží to na velmi primitivní úkol, spočítat běžnou chemickou rovnice (n=m/Mr; n*N=počet částic - tady jen zkompikovaná tím, že Mr se počítá z počtu bází DNA Mr=bp *660 a zadáním hmotnosti v nanogramech místo normálníc gramů), ovšem protože pracuje s velkými čísly (Avogadrova konstanta je 10 na 23) a předpokládá zadání v daleko vyšších jednotkách než mám k dispozici, což činí tu věc moc zdlouhavou a v Excelu, kde se to běžně počítá mi to přišlo dost jednorázový a taky docela omezený, tak jsem to udělala jako webovou "aplikaci".
Takže jádrem je vlastně tahle rovnice, pak bylo potřeba nahradit u nás používanou desetinou čárku tečkou, udělat kontrolu zadání, a poslední část (co zabrala nejvíc práce ;) nahradit výsledný výpočet např. 35321589756.256849 zaokrouhleně jedno desetinné místo a řád "3.5 krát 10^8".
Vím, že tam občas mám možná zbytečně Math.pow funkce, což možná počítání zpomaluje, ale napsat tam 23 nul mi přijde daleko nepřehlednější a stejně je to tak malý, že IMHO na tom až tak nesejde, a asi jsou některý kroky moc rozepsaný, ale jednak se v tom pak líp vyznám a jednak to slučování je někdy problém (pro mě). |