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

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

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 24.12.2008, 16:03   #1
Юнлинг
Форумчанин
 
Регистрация: 17.10.2008
Сообщений: 239
По умолчанию Действия с переменными boolean в VBA

Уважаемые господа!

Корректируя общую прогу я автоматически заменил строчку

If p1(k2) > 0 And p2(k2) = p2(k2 + 1))) Then

на

If p1(k2) > 0 And ((p2(k2) And p2(k2 + 1)) Or (Not p2(k2) And Not p2(k2 + 1))) Then

после чего задумался а правильно ли я сделал?
Входные условия массив p1 - цифровой; p2 - логический (Boolean)
Юнлинг вне форума
Старый 24.12.2008, 23:49   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Для простоты понимания введём обозначения: А = p2(k2), В = p2(k2 + 1), где А и В - логические значения.

Таким образом, Вы заменили в условном операторе выражение
А = В на выражение (А & B) or (not_A & not_B).

Хотя эти два выражения тождественны, вычисление второго займёт немного больше времени.

Эта разница несущественна - цикл с 100 000 000 итераций на моём древнем компьютере завершился за 10 и 20 секунд соответственно (для первого и второго способа).

Проверка производилась при помощи такого кода:
Код:
Sub test()
    Dim X As Boolean, Y As Boolean: Debug.Print "=================": Debug.Print Now
    For i = 1 To 100000000
        'If X = Y Then
        If (X And Y) Or (Not X Or Not Y) Then

        End If
    Next: Debug.Print Now
End Sub
Таким образом, в Вашем случае абсолютно неважно, какой из способов записи условия Вы выберите.
(конечно, если в Вашем массиве не миллионы записей)

Хотя, на мой взгляд, запись p2(k2) = p2(k2 + 1) намного удобнее для восприятия.

Последний раз редактировалось EducatedFool; 25.12.2008 в 03:06.
EducatedFool вне форума
Старый 25.12.2008, 05:11   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если уж разговор зашел о скорости выполнения, то позволю заметить, что вместо конструкции
Код:
If [условие 1] And [условие 2] And [условие 3] Then
лучше использовать
Код:
If [условие 1] Then
        If [условие 2] Then
            If [условие 3] Then
                ...
                ...
            End If
        End If
    End If
Т.к. в первом случае все условия проверяются безусловно, не смотря на то, выполняются они или нет. Во втором случае, при более громоздкой записи кода, при невыполнении, например, 1-го условия, все остальные игнорируются. Еще один "плюс" в том, что если, например, невыполнение первого условия приводит к ошибке при проверке второго. Так, например, выражение
Код:
If [A1]<>0 And [A2]/[A1]>0 Then
приведет к ошибке; при применении второго варианта - нет.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 25.12.2008, 07:57   #4
Юнлинг
Форумчанин
 
Регистрация: 17.10.2008
Сообщений: 239
По умолчанию

Благодарю господа!

Тема закрыта
Юнлинг вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с переменными. TheWanderer Общие вопросы C/C++ 5 06.10.2008 18:15
И опять boolean. dimple Помощь студентам 4 04.05.2008 14:03
Разработать функцию на С++ ls5Latin(constS:string):boolean GTP_edition Общие вопросы C/C++ 3 25.04.2008 18:25
Boolean Air Общие вопросы Delphi 2 16.02.2008 17:15
Boolean... ZhekON Общие вопросы Delphi 2 17.06.2007 00:39