Diskuze: Dva for cykly v sobě - bez a se závorkami

C# .NET .NET (C# a Visual Basic) Dva for cykly v sobě - bez a se závorkami American English version English version

Aktivity (3)
Avatar
Dominik Baričák:2. července 17:36

Ahoj,
Učím se na zdejších tutoriálech C# a narazil jsem na jeden problém ohledně for cyklu. Snažím se na to přijít sám, ale...na něco jsem asi přišel, ale nedává mi to smysl. Používá se to vůbec ? K čemu je dobrý vnořený cyklus bez závorek ?

První kód chápu. První cyklus zařídí to, aby desetkrát proběhl ten druhý. 10x se tedy pod sebe napíše druhý první.

První kód se závorkami:

using System;

namespace ConsoleApp6
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int j = 1; j <= 10; j++)
            {
                for (int i = 1; i <= 10; i++)
                {

                    Console.Write("první");
                    Console.WriteLine(" druhý");

                }
            }

            Console.ReadKey();
        }
    }
}

Druhý kód bez závorek kolem druhého cyklu chápu tak, že vykoná jen metodu Console.Write("dru­hý"); a potom předá řízení prvnímu cyklu. Ve výsledku to potom na jeden řádek vypíše 10x druhý, předá se řízení prvnímu cyklu a ten potom s mezerou pořád na první řádek pomocí metody Console.WriteLine(" první"); napíše první a odřádkuje.

Druhý bez závorek:

using System;

namespace ConsoleApp6
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int j = 1; j <= 10; j++)

            {
                for (int i = 1; i <= 10; i++)

                    Console.Write("první");
                    Console.WriteLine(" druhý");
            }

            Console.ReadKey();
        }
    }
}

Děkuji všem, kteří to přečetli až sem a díky za všechny rady. Snažil jsem se to popsat co možná nejlíp.

Zkusil jsem: Přijít na to sám. Google moc nepomohl.

Chci docílit: Přejít na další tutoriál :D

 
Odpovědět 2. července 17:36
Avatar
Odpovídá na Dominik Baričák
Andy Scheuchzer:2. července 17:48

Když někam, kde se závorky normálně píší, závorky nenapíšeš, prostě si VS do nich dá jenom první příkaz. Stačí, nebo to potřebuješ podrobněji?

Nahoru Odpovědět  +3 2. července 17:48
Za správnost neručím.
Avatar
Odpovídá na Andy Scheuchzer
Dominik Baričák:2. července 17:57

Takhle stačí. Jen jsem to potřeboval potvrdit. Díky moc !

 
Nahoru Odpovědět 2. července 17:57
Avatar
maxijoey
Člen
Avatar
Odpovídá na Dominik Baričák
maxijoey:9. července 9:22

Jen doplňím, že to není jen o VS. Tohle je prostě vlastnost jazyka. Složené závorky označují blok který se má vykonat. Pokud blok není, vykoná se první příkaz pouze. Takto to funguje u cyklu ale třeba i u podmínek if. A je to tak ve všech C-like jazycích.

 
Nahoru Odpovědět  +2 9. července 9:22
Avatar
Odpovídá na Dominik Baričák
Jan Procházka:9. července 13:32

Dalo by se všeobecně říci, že cykly a větve musí být ohraničené do bloků - procesor musí vždy přesně vědět které instrukce má provádět. V MATLABu, například, po každém ifu, foru atd. musí někde být end, který ukončí, byť i jednopříkazový, blok. V Céčku, například, máš možnost výslovné ohraničení bloku vynechat. Chybějící "značky" kompilátor doplní kolem prvního příkazu.

Je to hodně podobné matematickému zápisu násobení a sčítání. 4*A+B, respektive 4A+B, je "zkrácený" zápis a priori předpokládající, že čtyřikrát "provedeš" A až potom přidáš B. Úplný zápis by byl 4*(A)+B. Zápis 4*(A+B) je jediný možný, jak provést čtyřikrát A a B po sobě.

Důvod je jednoduchý, bez tohoto pravidla bys nikdy přesně nerozklíčoval 4a+b+c. je to 4(a)+b+c, 4(a+b)+c, nebo 4(a+b+c)?

Taky by Ti pomohlo "správné" formátování druhého příkladu. Výpis "druhý" má totiž být odsazený o jeden tabulátor méně a je tak snáz vidět, že se "první" vypíše desetkrát, potom jednou "druhý" a skočí to zpět na výpis série deseti "první" a tenhle skok zpět proběhne celkem desetkrát.

A k čemu se to používá? zkrátí to kód o dva řádky na jednom cyklu, což ho při správném formátování i zpřehlední.

Editováno 9. července 13:33
 
Nahoru Odpovědět  +3 9. července 13:32
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.