|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Сопоставление математическим формулам их названий |
|
Разное - Сопоставление математическим формулам их названий
|
Ветеран Сообщения: 2476 |
Профиль | Сайт | Отправить 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; |
|
------- Отправлено: 21:38, 17-12-2009 |
Ветеран Сообщения: 2476
|
Профиль | Сайт | Отправить PM | Цитировать Насколько я понял, мне нужна что-то типа БД с самыми распространёнными мат. формулами, которая бы содержала саму формулу, + её название, а дальше, методом сравнения двух формул, введённой пользователем с теми, что находятся в базе я бы находил нужную...
Как бы это всё реализовать? |
------- Отправлено: 21:43, 17-12-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Ghost, вводи табуляцию! Твой код сложно читать.
Конструкцию
я не понимаю. Мы первым условием смотрим на s[1] зачем проверка на другие символы? Ладно, если работает, то пусть будет. А вот это что?
В любом случае после выполнения этого кода проверка будет равно нулю! Или exit - безусловный выход из процедуры? Это знаете ли моветон. (Я не спорю, есть случаи когда Exit применим, но это явно не тот случай) Блок //проверяем оставшиеся символы переписать с использованием конструкции case of Где формулировка задачи? Где возможные варианты написания формул? (Интересно наличие там символов '&',''~','@','|', а умножение кстати где?) Это отправная точка, из-за чего весь сыр-бор собственно. ИМХО можно попробовать получить строение формулы, и сравнить с известными конструкциями. Как дальше делать по шагам, не скажу |
------- Последний раз редактировалось lxa85, 18-12-2009 в 06:25. Причина: про exit Отправлено: 06:22, 18-12-2009 | #3 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать 1. формулу нужно разобрать в дерво выражений
2. ввести оценочную функцию близости деревьев (наложения скелетов выражений) с параметрами сложности (кол-во ветвей) и похожести (расположение операторов на своих местах) 3. создать базу данных деревьев - названий 4. выбирать из базы максимально сложные, затем максимально похожие Может возникнуть ситуация, когда формулу невозможно узнать. Вообще как работает разбор (если натолкнёт на идеи) можно посмотреть на мат.пакете Wolfram Reserach Mathematica. Там движок позволяет делать пользовательските замены (assumptions) при упрощении формул (simplify) |
Отправлено: 07:36, 18-12-2009 | #4 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать pva, эх ты! Взял, все рассказал.
Придется отыгрываться на реализации алгоритма. |
|
------- Отправлено: 08:04, 18-12-2009 | #5 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать lxa85, это твой студент? Я дико извиняюсь Но если он через неделю сможет вслух воспроизвести идею алгоритма и ответить на каверзные вопросы про подбор функции сравнения - ставь зачёт не думая
А вообще тема очень интересная. Если будет рабочий вариант тестового примера, я помогу довести его до ума. По сути это простейший переводчик иностранных языков. Программа разбирает текст на синтаксические конструкции, а потом ищет их "перевод" в базе данных. |
Отправлено: 14:10, 19-12-2009 | #6 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать pva,
Цитата pva:
Цитата pva:
Посмотрим как Ghost "отсреливаться" будет, если что, материал по переводу текстов подкину, тут его скопилось немного |
||
------- Отправлено: 15:53, 19-12-2009 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Сопоставление дисков в терминальном сеансе | 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 |
|