Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите написать пару макросов 
:(
    Опции темы
mes
Дата 4.2.2012, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



newbee,  логика работы операторв верна ? :
http://liveworkspace.org/code/6ca831342831...f7cb826178a2406

Добавлено через 2 минуты и 19 секунд
Цитата(boostcoder @  4.2.2012,  00:29 Найти цитируемый пост)
если не будет def, то что вернуть в случае лжи в следующем примере?

первый ложный smile


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 4.2.2012, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  4.2.2012,  01:43 Найти цитируемый пост)
newbee,  логика работы операторв верна ? :
http://liveworkspace.org/code/6ca831342831...f7cb826178a2406

судя по примеру в топике, предполагается в качестве выражений использовать и функции/методы.

Цитата(mes @  4.2.2012,  01:43 Найти цитируемый пост)
первый ложный

тогда записывать тернарное выражение нужно так?:
Код

!(b1)?(b1)
   :!(b2)?(b2)
      :!(b3)?(b3);

PM WWW   Вверх
mes
Дата 4.2.2012, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  4.2.2012,  00:53 Найти цитируемый пост)
судя по примеру в топике, предполагается в качестве выражений использовать и функции/методы.

так для начала то хотелось бы с логикой разобраться, а уж потом думать в каком виде она нужна))



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 4.2.2012, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  4.2.2012,  02:00 Найти цитируемый пост)
для начала то хотелось бы с логикой разобраться

ааа, понял smile
PM WWW   Вверх
mes
Дата 4.2.2012, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  4.2.2012,  00:53 Найти цитируемый пост)
тогда записывать тернарное выражение нужно так?:

полагаю что так :
Код

!(b1)?(b1)
   :!(b2)?(b2)
      :(b3);




--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 4.2.2012, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  4.2.2012,  02:02 Найти цитируемый пост)
:(b3);

но b3 вообще не проверяется.

Добавлено через 1 минуту и 8 секунд
Цитата(newbee @  4.2.2012,  00:48 Найти цитируемый пост)
в случае успешной проверки (AND 1 2 3), возвращаем 3

хотя из примера так и выходит...
PM WWW   Вверх
mes
Дата 4.2.2012, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  4.2.2012,  01:06 Найти цитируемый пост)
но b3 вообще не проверяется. 


а зачем ? если оно ложно значит вернется ложь, если верное, то вернется правда)



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 4.2.2012, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



а для OR в случае лжи во всех выражения, что возвращать?
моцг уже спать просится..

Добавлено через 28 секунд
Цитата(mes @  4.2.2012,  02:08 Найти цитируемый пост)
если оно ложно значит вернется ложь, если верное, то вернется правда

да-да.

Добавлено через 8 минут и 33 секунды
в общем, этот код правильный? smile 
Код

int main() {
   int b1=1, b2=2, b3=3;

   std::cout << ( (b1) ? (b1) : (b2) ? (b2) : ( b3 ) << std::endl;
   std::cout << ( !(b1) ? (b1) : !(b2) ? (b2) : ( b3 ) << std::endl;
}


PM WWW   Вверх
mes
Дата 4.2.2012, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  4.2.2012,  01:10 Найти цитируемый пост)
а для OR в случае лжи во всех выражения, что возвращать?


Цитата(mes @  4.2.2012,  00:22 Найти цитируемый пост)
OR возвращает первое истинное, либо последнее если такого нет..
AND возвращает первое ложное, либо последнее если такого нет..


т.е. таже самая, тернарная конструкция, но без !

Добавлено через 1 минуту и 13 секунд
Цитата(boostcoder @  4.2.2012,  01:10 Найти цитируемый пост)
в общем, этот код правильный?

в моем понимании вопроса да smile



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 4.2.2012, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  4.2.2012,  02:19 Найти цитируемый пост)
в моем понимании вопроса да

в моем тоже smile
Код

#include <iostream>
#include <boost/preprocessor.hpp>

#define Ext_OR_SUBCOND(unused, idx, seq) \
   (BOOST_PP_SEQ_ELEM(idx, seq)) \
   ? \
   (BOOST_PP_SEQ_ELEM(idx, seq)) :

