Форум программистов, компьютерный форум CyberForum.ru

Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Яд и мышки... http://www.cyberforum.ru/cpp/thread1681541.html
Есть 1000 колб и есть 10 мышек. В одной колбе есть яд(мышка от него умирает). Но яд действует только ночью. То есть только на утро я пойму подействовал яд на мышку или нет. Но на проверку у меня есть один день. Как программно решить такую задачу?
C++ Считывание и запись в COM порт Есть код на стороне Ардуины, он работает, с ним всё порядке: boolean dataReady = 0; char incomingChar; char typeMessage; String input = ""; int defaultValueC4900ControlVoltage = 1; // int FromPCValueC4900ControlVoltage = defaultValueC4900ControlVoltage; http://www.cyberforum.ru/cpp/thread1681474.html
C++ Межпроцессное взаимодействие и параллельное программирование. Литература
Доброго времени суток. Собственно просьба видна из заголовка треда. Прошу порекомендовать хорошие книги по межпроцессному взаимодействию и параллельному программированию. Как таковая интересует теория, объяснения, как, что, для чего. Причем, желательно, с упоминанием большинства тонкостей во всяких вещах типа разделяемой памяти, семафоров и всего, всего, всего. Прежде всего хочу разобраться в...
C++ Распознавание характера территории по снимкам, полученным с БЛА
Мужики выручайте, пишу диплом на тему "РАСПОЗНАВАНИЯ ХАРАКТЕРА ТЕРРИТОРИИ ПО СНИМКАМ, ПОЛУЧЕННЫХ С БЛА", вся суть диплома в написании программы которая будет по одному методу(на выбор) определять характер изображения который получит со спутник. Пример: нам дали фото со спутника и программа должна определить что на фотографии, определяем (воду,гору,лес, в общем простые составляющие любого фото со...
C++ На какую среду разработки на C++ лучше перейти после изучения Delphi? http://www.cyberforum.ru/cpp/thread1677784.html
Доброго времени! Более 5 лет программирую под Delphi, но хочется перейти на С++, потому как очень много чего интересного появляется только на С++, поэтому если хочется попробовать, например, новый API то для начала мне нужно переписать все заголовки с Си/С++ на Delphi. Но незнание хороших бесплатных сред(IDE) для С++, а так же тонкостей настроек компиляторов/линковщиков, где делфя всё это...
C++ Кракозябры при выводе из файла UTF-8 Здравствуйте. Тема кодировки достаточно популярна. Правда, в этих всех темах я, все же, не нашел то, что хотел, а именно: при считывании символов (могут быть и русские, и английские, и другие символы табл. ASCII) из файла, сам файл в кодировке UTF-8, вместо символов выходят кракозябры, а коды символов -- отрицательные. Собственно вопрос: как исправить эту ситуацию? Пробовал setlocale(LC_ALL,... подробнее

Показать сообщение отдельно
Kvarcenar
5 / 5 / 1
Регистрация: 29.08.2012
Сообщений: 46
13.03.2016, 16:31  [ТС]     Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?"
Цитата Сообщение от hoggy Посмотреть сообщение
разделите пожалуйста на примере следующего кода:
Эх, вот, приходят на мыло уведомления о новых сообщениях - и читаю эту тему.. ))) Народу заняться нечем, и скобки обсуждают... )))) Неужели в откомпилированном виде исполняемый файл будет отличаться в зависимости от наличия/отсутствия скобок в условиях? По идее, компилятор должен привести все одинаковые условия к одному виду. Разве нет?

