| 
| 
 | Вопрос # 2 467/ вопрос решён / | 
 |  Приветствую, уважаемые эксперты!Очень нужен Ваш совет!
 Мне необходимо составить программу, которая будет делить два многочлена и выводить ответ с остатком от деления. (К примеру: 3х^3+2x^2+4x-5  / 5x^2+6x+7)
 При помощи каких операторов я смогла бы её составить?
 
|  |   Вопрос задала: Crystal_Maiden (статус: Посетитель)Вопрос отправлен: 27 февраля 2009, 20:49
 Состояние вопроса: решён, ответов: 3.
 |  Ответ #1. Отвечает эксперт: Ученый Здравствуйте, Crystal_Maiden! Предложу такое решение:Кидаем на форму Edit, label и button и пишем:
 
 procedure TForm1.Button1Click(Sender: TObject);
var
X,Y,b:real;
begin
x:=strtofloat(edit1.text);
Y:= (3*exp(ln(X) * x)+ 2*Sqr(X)+4*X-5)/(5*Sqr(X)+6*X+7);
Label1.Caption:=floattostr(y);
end; в едит вводим значение X и нажимаем на кнопку...
 
|  | Ответ отправил: Ученый (статус: 8-ой класс)Время отправки: 27 февраля 2009, 21:40
 Оценка за ответ: 4
 Комментарий к оценке: Спасибо большое, но мне кажется, это немного не то...Тут же для Y уже прописывается значение, а мне нужно, что бы каждый раз вводилось новое выражение и программа выщитывала деление , ну тоесть - сам многочлен-результат и многочлен-остаток.
 |  Ответ #2. Отвечает эксперт: Паровоз Здравствуйте, Crystal_Maiden!Нужно построить последовательность многочленов P[k], S[k] следующим образом. На первом шаге полагаем P[1] равным делимому, а S[1]=0. Очередной шаг делается следующим образом. Пусть построены многочлены P[k-1] и S[k-1], причем P[k-1]=a[n]x^n+... , а делитель Q=b[m]x^m+... . Вычисляем R[k]=a[n]x^(n-m)/b[m] и полагаем P[k]=P[k-1]-Q*R[k],  S[k]=S[k-1]+R[k]. Процесс заканчивается когда степень P[k] стала меньше m. Последний многочлен P[k] есть остаток, а последний многочлен S[k] есть частное.
 
|  | Ответ отправил: Паровоз (статус: 10-ый класс)Время отправки: 28 февраля 2009, 10:51
 Оценка за ответ: 5
 Комментарий к оценке: о, спс за мысль ;)Только я немного не поняла, почему мы S[1] приравниваем к нулю? Там же нужно тоде вводить определённый многочлен...
 |  Ответ #3. Отвечает эксперт: min@y™ В пакете RxLib есть такой класс - TRxMathParser. Он вычисляет результаты формул, которые ему задаются в виде строки.На основе этого класса я написал тебе демо-программу. Прицепляю её к ответу.
 У этого класса есть недостаток: в подставляемых формулах конструкции с возведением в степень, такие как "x^2", "x^3" и т.п. надо ставить в скобки, например, 3*(x^3)+2*(x^2)+4*x-5, иначе он неправильно расставляет приоритеты действий. А в остальном, нормально.
 К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 
 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 28 февраля 2009, 11:14
 Оценка за ответ: 5
 Комментарий к оценке: Спасибо за программу =)А как сделать так, чтобы не нужно было вводить значения "х"? Чтобы прога выдавала ответы с "х". Ну...там ,к примеру: Многочлен-результат = 3х+7, а многочлен-остаток = 2х-5
 |  
 Мини-форум вопросаВсего сообщений: 14; последнее сообщение — 2 марта 2009, 12:38; участников в обсуждении: 6. 
