Вверх ↑
Этот топик читают: Гость
Ответов: 1536
Рейтинг: 176
#1: 2010-12-14 00:32:59 ЛС | профиль | цитата
Задача данной программы заключается в поиске всех целых чисел переменных "А" и "В", которые могут входить в это уравнение. Запустив программу, вы поймёте о чём я. Догадываюсь, что реализовать поиск можно гораздо проще, но как?
Поиск неизвестных
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Ответов: 273
Рейтинг: 29
#2: 2010-12-14 08:48:44 ЛС | профиль | цитата
Надо уточнять условия...
Народ скоро подтянется, потому уточню сам:
Уравнение вида A*x+B*y=z, где x,y и z задаются пользователем, а A и B - подбирает программа

Самое простое - прямой перебор всех значений.
Еще непонятно: Следует ли включать отрицательные числа(обычно при решении уравнений их включают)? Если да, то нужно задать им какие-нибудь пределы, иначе будут ответы вида:
-1728222*5+1234573*7=901
что затянет расчеты.

В твоей проге заблудился, и поступил просто: заново написал алгоритм решение этого уравнения перебором, с отрицательными числами и пределом от -(z/min(x,y) до +(z/min(x,y):
Add(MultiElement,3999161,441,154)
{
@Hint=#71:Контейнер, где происходит поиск вариантов. Как его заменить на формулу?|
@Color=65280
AddHint(101,-23,189,39,@Hint)
}
BEGIN_SDK
Add(EditMulti,10915475,28,14)
{
EventCount=1
WorkCount=1
Width=790
Height=592
link(doWork1,9469443:doEvent1,[(47,20)(47,104)])
}
Add(GlobalVar,16417337,280,28)
{
Name="5"
}
Add(GlobalVar,10253595,378,28)
{
Name="901"
}
Add(GlobalVar,6418287,329,28)
{
Name="7"
}
Add(For,12847677,315,168)
{
link(onEvent,7329328:doWork2,[])
link(onStop,3905679:doFor,[(359,181)(359,209)])
link(End,15147173:Var2,[])
}
Add(For,3905679,371,203)
{
Start=-1
Step=-1
link(onEvent,7329328:doWork3,[(417,209)])
link(End,11520419:Var2,[])
}
Add(Math,6979100,322,98)
{
OpType=7
ResultType=0
link(onResult,5024388:doOperation,[])
link(Op1,5203248:Var1,[(328,65)])
}
Add(Math,10772387,280,98)
{
OpType=38
link(onResult,6979100:doOperation,[])
link(Op1,9932103:Var2,[])
link(Op2,4098004:Var1,[(293,58)])
}
Add(Math,5024388,378,98)
{
OpType=2
Op1=-1
ResultType=0
link(onResult,2045220:doClear,[])
}
Add(For,1753849,161,168)
{
link(onEvent,12242655:doWork2,[])
link(onStop,260790:doFor,[(205,181)(205,209)])
link(End,15147173:Var1,[(174,145)])
}
Add(For,260790,217,203)
{
Start=-1
Step=-1
link(onEvent,12242655:doWork3,[(263,209)])
link(onStop,2110592:doEnum,[(262,216)(262,251)])
link(End,11520419:Var1,[(230,152)])
}
Add(GetDataEx,11520419,378,147)
{
link(Data,5024388:Result,[])
}
Add(GetDataEx,15147173,322,140)
{
link(Data,6979100:Result,[])
}
Add(Hub,9469443,126,98)
{
link(onEvent1,10772387:doOperation,[])
link(onEvent2,1753849:doFor,[(154,111)(154,174)])
}
Add(Memory,3798140,273,168)
{
link(onData,12847677:doFor,[])
}
Add(Memory,13654006,427,168)
{
link(onData,15831707:doOperation,[])
}
Add(HubEx,12242655,259,168)
{
link(onEvent,3798140:doValue,[])
}
Add(HubEx,7329328,413,168)
{
link(onEvent,13654006:doValue,[])
}
Add(Math,15831707,476,168)
{
OpType=2
ResultType=0
link(onResult,6505895:doOperation,[])
link(Op2,15889674:Var2,[])
}
Add(GetDataEx,4098004,329,53)
{
link(Data,6418287:Var,[])
}
Add(Math,6505895,525,168)
{
OpType=2
ResultType=0
link(onResult,12050430:doOperation,[])
link(Op1,15666798:Var2,[])
link(Op2,13174020:Var2,[])
}
Add(GetDataEx,9932103,280,49)
{
link(Data,16417337:Var,[])
}
Add(Math,12050430,574,168)
{
ResultType=0
link(onResult,8154227:doCompare,[])
link(Op2,15831707:Result,[(587,156)(565,156)(565,207)(482,207)])
}
Add(If_else,8154227,616,168)
{
link(onTrue,3114042:doString,[])
link(Op2,13113232:Var2,[])
}
Add(GetDataEx,5203248,378,60)
{
link(Data,10253595:Var,[])
}
Add(StrList,2045220,735,91)
{
}
Add(GetDataEx,15666798,525,146)
{
Angle=3
link(Data,3798140:Value,[(517,151)(517,243)(279,243)])
}
Add(GetDataEx,13174020,532,49)
{
Angle=3
link(Data,9932103:Var3,[])
}
Add(GetDataEx,15889674,483,53)
{
Angle=3
link(Data,4098004:Var3,[])
}
Add(FormatStr,3114042,658,168)
{
DataCount=5
Mask="%1*%2+%3*%4=%5"
link(onFString,2045220:doAdd,[(716,174)(716,97)])
link(Str1,15666798:Var3,[(664,151)])
link(Str2,13174020:Var3,[(671,54)])
link(Str3,13654006:Value,[(678,156)(653,156)(653,214)(433,214)])
link(Str4,15889674:Var3,[(685,58)])
link(Str5,13113232:Var3,[(692,65)])
}
Add(GetDataEx,13113232,623,60)
{
Angle=3
link(Data,5203248:Var3,[])
}
Add(ArrayEnum,2110592,749,245)
{
link(onItem,10915475:onEvent1,[(802,251)(802,20)])
link(Array,2045220:Array,[])
}
END_SDK


Тут только код зеленого блока...
Если отрицательные не нужны - алгоритм еще проще...
ЗЫ возможно это не то, что ты хотел - я так в твоей проге и не разобрался - слишком много наворочено в зеленом блоке
карма: 0

0
Ответов: 8933
Рейтинг: 824
#3: 2010-12-14 10:17:20 ЛС | профиль | цитата
ser_davkin, а что по арифметике?
карма: 19

1
файлы: 1algebra.rar [1KB] [139]
Голосовали:ser_davkin
Ответов: 1536
Рейтинг: 176
#4: 2010-12-14 12:24:46 ЛС | профиль | цитата

Леонид писал(а):
ser_davkin, а что по арифметике?

Да, Леонид, именно поэтому я и обратился к вам за помощью. Спасибо, вопрос исчерпан!
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
4
Сообщение
...
Прикрепленные файлы
(файлы не залиты)