Skip to content

Latest commit

 

History

History
94 lines (74 loc) · 2.61 KB

riesenie.md

File metadata and controls

94 lines (74 loc) · 2.61 KB

Rozcestník

Faktoriál - PHP

Riešenie

Všetky potrebné služby sú v docker-compose.yml. Po ich spustení sa vytvorí:

  • webový server, ktorý do document root namapuje adresár tejto úlohy s modulom PDO. Port 80 a bude dostupný na adrese http://localhost/. Server má pridaný modul pre ladenie Xdebug 3 nastavený na port 9000.

Ako prvé je potrebné zistiť, ako sa počíta faktoriál. Na webe, napr. na stránkach Wikipédie, je možné nájsť tento vzorec pre výpočet faktoriálu čísla 5:

5! = 5 * 4 * 3 * 2 * 1 = 120

Na stránkach Wikipédie nájdeme dva pseudokódy s cyklom a použitím rekurzie. V tomto riešení si vyberieme nerekurzívny pseudokód, ktorý vyzerá nasledovne:

long double factorial (int n) {
    long double b = 1;
    while (n--)
        b*=n+1;
    return b;
}

V prvom kroku prepíšeme pseudokód do jazyka PHP. Začneme deklaráciou funkcie, ktorej kód umiestnime na začiatok súboru. Pozor, súbor musí mať koncovku .php. Na výpočet použijeme cyklus while, v ktorom postupne zmenšujeme hodnotu parametra $cislo dekrementáciou, výsledok vzniká postupným násobením:

function factorial($number)
{
    $result = 1;
    while (--$number > 0) {
        $result *= $number + 1;
    }
    return $result;
}

V zadaní je uvedené, že máme vypísať postupne faktoriál od čísla 0 po 10. To vieme urobiť vytvorením cyklu, ktorý sa spustí 11x a práve tu použijeme cyklus for. Všimnite si, ako sa navzájom mixuje HTML a PHP kód. Táto časť kódu bude vyzerať nasledovne:

<ul>
    <?php for ($i = 0; $i < 10; $i++) { ?>
    <li><?php echo $i . "! = ". factorial($i)?></li>
    <?php } ?>
</ul>

Na záver, keď všetko spojíme dokopy a pridáme štandardnú HTML kostru, celé riešenie bude vyzerať:

<?php
function factorial($number)
{
    $result = 1;
    while (--$number > 0) {
        $result *= $number + 1;
    }
    return $result;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Faktoriál</title>
</head>
<body>
<ul>
    <?php for ($i = 0; $i < 10; $i++) { ?>
    <li><?php echo $i . "! = " . factorial($i) ?></li>
    <?php } ?>
</ul>
</body>
</html>