Софтуерно Инженерство
Loading...
+ Нов въпрос
ioannah avatar ioannah 18 Точки

C# - Въпрос относно декларация на for цикъл?

 Здравейте, решавам задачи от изпита и открих едно решение. В него се състои следното:

 for(int c = 0; c < cols; c++)
        {
            for(int r = c % 2 == 0 ? 0 : rows - 1; r < rows && r >= 0; r = c % 2 == 0 ? r + 1 : r - 1)
            {
                command = matrix[r][c];

 

 Интересува ме значението на първата и третата част от втория цикъл. (int r = c % 2 == 0 ? 0 : rows - 1      и     r = c % 2 == 0 ? r + 1 : r - 1 )

 

Благодаря. 

  

Тагове:
0
Programming Fundamentals
willystyle avatar willystyle 266 Точки

Някой знае приоритетите и го е написал без скоби, но в общи линии означава следното:

1) c % 2 == 0 проверява дали с е четно;

2) r приема стойност от тернарния оператор -> ако c e четно връща за r 0, ако е нечетно връща row - 1;

Аналогично, втория израз:

Ако с е четно увеличи r с 1, aко е нечетно намали с 1.

 

1
aquaruiz avatar aquaruiz 68 Точки

Здравей,

Tози синтаксис се нарича тернарен оператор. Използва се за съкратен запис на условни конструкции.

Например:

if(some condition)
{
    do this;
}
else
{
    do that;
}

Това може да се съкрати така:

some condition ? do this : do that;

Oбикновено резултатът от тернарния оператор се присвоява на променлива, както е и в случая.

  1. int r = c % 2 == 0 ? 0 : rows - 1
  2. r = c % 2 == 0 ? r + 1 : r - 1

 

1
15/12/2018 17:59:51
kolioi avatar kolioi 472 Точки

Ако c е четно число, тогава c % 2 = 0 и вътрешния цикъл става

for(int r = 0; r < rows && r >= 0; r = r + 1)

а ако c е нечетно число

for(int r = rows - 1; r < rows && r >= 0; r = r - 1)

т.е. в пърия случай обхождаме матрицата от първия до последния ред, а във втория случай на обратно. Хитро, но малко трудно за разбиране. В такива случаи е най-лесно да разпишеш отделните случаи за да разбереш логиката по-лесно.

1