#define Ext_OR(seq) \
   ( \
      BOOST_PP_REPEAT( \
         BOOST_PP_SUB(BOOST_PP_SEQ_SIZE(seq), 1), \
         Ext_OR_SUBCOND, \
         seq \
      ) ( \
         BOOST_PP_SEQ_ELEM( \
            BOOST_PP_SUB(BOOST_PP_SEQ_SIZE(seq), 1), \
            seq \
         ) \
      ) \
   )

#define Ext_AND_SUBCOND(unused, idx, seq) \
   !(BOOST_PP_SEQ_ELEM(idx, seq)) \
   ? \
   (BOOST_PP_SEQ_ELEM(idx, seq)) :

#define Ext_AND(seq) \
   ( \
      BOOST_PP_REPEAT( \
         BOOST_PP_SUB(BOOST_PP_SEQ_SIZE(seq), 1), \
         Ext_AND_SUBCOND, \
         seq\
      ) ( \
         BOOST_PP_SEQ_ELEM( \
            BOOST_PP_SUB(BOOST_PP_SEQ_SIZE(seq), 1), \
            seq \
         ) \
      ) \
   )

int main() {
   int b1=1, b2=2, b3=3;

   std::cout << Ext_OR ((b1)(b2)(b3)) << std::endl; // 1
   std::cout << Ext_AND((b1)(b2)(b3)) << std::endl; // 3
   std::cout << Ext_OR((0)(Ext_AND((1)(0)))(2)) << std::endl; //wait: 2; recieve: 1 : FAIL
   std::cout << Ext_OR((0)(Ext_AND((0)(1)))(2)) << std::endl; //wait: 2; recieve: 2 : OK
}

http://liveworkspace.org/code/3fee4b8abd6a...1412183b759e6ec
вывод:
Цитата

1
3
2
2

ожидания ТС подтверждаются.


Это сообщение отредактировал(а) boostcoder - 4.2.2012, 02:29
PM WWW   Вверх
volatile
Дата 4.2.2012, 02:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Вопрос к даме. Это кальку с какого языка вы пытаетесь реализовать на С++?
что-то имхо очень скриптовое... (и конечно не типизированное)

PM MAIL   Вверх
borisbn
Дата 4.2.2012, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(volatile @  4.2.2012,  02:57 Найти цитируемый пост)
Это кальку с какого языка вы пытаетесь реализовать на С++?

Цитата(boostcoder @  3.2.2012,  16:12 Найти цитируемый пост)
ты таки на лиспе пишешь?

Цитата(newbee @  4.2.2012,  00:43 Найти цитируемый пост)
а кажется lispworks

 smile 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
math64
Дата 5.2.2012, 00:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



как-то не очень удобно в использовании получается
Цитата(boostcoder @  4.2.2012,  02:26 Найти цитируемый пост)
   std::cout << Ext_OR((0)(Ext_AND((1)(0)))(2)) << std::endl;

Вот мой вариант:
Код

template <typename T>
class Saver {
public:
  friend bool operator || (T t, Saver& saver) { saver.save = t; return !!t; }
  friend bool operator && (T t, Saver& saver) { saver.save = t; return !t; }
  T get() { return save; }
private:
  T save;
};

// a && b --> нужно a ? (b ? a : 0) : 0 или !a ? 0 : b ? a : 0 получается !a ? a : b
#define AND && saver ? saver.get() :
// a || b --> a ? a : b
#define OR || saver ? saver.get() :

int f() { return 0; }
int main()
{
Saver<int> saver;
int a = 1, b = 2, c = 0;
cout << (a OR b) << endl;
cout << (a OR c) << endl;
cout << (c OR b) << endl;
cout << (c OR a OR b) << endl;
cout << (c OR (a AND b)) << endl;
cout << (f() OR (a AND b)) << endl;
}

OR работает так, как надо.
AND при истинности возвращает последний элемент, а не первый.

PM   Вверх
mes
Дата 5.2.2012, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(math64 @  4.2.2012,  23:29 Найти цитируемый пост)
AND при истинности возвращает последний элемент, а не первый.

при истинности последний и должен )



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 5.2.2012, 02:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



math64, еще бы от Saver`а избавиться...
PM WWW   Вверх
Страницы: (5) Все 1 2 [3] 4 5 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0643 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.