Diskuze: Cykly + funkce (příklady)
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
Chceš vypracovat domácí úkol, nebo navést na jeho řešení?
Obsah trojúhelníku za pomoci jeho stran se spočítá Heronovým
vzorem
Pro operace jako mocnění se používá třída Math. Libovolnou odmocninu
spočítáš jako 1/n mocninu, takže x^(1/n)=n-tá odmocnina z x
Nebudeme tu za tebe řešit celý úkol, to je strašně kontraproduktivní, to
bys potom přišel znovu a nic se nenaučil. Ale pomůžeme ti, když budeš
spolupracovat
Takže čemu přesně nerozumíš?
Jop takze navazu na Petra,
https://www.itnetwork.cz/…ial-podminky
https://www.itnetwork.cz/…ly-for-while
tohle si projdi, nezabere ti to prilis casu a najdes tam odpoved na par veci,
ktere ti asi nejsou jasne.
Ohledne faktorialu, tvoje zadani nejspis bude ocekavat, ze prijdes s rekurzivnim resenim, asi to tak bude nejlepsi, nakolik Strilingova aproximace, je jen aproximace http://www.rapidtables.com/…actorial.htm
ono nejspis se ocekava, ze si i tu mocninu napises vlastnim cyklem, ale to jen hadam, tvemu uciteli do hlavy nevidim.
pozn. řešíme přes PM, potom sem hodím výplod
řešení:
//===========funkce===========
//faktoriál
var faktorial=function(cislo)
{
if(cislo==0)
{
return 1;
}
else if(cislo<0)
{
return "nelze";
}
else
{
var fakt=1;
for(var i=1;i<=cislo;i++)
{
fakt*=i;
}
return fakt;
}
}
//obsah trojúhelníku
var obsah=function(a,b,c)
{
//Heronův vzorec
var s=(a+b+c)/2;
return Math.sqrt(s*(s-a)*(s-b)*(s-c));
}
//BMI
var BMI=function(vaha,vyska)
{
return vaha/vyska**2;
}
//BMI klasifikace
var bmiKlas = function(BMI)
{
//funguje korektně
if (BMI <= 16.5)
{
return("Koukej přibrat! Těžká podvýživa");
}
else if (BMI <= 18.5)
{
return("Podváha");
}
else if (BMI <= 25)
{
return("Supr čupr váha");
}
else if (BMI <= 30)
{
return("Nadváha");
}
else if (BMI <= 35)
{
return("Koukej zhubnout!");
}
else if (BMI <= 40)
{
return("Obezita II. stupně");
}
else
{
return("Obezita III. stupně");
}
}
//Far na Cel
var farNaCel=function(f)
{
return (f-32)*(5/9);
}
//===========příklady===========
//1
{
for (var n=1;n<=6;n++)
{
document.write("<h" + n + ">Nadpis "+n+"</h" + n + ">");
}
}
//2
{
var cislo=15;
document.write(faktorial(cislo));
}
//3
{
var cislo = 2;
var pocet = 7;
for(var i=0;i<=pocet;i++)
{
document.write((cislo**i)+"<br>");
}
}
//4
{
var pocet=6;
for(var i=1;i<=pocet;i++)
{
document.write(i+"<sup>2</sup> = "+ (i**2)+"<br>");
}
}
Pekny,
je to malicko offtopic, ale zase ne tolik, abych ti psal soukromou zpravu.
Faktorial iterativne je cool. Rad bych ale zminil, ze snad uz bry bude v JS implementovana tail call optimalizace, ktera umozni spravne napsanou rekurzi zplostit do naprosto plocheho volani. Je mozne, ze to ty vis, ale treba to bude pro nekoho dalsiho jako zajimavost.
Poznamka jeste k faktorialu, chapu, ze mozna pro jednoduchost, ale ja bych to
stejne neudelal - vracet z funkce numeric nebo string. Neni to dobra praktika a
prave proto bych zacatecnikovi vubec neukazoval, ze se to da delat, mozna bych
mu spis rekl, ze by to delat nemel, jak nejsem fanda exceptions, tady bych si
dovolil pro jednoduchost thrownout.
var fakt; taky neni spravne tam kde je, kvuli hostingu se promenna inicializuje
hned nahore, takze technicky vzato mas hned na prvnim radku var fakt; a pak fakt
= neco... to bych taky nedelal, bud bych dodrzel takovy to stary Ceckovy
deklarace jen nahore, nebo bych pouzil let.
Ted tu hlavni otazku ze zvedavosti: proc delas var nazev = function(){}, kdybys to delal takhle:
const doStuff = arg => arg * 2;
tak to pochopim, ale takhle s varem a s funkci, fakt nevim proc to delas a jsem zvedavej.
Dodatek: asi budu pusobit trochu jako rejpal, ale myslim to dobre. Samozrejme si uvedomuju, ze je jednodussi pockat az nekdo jinej zpracuje odpoved a jen se k ni vyjadrit. Ale myslim, ze to k necemu muze byt i dobre.
Já tě chápu a mnoho z toho bych udělal, jak navrhuješ. Nicméně se
ukázalo, že to je člověk, co naprosto netuší, dokonce ani syntaxi, tak
jsem to udělal tak, jak je to IMHO nejstravitelnější a nejjednodušší.
K hlavní otázce ti dám neuspokojující odpověď. Poslal mi už nějaké
kódy, co očividně spíš našel na netu a ve všech to bylo tak. Vzhledem k
tomu, že výsledek je prakticky stejný jako normální
function pretendStuff()
, neměl jsem důvod to měnit a "dodržoval
konvence". Je to sice "divné", ale není to chyba...
A asi je jasné proč na něj nechci vybafnout s lamdami a vyjímkami
Jojo výsledek je stejný afaik. Nakonec chápu tvoje pohnutky. Já jsem měl vyloženě to štěstí, že když už jsem někoho učil tady přes SZ něco složitějšího, byli kluci ochotní jít zdlouhavou cestou a nechat si vysvětlit detaily, ale hlavně měli už dobré základy, tímto je zdravím
Zobrazeno 10 zpráv z 10.