IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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: Vysvětlení k - Řešené úlohy k 6. lekci C# .NET - pokročilý příklad

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
tomáš Vaško:6.2.2023 9:39

Ahoj. Nejde mi to do hlavy a snažím se to pochopit (jsem samouk s touhou se někam posunout):

for (int i = levaMez1; i <= pravaMez1; i++)
{
    for (int j = levaMez2; j <= pravaMez2; j++)
    {
        soucet = i + j;
        if (((soucet <= pravaMez2) && (soucet >= levaMez2)) || ((soucet <= pravaMez1) && (soucet >= levaMez1)))
            Console.Write("[{0};{1}], ", i, j);

Jde konkrétně o ten součet. Sečtu hodnoty mezí a na konci doplním proměnnou ++ ? Pro někoho banální věc, ale musel jsem si otevřít hotové řešení, které stejně nechápu, anebo jak na tu úlohu nahlížet.
Děkuji za konstruktivní vysvětlení.
T.

Editováno 6.2.2023 9:41
 
Odpovědět
6.2.2023 9:39
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:6.2.2023 10:44
for (int i = i_start; i <= i_end; i++)
// opakuj od i=i_start do i<=i_end, i zvysuj o +1 (i++ nebo i+=1 nebo i = i+ 1)
// cili, treba opakuj od 0 do 8, krok je +1 zapises takto
// int i = 0; i <= 8; i++
// cili, treba opakuj od 0 do 8, krok je +3 zapises takto
// int i = 0; i <= 8; i+=3 // takze se provede cyklus pro i=0, i=3, i=6 a potom je i=9 a 9>8 a to se cyklus nzastavi a dal nejede
// cili, treba opakuj od 0 do 8, krok je * 2 muzes zapsat i pomoci binarniho shiftu (to je nasobeni/deleni dvema, pridani/odebrani bitu) takto
// int i = 0; i <= 8; i>>=1  // je to podobne, ne stejne, jako i = i * 2
{
    for (int j = j_start; j <= j_end; j++)
    {
        soucet = i + j;
// soucet vychazi:
// i = 0, j = 0, 1, 2, 3... => 0, 1, 2, 3...
// i = 1, j = 0, 1, 2, 3... => 1, 2, 3, 4...
// i = 2, j = 0, 1, 2, 3... => 2, 3, 4, 5...

        if (((soucet <= pravaMez2) && (soucet >= levaMez2)) || ((soucet <= pravaMez1) && (soucet >= levaMez1)))
// tenhle zapis muzes napsat prehledneji takto (soucet das doprostred, takze docilis neceho jako a <= soucet <= b)
        if (  levaMez2<=soucet && soucet <= pravaMez2 && levaMez1<=soucet && soucet <= pravaMez1)

            Console.Write("[{0};{1}], ", i, j);

A ten cyklus, kdyz teda nedela nic jineho a je omezen souctem, tak by ho mel obsahovat v podminkach, aby byl ukoncen driv, kdyz je to mozne. Protoze, stejne uz nic dalsiho vypisovat asi nebudes. Ale nejsem si ted uplne jisty, zda by se mel pouzit stejny zapis.

soucet = 0;
for (int i = A; i <= B &&  A<=soucet && soucet <= B && C<=soucet && soucet <= D ; i++)
for (int j = C; j <= D &&  A<=soucet && soucet <= B && C<=soucet && soucet <= D ; j++)
{
soucet = i + j;
 if (  A<=soucet && soucet <= B && C<=soucet && soucet <= D)
}

A, jestli to spravne chapu, tak to vypisuje nejaky druh pyramidy, ze? Nebo, neco podobneho.

Editováno 6.2.2023 10:46
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
6.2.2023 10:44
Avatar
Odpovídá na Peter Mlich
tomáš Vaško:6.2.2023 11:00

Není to pyramida, je to úkol z kurzu ZDE , a díky tvému vysvětlení to již lépe chápu (musím si to přečíst víc krát)

Fakt děkuji moc.

 
Nahoru Odpovědět
6.2.2023 11:00
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:6.2.2023 14:59

Ten ukol se neukaze nikomu, kdo si nekoupi kurz.

 
Nahoru Odpovědět
6.2.2023 14:59
Avatar
Odpovídá na Peter Mlich
tomáš Vaško:6.2.2023 15:00

Tak to se omlouvám, neuvědomil jsem si to. Nicméně rada padla na úrodnou půdu.

 
Nahoru Odpovědět
6.2.2023 15:00
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 5 zpráv z 5.