|   | Вадим К (статус: Академик), 27 февраля 2009, 21:23 [#1]:М... операторов? Крайне неверный вопрос. Надо спрашивать, какие алгоритмы надо. А надо будет как минимум парсер, который сможет вычитывать выражения и превращать в более удобную для обработки форму.
 А потом надо вспоминать математику и понять как сам алгоритм деления.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Ученый (статус: 8-ой класс), 27 февраля 2009, 21:44 [#2]:опс, опечаточка.... надо Y:= (3*exp(ln(X) * 3)+ 2*Sqr(X)+4*X-5)/(5*Sqr(X)+6*X+7);
 |  
|   | Паровоз (статус: 10-ый класс), 27 февраля 2009, 22:51 [#3]:"Y:= (3*exp(ln(X) * x)+ 2*Sqr(X)+4*X-5)/(5*Sqr(X)+6*X+7);" "опс, опечаточка...."
 
 Никакого отношения это к делению с остатком не имеет.
 |  
|   | Crystal_Maiden (статус: Посетитель), 27 февраля 2009, 23:13 [#4]:Вадим, а вы бы не могли по подробнее мне объяснить, что такое парсер, а то я новичок в Delphi, да и вообще в программировании... Ну с математикой вроде проблем нет, это нужно делить уголком, а вот как это прописать, я в затруднении...
 |  
|   | Вадим К (статус: Академик), 27 февраля 2009, 23:29 [#5]:парсер - это кусок кода, который преобразует строку в виде 3х^3+2x^2+4x-5 и преобразовывала в какое то внутренее, более удобное для работы. Но если вы новичек, то слишком уж резко взялись. Думаю, что даже если я это напишу - не поможет. И мне прийдётся писать и деление. а мне честно, не хочеться связиваться с этим. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Crystal_Maiden (статус: Посетитель), 27 февраля 2009, 23:52 [#6]:Эх...ну мне нужно вот именно это сделать, если бы был выбор, то конечно бы с такого не стала начинать. А не могли бы вы как то подтолкнуть, навести на правильную мысль с этим парсером, ну или посоветовать литературу, где про это будет хоть что то написано... Я очень хочу научиться работать в Делфи, но конечно опыта пока - полный ноль... =(
 |  
|   | Мережников Андрей (статус: Абитуриент), 28 февраля 2009, 05:33 [#7]:to Crystal_Maiden Вы уверены, что правильно поняли условие задачи? Или это задача с какой-то олимпиады по программированию? Если не сложно - приведите текст задачи дословно
 |  
|   | Crystal_Maiden (статус: Посетитель), 28 февраля 2009, 10:40 [#8]:Та вроде да... Вот условие:
 Вид данных - Выражения для двух многочленов; Опперации - Деление двух многочленов.
 
 С интерфейсом проблем нет, а вот с самим кодом...
 на первой строке ввод - многочлен делимое, на второй - многочлен-делитель, справа от ник кнопки "Ввести". после этого снизу кнопка "Разделить" и 2 строки: "Многочлен-результат" и "многочлен-остаток"
 |  
|   | Паровоз (статус: 10-ый класс), 28 февраля 2009, 16:18 [#9]:"Только я немного не поняла, почему мы S[1] приравниваем к нулю?" S[k] это текущее частное на k шаге, которое получается суммированием и для того. чтобы считать его по формуле S[k]=S[k-1]+R[k] нужно считать, что S[1]=0.
 |  
|   | min@y™ (статус: Доктор наук), 1 марта 2009, 10:47 [#10]: Цитата: А как сделать так, чтобы не нужно было вводить значения "х"? Чтобы прога выдавала ответы с "х". Ну...там ,к примеру: Многочлен-результат = 3х+7, а многочлен-остаток = 2х-5
 
 
 Это кто ж придумал такое задание, интересно? Этот человек фантастику не пишет, случайно?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Вадим К (статус: Академик), 1 марта 2009, 11:53 [#11]:to min@y™ Вполне нормальное задание для человека, который знает математику и начала теории парсеров. Я более чем уверен, что я её могу решить.
 Конечно, если выражения будут задаваться в хитром виде, а не нормализированом, то тогда сильно усложняется.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Crystal_Maiden (статус: Посетитель), 1 марта 2009, 12:32 [#12]:to min@y™ Та вот...добрый дядя постарался ^^...
 |  
|   | min@y™ (статус: Доктор наук), 2 марта 2009, 12:35 [#13]: Цитата: Я более чем уверен, что я её могу решить. Теоретически, конечно, это возможно. Но это отнюдь не учебная задача. Желаю удачи.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Вадим К (статус: Академик), 2 марта 2009, 12:38 [#14]:если установить ограничения на формат входных данных (ну тоесть  что многочлены вводяться ручками покоэффициентно в табличку либо записаны в строгом формате, который парсить просто), то задача - учебная! другое дело, если входной многочлен задан достаточно в произвольном формате.
 Галочка "подтверждения прочтения" - вселенское зло. |  31 января 2011, 20:03: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |