замена правого переднего рычага и левой задней ноги.
Или
стучит в правом переднем рычаге
1. Ищем любой глагол - маска "2". По хорошему надо бы запомнить в отдельной таблице все глаголы.
Потом доставать их от туда по очереди.
2. Заполняем две таблици строк, в одну (таб1.) записываем все существительные, а в другую все остальные (таб2.), которые принадлежат глаголу.
3. Достаём из таблици (таб2.) номера всех остальных и записываем все существительные принадлежащие им в (таб1.)
4. Смотрим, какие прилагательные связаны с этими существительными из таб1 и выводим их на печать.
В качестве таблиц лучше применить очередь или стек, очередь лучше.
Схему наверное делать не буду, лучше сделаю компонент - трассировщик.
------------ Дoбавленo в 23.27:
Вот, практически ничего не переделывал.
Поменял последовательность соединений и добавил пару элементов.
Make(delphi)
ver(4.04 build 185)
Add(MainForm,2953706,77,112)
{
Width=529
Height=404
link(onCreate,945197:doSetLanguage,[(314,132)(314,167)])
}
Add(ListBox,5543210,84,168)
{
Left=5
Top=10
Width=505
Height=160
Strings=#32:стучит в правом переднем рычаге.|77:Тем более поразительной среди всего этого хаоса казалась тонкая прямая линия.|52:замена правого переднего рычага и левой задней ноги.|31:стучит в правом переднем рычаге|61:Из темноты раздавались странные крики, шорохи и встряхивание.|
DataType=1
link(onClick,7948982:doEvent1,[])
}
Add(ListBox,8311011,772,375)
{
Left=245
Top=180
Width=265
Height=185
}
Add(Hub,7948982,133,175)
{
OutCount=4
link(onEvent1,8311011:doClear,[(459,181)(459,388)])
link(onEvent2,945197:doSetText,[(238,188)(238,174)])
link(onEvent3,945197:doNumOffer,[(238,195)(238,188)])
link(onEvent4,8871095:doFor,[(238,202)(238,391)])
}
Add(Morphology,945197,329,161)
{
link(onNumWord,13033453:doEvent1,[(502,181)(502,328)])
link(onNumWordConnect,9178194:doCompare,[(443,195)(443,398)])
link(Mode,14131824:Value,[])
}
Add(For,8871095,329,385)
{
link(onEvent,12198169:doCompare,[(394,391)(394,216)])
link(End,945197:Count_Words,[])
}
Add(ComparisonAttributes,12198169,483,210)
{
Mode=2
Mask="1"
Point(Mask)
link(onTrue,3339762:doEvent1,[])
}
Add(For,14952044,546,343)
{
link(onEvent,945197:doIConnect,[(585,349)(585,276)(308,276)(308,223)])
link(End,945197:Count_Connect,[(559,257)(363,257)])
}
Add(ComparisonAttributes,9178194,455,392)
{
Mode=2
Mask="3"
link(onTrue,1144356:doEvent1,[(499,405)(499,391)])
}
Add(PointHint,11649182,161,98)
{
Info=#17:Загружает словарь|
Frame=1
Width=120
}
Add(PointHint,286333,161,140)
{
Info=#14:Входная строка|
Frame=1
Width=120
}
Add(PointHint,2591212,168,196)
{
Info=#18:Обязательно нужно!|16:Заполняет массив|15:адресами слов в|18:данном предложении|
Frame=1
VAlign=0
Width=127
Height=60
}
Add(PointHint,7872888,84,399)
{
Info=#37:Запускаем перебор слов в предложении.|
Frame=1
Width=225
}
Add(PointHint,8019754,448,126)
{
Info=#34:Сравниваем все слова в предложении|38:с маской (форма) и находим его индекс.|
Frame=1
VAlign=0
Width=211
}
Add(PointHint,7064423,168,266)
{
Info=#21:В точку doGetConnect |19:подаём индекс слова|18:для которого будем|13:искать связи.|
Frame=1
VAlign=0
Width=127
Height=60
}
Add(PointHint,8019867,266,462)
{
Info=#44:Сравниваем все связи с маской (морф-атрибут)|21:и получаем их индекс.|40:По этому индексу выводим слова в таблицу|34:через точки doNumWord и onNumWord.|
Frame=1
VAlign=0
HAlign=0
Width=253
Height=81
}
Add(PointHint,9197259,707,203)
{
Info=#25:Перебор всех связей слова|23:через точку doIConnect.|
Frame=1
VAlign=0
HAlign=0
Width=148
}
Add(Memory,14131824,357,91)
{
Default=Integer(1)
}
Add(Hub,3339762,539,217)
{
OutCount=4
link(onEvent1,12787019:doEvent1,[(565,223)(565,269)(436,269)(436,314)])
link(onEvent2,10042208:doSig1,[(577,230)(577,384)])
link(onEvent3,945197:doGetConnect,[(565,237)(565,227)(317,227)(317,216)])
link(onEvent4,14952044:doFor,[(565,244)(565,296)(534,296)(534,349)])
}
Add(Hub,12787019,448,308)
{
InCount=2
OutCount=1
link(onEvent1,945197:doNumWord,[(474,314)(474,254)(317,254)(317,195)])
}
Add(Hub,1144356,511,385)
{
OutCount=3
link(onEvent1,10042208:doSig2,[])
link(onEvent2,12787019:doEvent2,[(537,398)(537,360)(436,360)(436,321)])
link(onEvent3,3272941:doSig1,[(585,405)(585,447)])
}
Add(Memory,12220201,700,301)
{
}
Add(DoData,13794249,700,378)
{
link(onEventData,14504508:doWork2,[(741,384)(741,381)(741,381)])
link(Data,10322672:Var2,[])
}
Add(Andlogic,10042208,602,378)
{
link(onIYes,13794249:doData,[])
}
Add(Hub,13033453,623,322)
{
link(onEvent1,12220201:doValue,[(669,328)(669,307)])
link(onEvent2,3272941:doSig2,[(641,335)(641,454)])
}
Add(Andlogic,3272941,644,441)
{
link(onIYes,2880873:doData,[])
}
Add(DoData,2880873,693,441)
{
link(onEventData,14504508:doWork3,[(753,447)])
link(Data,10322672:Var1,[(699,341)])
}
Add(HubEx,14504508,749,375)
{
link(onEvent,8311011:doAdd,[])
}
Add(GetDataEx,10322672,700,336)
{
link(Data,12220201:Value,[])
}