Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2009, 14:38   #1
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
Вопрос С# Оптимизация 2х условий в цикле

Доброго дня !

У меня возник такой вопрос по "компилятору" . Использую MS Visual C# 2008 EE

Код:
    // Вывод 2D-массива на экран
    static void View2DArray(int[,] a,bool ShowD)
    {

        Console.WriteLine();
        int n = a.GetLength(0);   // число строк
        int m = a.GetLength(1); //  число столбцов
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
                if (ShowD == true && i==j) { Console.ForegroundColor = ConsoleColor.Green; }
                Console.Write("{0, 3:d} ", a[i, j]);
                if (ShowD == true && i == j) { Console.ForegroundColor = ConsoleColor.Gray; }
            }
            Console.WriteLine();
        }
    }
Вопрос заключается в следующем : Будет ли зависить скорость работы программы (пусть даже в минимальных интервалах времени ( важен принцип ) ) от расположения
Код:
if (ShowD == true && i==j)
или
Код:
if (i==j  && ShowD == true)
?

В 1вом случае каждый раз будет проверятся значение ShowD во 2ром только после проверки находится ли элемент диагонали.

Но это с точки зрения исходников , а с точки зрения компилятора?)

Спасибо !
Lime вне форума Ответить с цитированием
Старый 01.10.2009, 21:51   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Для И, если результат первого выражения ложь, то второе не вычисляется. А вообще можете это проверить самостоятельно, написать что-нибудь вроде:
Код:
i = 0;
if( (1==0) && (++i == 0) );
// Вывод i
Если i будет 0, то второе условие не вычислялось
netrino вне форума Ответить с цитированием
Старый 01.10.2009, 21:58   #3
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
Подмигивание

Цитата:
Сообщение от netrino Посмотреть сообщение
Для И, если результат первого выражения ложь, то второе не вычисляется. А вообще можете это проверить самостоятельно, написать что-нибудь вроде:
Код:
i = 0;
if( (1==0) && (++i == 0) );
// Вывод i
Если i будет 0, то второе условие не вычислялось
Логично , Спасибо !

Проверил - не вычисляется - значит можно таким образом "оптимизировать" более трудные для проверок циклы и в начало выставлять более простые условия ...

Можно закрывать

Последний раз редактировалось Lime; 01.10.2009 в 22:03.
Lime вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Настройка условий Combobox ruavia3 Microsoft Office Excel 2 29.05.2009 09:33
Сообщение о выполнении условий. sergiksergik Microsoft Office Excel 8 23.05.2009 20:32
Оформление Технических Условий funnydoc Microsoft Office Word 16 16.01.2009 14:10
Вопрос на тему условий Richmond_87 Паскаль, Turbo Pascal, PascalABC.NET 1 08.01.2009 16:35
Два и более условий финкции If MAKEDON Общие вопросы Delphi 7 20.01.2008 09:39