NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 10 - Cyklus for v Javě

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
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é.

 
Odpovědět
10.7.2023 21:31
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.

 
Odpovědět
25.7.2023 16:10
Avatar
DarkCoder
Člen
Avatar
Odpovídá 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.

Odpovědět
25.7.2023 19:00
"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));
;-)
 
Odpovědět
4.9.2023 18:19
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;
}
...
 
Odpovědět
27.11.2023 11:30
Avatar
Radim Štross
Tvůrce
Avatar
Odpovídá 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.

 
Odpovědět
4.12.2023 17:38
Avatar
DarkCoder
Člen
Avatar
Odpovídá 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!

Editováno 4.12.2023 19:35
Odpovědět
4.12.2023 19:33
"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...

 
Odpovědět
2.3.2024 23:32
Avatar
DarkCoder
Člen
Avatar
Odpovídá 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...

Odpovědět
2.3.2024 23:58
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá 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.

 
Odpovědět
3.3.2024 0:14
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 151.