Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 10. diel - Cyklus for v Jave

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Marek Jiříček:10.7.2023 21:31

"Už tušíme, k čemu se cyklus for využívá. Zapamatujme si, že je počet opakování pevně daný."

To není pravidlem. Proměnná použitá v řídící podmínce cyklu for klidně může být v jakékoliv iteraci změněná uživatelem. Nic tomu nebrání abychom takovýto program napsali.

Klidně můžeme také mít nekonečnou for smyčlu, například "for (; true ; ) ", nebo dokonec jenom for(;;). Dovnitř těla klidně můžeme dát dotaz na vstup od uživatele a pokud má vstup určitou hodnotu, tak z cyklu vyskočit (použitím break) a v jiném případě pokračovat další iterací.

Cykly for a while jsou kompletně ekvivalentní ve smyslu, že funkcionalita kterou je možno implementovat pomocí for cyklu lze implementovat i pomocí while cyklu a naopak.

Rozdíl mezi for a while je ve stylu formulace řešení daného problému. Někdy nám přijde přirozenější formulovat řešení cyklem for a někdy nám přijde přirozenější formulovat ho cyklem while. Je to o čitelnosti kódu a komfortu programátora. For se skutečně hodí na formulaci předem specifikovaného počtu iterací lépe. To je celé.

Avatar
Lucie Zejdová:25.7.2023 16:10
  1. Mocninátor nefunguje pro záporné mocniny :-)
  2. Proč zavádím v mocninátoru proměnnou "vysledek", když mohu nadále používat "zaklad" (zaklad = zaklad * zaklad, print(zaklad)

Jinak moc pěkné, díky.

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Lucie Zejdová
DarkCoder:25.7.2023 19:00

Ano, obě připomínky k výpočtu libovolné mocniny jsou plně oprávněné. Přidám i to, že nefunguje při nulovým exponentu.

Co se týká vynechání proměnné výsledek, funkce je čitelnější na úkor malého zpomalení. Bez pomocné proměnné je funkce rychlejší u kladných exponentů a kratší:

double power(double base, int exponent) {
    if (exponent == 0) {
        return 1.0; // Jakákoli mocnina čísla k nultému je 1.
    } else if (exponent > 0) {
        for (int i = 1; i < exponent; i++) {
            base *= base;
        }
        return base;
    } else {
        // Pro záporný exponent použijeme inverzi základu a kladný exponent.
        return 1.0 / power(base, -exponent);
    }
}

Psáno v C.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
ing. SARNOVSKÝ Petr:4.9.2023 18:19

Zkuste si u malé násobilky výpis zapsat takto:

System.out.printf("%3d ", (i*j));
;-)
Avatar
Oleg Yuferov
Člen
Avatar
Oleg Yuferov:27.11.2023 11:30

V příkladu Mocnina čísla při použití exponentu "0" výsledkem je "základ" nikoliv "1" (x0=1).
Kód by asi měl vypadat takto:

...
int vysledek = 1;
for (int i = 0; i < exponent; i++) {
        vysledek = vysledek * zaklad;
}
...
Avatar
Radim Štross
Tvůrce
Avatar
Odpovedá na Oleg Yuferov
Radim Štross:4.12.2023 17:38

Ahoj Olegu,
děkujeme za správný postřeh k mocninám.
Příklad jsem upravil, aby vracel správný výsledek při nulovém exponentu.
Ukázka má ilustrovat použití cyklu a ošetření záporných hodnot v exponentu by podle mého názoru už příliš komplikovalo výklad základů Javy, takže zde chybí.
Zájemci si mohou rozkliknout odkaz s článkem, kde je řešena i tato situace na úrovni OOP.

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Radim Štross
DarkCoder:4.12.2023 19:33

Radime, napříč celým forem se v diskuzích vyskytují připomínky o zbytečném používání matematiky. Zde vidíš, jak jsou tyto připomínky oprávněné.

Teď sami jste do toho zabředli.

Buď upravte zadání a používejte výklad v maximálně možné jednoduché formě nebo dokončete příklad a precizně popište jeho funkci a to co se tam děje.

Tedy buď dokončete příklad na libovolnou mocninu tak jak je v článku stále uvedeno nebo pozměňte text na výpočet mocniny s přirozeným exponentem.

Je třeba řádně a pravidelně procházet diskuze a reagovat ihned. V upraveném příkladu na mocninu zbytečně používáš další proměnnou. Automaticky nad takovýmto úkolem sděliš čtenářům, že pro takovouto úlohu je dobré sestavit funkci. Napsat, že výpočet mocniny se záporným exponentem je příliš komplikovaný, ne! Tohle byla lenost najít čas to dokončit a mít odbitou reakci v komentářích.

Výpočet mocniny s celočíselným záporným exponentem je na jeden řádek! Kód jsem navíc poslal do diskuze, stačí jen lehce upravit.

Když už se snažíte odkazovat na jiný článek, dejte skutečný odkaz. Ne že si to bude čtenář sám na fóru dohledávat.

Toliko ke zlepšení vašich článků, nejen tohoto!

Editované
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Jaromír Kohout:2.3.2024 23:32

Ahoj. Přiznám se, že se trápím a evidentně si sedím na vedení. V násobilce i * j je zřejmé, že opravdu dojde k vynásobení např. 9x9=81. V mocninátoru je výsledek * základ (neboli b-krát násobené a), čili např. 9 * 9 neznamená součin, ale 9 devítek vynásobených v řadě, 9x9x9x9x9x9x9x9x9. A hlava mi to prostě nebere...

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Jaromír Kohout
DarkCoder:2.3.2024 23:58

Použij cyklus for se stanoveným offsetem. Podívej se do mého řešení výše v diskuzi, část určení mocniny pro kladný celočíselný exponent.. nic složitého...

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Jaromír Kohout:3.3.2024 0:14

Ne, bohužel. Asi budu muset vrátit doklady o dosaženém vzdělání, protože 99% návštěvníků to dává a já ne. Nechápu už to zacyklení, že banán = banán * hruška, to je pro mě opravdu těžko pochopitelné. To je jako bych napsal rovnici, že x = 3x. Nebo v tomhle případě x = x * x * x. Díky za snahu, ale asi nemám na programování buňky. Nedává mi to smysl.

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 153.