Кто-нибудь помогите пожалуйста решить задачу: пользователь задает два многочлена от нескольких переменных. Переменные обозначаются латинскими буквами (их число не более 26). Найти сумму и произведение этих многочленов! Заранее спасибо.
Demon_6661
24.12.2006 15:03
Помогите плиз!
klem4
24.12.2006 15:22
Если многочлен линейный то вот так можно ввести данные многочлена (значения параметров и коэффициентов при них) и вычислить его значение:
uses crt;
type
TCoeff = Single;
PTCoeffs = ^TCoeffs;
TCoeffs = array [1..1] of TCoeff;
function P(const params, coeffs: PTCoeffs; const degree: Integer): Single; var i: Integer; res: Single; begin
res := 0;
for i := 0 to pred(degree) do res := res + params^[i] * coeffs^[i];
P := res; end;
procedure GetPolinom(var params, coeffs: PTCoeffs; const degree: Integer); var i: Integer; begin
for i := 0 to pred(degree) do begin write('params[', i, '] = '); readln(params^[i]); // значения параметров write('coeffs[', i, '] = '); readln(coeffs^[i]); // значения коеффициентов при параметрах end;
Многочлен не обязательно должен быть линейным, а пользователь задает только коэфициенты!
volvo
24.12.2006 16:27
Тогда приведи примеры (хотя бы 5-6) возможных многочленов... Ибо телепаты - в Google
klem4
24.12.2006 16:27
C одними коэффициентами далеко не уедешь, тогда уж и степени надо задавать ...
Demon_6661
24.12.2006 17:37
Пользователь вводит два многочлена 2*(x^2)+2*(y^2) 2*(x^2)-2*(y^2) Паскаль должен нам выдать 1.Произведение 4*(x^4)-4*(y^4) 2.Сумма 4*(x^2)
Demon_6661
24.12.2006 18:04
Не не так. Пользователь задает массив коэффициентов и степеней каждого многочлена. Например ползователь вводит : 1. 2 3 4 2. 2 4 3 Это значит что он ввел многочлен 2*x^2+4*y^4+4*z^3
Demon_6661
24.12.2006 18:41
Помогите пожалуйста кто-нибудь с задачей!
мисс_граффити
24.12.2006 18:47
а как узнать, к каким переменным это относится? то есть различить 2x^2 и 2y^2? или порядок фиксированный, и пользователь должен вводить информацию (пусть нули) по ВСЕМ переменным? а если у него y^2+2y - как быть?
Demon_6661
24.12.2006 19:21
Каждая переменная может встречаться только 1 раз. Переменные - это английский алфавит (поэтому и ограничение 26). Переменные употребляются в алфавитном порядке. Т. е если пользователь вводит 2 3 4 1 2 3 Это значит что многочлен имеет вид 2*a+3*(b^2)+4*(c^3)
Demon_6661
24.12.2006 20:08
Помогите плиз, сдавать завтра!
volvo
24.12.2006 20:11
Цитата(Demon_6661 @ 24.12.2006 14:21)
Каждая переменная может встречаться только 1 раз.
А я введу 1) X^1 + Y^2 2) Z^3 + A^2
Как должен выглядеть результат перемножения? И где его хранить, собственно, если после твоих утверждений о том, что я привел выше, как цитату, я сделал вот так:
const max_degree = 26; type tpoly = record coeff: integer; power: integer; end; tpolynom = array[1 .. max_degree] of tpoly;
Теперь результат перемножения я не могу хранить в такой структуре...
Demon_6661
24.12.2006 20:18
Да нет я имею ввиду 1 раз в каждом многочлене
volvo
24.12.2006 20:22
Указателями пользоваться можно? Или только массивы?
Demon_6661
24.12.2006 20:32
тока массивы и записи
Demon_6661
24.12.2006 21:00
help me please
Demon_6661
24.12.2006 22:17
помогите очень нужно
Demon_6661
24.12.2006 23:03
Вопрос жизни и смерти, вопрос зачет или нет! Выручите пожалуйста
мисс_граффити
24.12.2006 23:22
хватит флудить! сам виноват, что до последнего момента дотянул.
ты говоришь, что каждая переменная в одном многочлене встречается только один раз. допустим: 1) y^2+2*x 2) x^2+2*y В сумме и x, и y будут встречаться в разных степенях...
хотя..... если можно пользоваться записями... уже что-то. максимальная степень ограничена?
Demon_6661
25.12.2006 4:20
Степень ограничим 10
Demon_6661
25.12.2006 4:39
Для удовства можно вводить переменные по порядку, не y^2+x^3 а x^3+y^2
мисс_граффити
25.12.2006 4:46
что-то такое получилось.... плохо без списков
program slogenie; var koeff1,koeff2,res:array[1..26,1..10] of integer; i,j,st,nom:integer; begin for i:=1 to 26 do for j:=1 to 10 do begin koeff1[i,j]:=0; koeff2[i,j]:=0; end; {vvod koeff1} nom:=1; while nom<>0 do begin writeln('mnog1: vvedite nomer peremennoy (0 dlya vyhoda)'); readln(nom); if nom=0 then break; st:=1; while st<>0 do begin writeln('vvedite stepen (0 dlya vyhoda)'); readln(st); if st=0 then break; writeln('vvedite sootv koeff'); readln(koeff1[nom,st]); end; end; {vvod koeff2} nom:=1; while nom<>0 do begin writeln('mnog2: vvedite nomer peremennoy (0 dlya vyhoda)'); readln(nom); if nom=0 then break; st:=1; while st<>0 do begin writeln('vvedite stepen (0 dlya vyhoda)'); readln(st); if st=0 then break; writeln('vvedite sootv koeff'); readln(koeff2[nom,st]); end; end;
{podschet summy} for i:=1 to 26 do for j:=1 to 10 do res[i,j]:=koeff1[i,j]+koeff2[i,j]; end.
Demon_6661
25.12.2006 4:48
а как перемножать их?
мисс_граффити
25.12.2006 5:20
единственная идея, которая возникает, абсолютно бешеная - четырехмерный массив... каждый коэффициент (равный произведению коэффициентов) находится на пересечении тех степеней переменных, при перемножении которых он получился. то есть если мы умножим 2a^3 на a^2, получим значение 2 в ячейке [1,3,1,2]
Demon_6661
25.12.2006 5:24
А что делать дальше с задачей про сложение? А произведение мне главно здать препод тупой ничего не поймет
мисс_граффити
25.12.2006 5:27
сложение я тебе написала. что не нравится?
Demon_6661
25.12.2006 5:30
Видимо что-то не хватает потому чио она результат не выводит
мисс_граффити
25.12.2006 5:34
ты даже вывод сам написать не можешь? в массиве res получились все нужные коэффициенты. а уж в каком формате их выводить (то ли кучей цифр, то ли писать буквы и степени) - будь добр, разберись сам.
volvo
25.12.2006 18:16
Цитата(мисс_граффити @ 25.12.2006 0:20)
единственная идея, которая возникает, абсолютно бешеная - четырехмерный массив...
enter the element letter: [A .. Z, <enter> to stop]: a coeff = 4 power = 2 enter the element letter: [A .. Z, <enter> to stop]: z coeff = -8 power = 5 enter the element letter: [A .. Z, <enter> to stop]: b coeff = 7 power = 3 enter the element letter: [A .. Z, <enter> to stop]: p = +4*A^(2)-8*Z^(5)+7*B^(3) enter the element letter: [A .. Z, <enter> to stop]: a coeff = 2 power = 2 enter the element letter: [A .. Z, <enter> to stop]: z coeff = -8 power = 3 enter the element letter: [A .. Z, <enter> to stop]: b coeff = 4 power = 3 enter the element letter: [A .. Z, <enter> to stop]: p = +2*A^(2)-8*Z^(3)+4*B^(3) adding: p = +6*A^(2)-8*Z^(5)-8*Z^(3)+11*B^(3) multiply: p = +8*A^(4)-32*A^(2)*Z^(3)+30*A^(2)*B^(3)-16*Z^(5)*A^(2)+64*Z^(5)*Z^(3)-32*Z^(5 )*B^(3)-56*B^(3)*Z^(3)+28*B^(6)
мисс_граффити
25.12.2006 19:13
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.