Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Сопоставление математическим формулам их названий

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

Аватара для Ghost

Ветеран


Сообщения: 2476
Благодарности: 284


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


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

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

Вот что я пока что имею:
Код: Выделить весь код
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;
Подскажите, пожалуйста, в каком направлении мне копать дальше?

-------
Официальная страница OSZone.net в Facebook:

http://oszone.net/figs/u/88795/11101...facebook-2.png
---
http://oszone.net/figs/u/88795/11072...on Twitter.png


Отправлено: 21:38, 17-12-2009

 

Аватара для Ghost

Ветеран


Сообщения: 2476
Благодарности: 284

Профиль | Сайт | Отправить PM | Цитировать


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

-------
Официальная страница OSZone.net в Facebook:

http://oszone.net/figs/u/88795/11101...facebook-2.png
---
http://oszone.net/figs/u/88795/11072...on Twitter.png


Отправлено: 21:43, 17-12-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Ghost, вводи табуляцию! Твой код сложно читать.
Конструкцию
PHP код: Выделить весь код

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

if s[1]='(' then 
  kolvoskobok
:=else begin
       kolvoskobok
:=0;
       if ( 
not (s[1in ['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

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

ИМХО
можно попробовать получить строение формулы, и сравнить с известными конструкциями.
Как дальше делать по шагам, не скажу

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Последний раз редактировалось lxa85, 18-12-2009 в 06:25. Причина: про exit

Это сообщение посчитали полезным следующие участники:

Отправлено: 06:22, 18-12-2009 | #3

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 07:36, 18-12-2009 | #4


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


pva, эх ты! Взял, все рассказал.
Придется отыгрываться на реализации алгоритма.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 08:04, 18-12-2009 | #5

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


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

Отправлено: 14:10, 19-12-2009 | #6


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


pva,
Цитата pva:
lxa85, это твой студент? Я дико извиняюсь »
Нет, не мой, просто был шанс для маневра

Цитата pva:
А вообще тема очень интересная. »
По поводу автоматического перевода текста столько трудов написано, что практически на все случаи жизни.
Посмотрим как Ghost "отсреливаться" будет, если что, материал по переводу текстов подкину, тут его скопилось немного

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 15:53, 19-12-2009 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Сопоставление математическим формулам их названий

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Сопоставление дисков в терминальном сеансе bryzgalov Microsoft Windows NT/2000/2003 17 09-06-2011 10:24
Сопоставление MPEG4 кодеков на высоком битрейте с MPEG2 Kostuch Видео и аудио: обработка и кодирование 40 08-11-2005 16:49
сопоставление alex11 Хочу все знать 4 21-03-2005 20:04
Расшифровка названий nikich555 Хочу все знать 25 27-12-2002 14:47




 
Переход