Разное - Сопоставление математическим формулам их названий

Ответить
Аватара пользователя
Ghost

Разное - Сопоставление математическим формулам их названий

Сообщение Ghost »

Всем доброго времени суток!



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

Я смог сделать только проверку на корректность введённой формулы, а что делать дальше - не знаю...



Вот что я пока что имею:



Код:

Код: Выделить всё

function proverka (s:ShortString): byte;
//функция проверяет правильность ввода функции
//kolvoskobok может быть отрицательным поэтому шотинт
var kolvoskobok:shortint;
i:byte;
begin
//проверяем первый символ
if s[1]='(' then kolvoskobok:=1 else
begin
kolvoskobok:=0;
if ( not (s[1] in ['a'..'z', '!', '0', '1']) ) then begin proverka:=1; exit; end;
end;
//проверяем последний символ
if s[length(s)] in ['&','+','-','~','@','|','/','!','('] then begin proverka:=length(s); exit; end;
proverka:=0;
//проверяем оставшиеся символы
for i:=2 to length(s) do
begin
if s[i]='(' then begin inc(kolvoskobok); if (s[i-1] in ['a'..'z',')','0','1']) then begin proverka:=i; exit; end; end
else if s[i]=')'then begin dec(kolvoskobok); if (s[i-1] in ['&','+','-','~','@','|','/','!','(']) then begin proverka:=i; exit; end; end
else if (s[i] in ['a'..'z','0','1']) then begin if (s[i-1] in ['a'..'z',')','0','1']) then begin proverka:=i; exit; end; end
else if (s[i] in ['&','+','-','~','@','|','/']) then begin if (s[i-1] in ['&','+','-','~','@','|','/','!','(']) then begin proverka:=i; exit; end; end
else if s[i]='!' then begin if (s[i-1] in ['a'..'z',')','!','0','1']) then begin proverka:=i; exit; end; end
else begin proverka:=i; exit; end;
end;
//проверяем количество скобок
if kolvoskobok  0 then proverka:=255;
end;

Подскажите, пожалуйста, в каком направлении мне копать дальше?
Аватара пользователя
Ghost

Re: Разное - Сопоставление математическим формулам их названий

Сообщение Ghost »

Насколько я понял, мне нужна что-то типа БД с самыми распространёнными мат. формулами, которая бы содержала саму формулу, + её название, а дальше, методом сравнения двух формул, введённой пользователем с теми, что находятся в базе я бы находил нужную...

Как бы это всё реализовать?
Аватара пользователя
lxa85

Re: Разное - Сопоставление математическим формулам их названий

Сообщение lxa85 »

Ghost, вводи табуляцию! Твой код сложно читать.

Конструкцию



PHP код:

Код: Выделить всё

//проверяем первый символ

if s[1]='(' then 

  kolvoskobok:=1 else begin

       kolvoskobok:=0;

       if ( not (s[1] in ['a'..'z', '!', '0', '1']) ) then begin

              proverka:=1; 

              exit; 

        end; // if ( not (s[1] in ...

   end;// else if s[1]='(' 






я не понимаю.

Мы первым условием смотрим на s[1] зачем проверка на другие символы?

Ладно, если работает, то пусть будет.

А вот это что?



PHP код:

Код: Выделить всё

//проверяем последний символ

if s[length(s)] in ['&','+','-','~','@','|','/','!','('] then begin proverka:=length(s); exit; end;

proverka:=0; 






В любом случае после выполнения этого кода проверка будет равно нулю!

Или exit - безусловный выход из процедуры? Это знаете ли моветон. (Я не спорю, есть случаи когда Exit применим, но это явно не тот случай)



Блок

//проверяем оставшиеся символы

переписать с использованием конструкции case of



Где формулировка задачи?

Где возможные варианты написания формул? (Интересно наличие там символов '&',''~','@','|', а умножение кстати где?)

Это отправная точка, из-за чего весь сыр-бор собственно.



ИМХО

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

Как дальше делать по шагам, не скажу Изображение
Аватара пользователя
pva

Re: Разное - Сопоставление математическим формулам их названий

Сообщение pva »

1. формулу нужно разобрать в дерво выражений

2. ввести оценочную функцию близости деревьев (наложения скелетов выражений) с параметрами сложности (кол-во ветвей) и похожести (расположение операторов на своих местах)

3. создать базу данных деревьев - названий

4. выбирать из базы максимально сложные, затем максимально похожие



Может возникнуть ситуация, когда формулу невозможно узнать. Вообще как работает разбор (если натолкнёт на идеи) можно посмотреть на мат.пакете Wolfram Reserach Mathematica. Там движок позволяет делать пользовательските замены (assumptions) при упрощении формул (simplify)
Аватара пользователя
lxa85

Re: Разное - Сопоставление математическим формулам их названий

Сообщение lxa85 »

pva, эх ты! Взял, все рассказал.

Придется отыгрываться на реализации алгоритма. Изображение
Аватара пользователя
pva

Re: Разное - Сопоставление математическим формулам их названий

Сообщение pva »

lxa85, это твой студент? Я дико извиняюсь Изображение Но если он через неделю сможет вслух воспроизвести идею алгоритма и ответить на каверзные вопросы про подбор функции сравнения - ставь зачёт не думая Изображение

А вообще тема очень интересная. Если будет рабочий вариант тестового примера, я помогу довести его до ума. По сути это простейший переводчик иностранных языков. Программа разбирает текст на синтаксические конструкции, а потом ищет их "перевод" в базе данных.
Аватара пользователя
lxa85

Re: Разное - Сопоставление математическим формулам их названий

Сообщение lxa85 »

pva,
Цитата pva:



lxa85, это твой студент? Я дико извиняюсь
Разное - Сопоставление математическим формулам их названий




Изображение Нет, не мой, просто был шанс для маневра Изображение


Цитата pva:



А вообще тема очень интересная.
Разное - Сопоставление математическим формулам их названий




По поводу автоматического перевода текста столько трудов написано, что практически на все случаи жизни.

Посмотрим как Ghost "отсреливаться" будет, если что, материал по переводу текстов подкину, тут его скопилось немного Изображение
Ответить

Вернуться в «Программирование и базы данных»