Читаем Параллельное и распределенное программирование на С++ полностью

if(validTrip(I,Origin)){

return(true);

}

return(false);

}

Операторы "||" и "&&", используемые в классах предположений, позволяют определить, истинно данное предположение или ложно. В каждом из этих определений операторов в конечном счете вызывается метод operator () , определенный в классе-потомке. Обратите внимание на определение оператора "||" (см. листинг 12.6). Этот оператор определен следующим образом.

template bool proposition::operator||

(proposition &X)

{

return((*this)() || X());

}

Это определение позволяет использовать следующий код.

trip_announcement А;

performance_statement В;

if (А || В) {

// Какие-нибудь действия.

}

При вычис л ении выражений А или В будет вызван оператор operator (). Каждый класс предположений определяет поведение оператора operator () по своему. Напри м ер, в классе trip_announcement оператор operator () определяется так.

bool trip_announcement::operator()(void) {

list::iterator I;

if(directTrip()){

return(true);

}

I = UniverseOfDiscourse.begin();

if(validTrip(I, Origin)){

return(true);

}

return(false);

}

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

Детройт - Толедо

Толедо - Колу м бус

Тогда объект класса trip_announcement «доложит» о то м, что утверждение о су щ ествовании автобусного м аршрута из Детройта в Колу м бус истинно, нес м отря на то, что область рассуждений не содержит утверждения о пря м о м маршруте:

Детройт - Колу м бус

Объект класса trip_announcement действительно проверит, существует ли прямой маршрут из Детройта в Колумбус. Если он существует, объект возвратит значение ИСТИНА. В противном случае он попытается найти обходной путь. Подобное поведение реализуется так.

if(directTrip()){

return(true);

}

I = UniverseOfDiscourse.begin();

if(validTrip(I,Origin)){

return(true);

}

«Самоопределением» истинности объект обязан оператору operator () класса trip_anouncement. Метод directTrip () довольно прост, и его работа заключается в последовательном просмотре области рассуждений на предмет существования следующего утверждения:

Детройт - Колу м бус

Метод validTrip () , чтобы узнать, существует ли обходной путь, использует технологию поиска вглубь (Depth First Search— DFS). Определения методов validTrip () и directTrip () приведены в листинге 12.7.

// Листинг 12.7. Определения методов validTrip() и // directTrip()

bool trip_announcement::validTrip(list::iterator I, string TempOrigin)

{

if(I == UniverseOfDiscourse.end()){ if(Candidates.empty()){ TruthValue = false; return(false);

}

else{

trip_announcement Temp; Temp = Candidates.top(); I = find(UniverseOfDiscourse.begin(), UniverseOfDiscourse.end(),Temp); UniverseOfDiscourse.erase(I); Candidates.pop(); I = UniverseOfDiscourse.begin(); if(I != UniverseOfDiscourse.end()){ TempOrigin = Origin;

} else {

TruthValue = false; return(false);

}

}

>

if((*I).origin() == TempOrigin &&

(*I).destination() == Destination){ Candidates.push(*I); TruthValue = true; return(true);

}

if((*I).origin() == TempOrigin){ TempOrigin = (*I).destination(); Candidates.push(*I);

}

I++;

return(validTrip(I,TempOrigin));

bool trip_announcement: :directTrip(void) {

list::iterator I; I = find(UniverseOfDiscourse.begin(),

UniverseOfDiscourse.end(), *this); if(I == UniverseOfDiscourse.end()){

TruthValue = false;

return(false);

}

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных