NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Cykly + funkce (příklady)

V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Jan Lomička
Člen
Avatar
Jan Lomička:30.4.2017 18:19

Zdravím všechny znalce programování!
Potřeboval bych pomoci s příklady "na míru týkající se cyklů a funkcí.
Za případnou pomoc děkuji

Vše je vypracováno v HTML + JS

Vypište postupně 6 nadpisů h1 až h6 obsahující text „Nadpis N“, kde N je číslo úrovně nadpisu (1 až 6).

Do proměnné cislo uložte číslo (max. 50). Poté vypočítejte a vypište jeho faktoriál (nezapomeňte na 0! a záporná čísla).

Do proměnné cislo uložte číslo a do proměnné pocet kladné celé číslo. Poté vypište mocniny čísla cislo od cislo(mocnina1) až cislo(mocnina pocet).

Do proměnné pocet uložte kladné celé číslo. Poté vypište n druhých mocnin počínaje číslem 1 (např. při počet=3 se vypíše 1(nadruhou), 2(nadruhou) a 3(nadruhou)

FUNKCE
Napište funkci, která bude vracet n-tou mocninu čísla x (kde x a n jsou parametry funkce).

Napište funkci, která bude vracet n! (kde n je parametrem funkce).

Napište funkci, která bude vracet obsah trojúhelníku, jehož strany jsou zadány jako parametry této funkce.

Napište funkci, která vrátí index BMI (váha a výška jsou parametry funkce).

Pokračování předchozího příkladu – napište funkci, která na základě zadaného BMI (jako parametru), vrátí klasifikaci BMI (tj. slovní vyjádření).

Napište funkci, která bude převádět teplotu ve stupních Fahrenheita na teplotu ve stupních Celsia.

Bohužel vůbec nevím, za pomoc ještě jednou děkuji! :-)

 
Odpovědět
30.4.2017 18:19
Avatar
Odpovídá na Jan Lomička
Neaktivní uživatel:1.5.2017 0:49

Chceš vypracovat domácí úkol, nebo navést na jeho řešení?

Nahoru Odpovědět
1.5.2017 0:49
Neaktivní uživatelský účet
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Jan Lomička
Petr Čech:1.5.2017 9:13

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íš?

Editováno 1.5.2017 9:15
Nahoru Odpovědět
1.5.2017 9:13
the cake is a lie
Avatar
Jan Lomička
Člen
Avatar
Odpovídá na Neaktivní uživatel
Jan Lomička:1.5.2017 9:23

Pochopitelně navést na jeho řešení. :-)

 
Nahoru Odpovědět
1.5.2017 9:23
Avatar
Odpovídá na Jan Lomička
Neaktivní uživatel:1.5.2017 12:41

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.

Nahoru Odpovědět
1.5.2017 12:41
Neaktivní uživatelský účet
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Petr Čech:1.5.2017 16:01

pozn. řešíme přes PM, potom sem hodím výplod

Nahoru Odpovědět
1.5.2017 16:01
the cake is a lie
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:3.5.2017 16:28

ř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>");
    }
}
Nahoru Odpovědět
3.5.2017 16:28
the cake is a lie
Avatar
Odpovídá na Petr Čech
Neaktivní uživatel:3.5.2017 22:33

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.

Nahoru Odpovědět
3.5.2017 22:33
Neaktivní uživatelský účet
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Petr Čech:3.5.2017 23:05

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... :D
A asi je jasné proč na něj nechci vybafnout s lamdami a vyjímkami :D

Nahoru Odpovědět
3.5.2017 23:05
the cake is a lie
Avatar
Odpovídá na Petr Čech
Neaktivní uživatel:4.5.2017 11:28

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 :-)

Nahoru Odpovědět
4.5.2017 11:28
Neaktivní uživatelský účet
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.