Но тут просят хитрое сложное условие из реальной жизни, чтоб без скобок ну никак... Дописываю торгового советника для форекса. Приведу пример обработки некоторого события:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 if (Market.VipeData.Layers[LayerN].Way == 1) // слой покупок
  if ((Compare(Market.VipeData.Layers[LayerN].Prices.TPwayPrice - 3.0 * Market.InputData.Terminal.MarketInfo.SPREAD_DOUBLE,
               Market.InputData.Terminal.MarketInfo.BID, Market.InputData.Terminal.MarketInfo.POINT_d10) >= 0) || // профит выше текущей цены как минимум на 3 спреда
      (Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastAccMartinNotLockedN].OrderID2 > 0)) // не первый накопительный
   if (Market.InputData.Terminal.MarketInfo.BID < Market.VipeData.Layers[LayerN].Prices.TPwayPrice) // рынок ниже уровня профита
    if (Compare(Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastAccMartinNotLockedN].OpenPrice + Market.InputData.Terminal.MarketInfo.POINT,
                Market.VipeData.Market.MinBidForAccMinMinutes, Market.InputData.Terminal.MarketInfo.POINT_d10) < 0) // нижняя волна выше трейлинга в 1 пп
     if (Compare(Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastAccMartinNotLockedN].OpenPrice + Market.InputData.Terminal.MarketInfo.POINT,
                 Market.InputData.Terminal.MarketInfo.BID - Market.InputData.Terminal.MarketInfo.STOPLEVEL_DOUBLE,
                 Market.InputData.Terminal.MarketInfo.POINT_d10) <= 0) // STOPLEVEL выдержан
      if (Market.VipeData.Layers[LayerN].Lots.MartinLotNotLocked > Market.VipeData.Layers[LayerN].Lots.CompensatorLotNotLocked) // лот мартина больше лота компенсаторов
       if (Market.InputData.Terminal.Bars[0].Signal.CanBuy) // есть сигнал на покупку
        if ((Market.InputData.Terminal.MarketInfo.ASK <= Market.VipeData.Layers[LayerN].Prices.StandardPriceForLastOrder) || // расстояние выдержано
            (Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastAccMartinNotLockedN].OrderID2 > 0)) // накопительный
         if (Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastAccMartinNotLockedN].Protected == false)
          if ((Market.VipeData.Layers[LayerN].Orders.LastCompensatorNotProtectedN != -1) && // есть незащищённые компенсаторы
              (Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastCompensatorNotProtectedN].OrderID2 ==
               Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastAccMartinNotLockedN].OrderID)) // у нашего ордера есть незащищённый компенсатор
           if (Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastCompensatorNotProtectedN].SecondsOfExisting <=
               Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastAccMartinNotLockedN].SecondsOfExisting) // и этот компенсатор младше нашего ордера
            if (Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastCompensatorNotProtectedN].Lot + Market.InputData.Terminal.MarketInfo.LOTSTEP_d10 <
                Market.VipeData.Orders[Market.VipeData.Layers[LayerN].Orders.LastAccMartinNotLockedN].Lot) // и лот компенсатора меньше лота нашего ордера
 {//...
 }
Страшно представить, как это записать в одно условие... Собственно, каждое новое "if" - это заменитель "&&". А вот там, где "или" - приходится писать со скобками.

Цитата Сообщение от hoggy Посмотреть сообщение
предполагалось, что A,B,C,D,F вы подставите какие то "замороченные выражения",
и проиллюстрируете профит разделения.
Ну, можно создать булевые переменные A,B,C,D,E,F, в них затолкать условия и выполнить проверку в точности, как в приведенном выражении:

Цитата Сообщение от hoggy Посмотреть сообщение
if ( A && B && C && D && !E) somehing();
Однако в таких случаях меня всегда мучает вопрос: "что лучше: усложнить условие или занять память новой переменной?". Ну, например, с точки зрения экономии ресурсов, как сделать лучше:

C++ (Qt)
1
2
3
int i = 5;
if (i + 1 > 3)
{...}
или

C++ (Qt)
1
2
3
4
int i = 5;
int j = i + 1;
if (j > 3)
{...}
С одной стороны, если таких условий будет несколько, то процессору будет легче выполнить одну операцию сложения, а потом кучу сравнений, чем в куче сравнений каждый раз проводить сложение. А с другой стороны, наша программа будет кушать больше оперативной памяти... В общем, я за скобки, если с ними читабельней!
 
Текущее время: 18:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru