Кто-нибудь помогите пожалуйста решить задачу: пользователь задает два многочлена от нескольких переменных. Переменные обозначаются латинскими буквами (их число не более 26). Найти сумму и произведение этих многочленов! Заранее спасибо.
Помогите плиз!
Если многочлен линейный то вот так можно ввести данные многочлена (значения параметров и коэффициентов при них) и вычислить его значение:
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
GetMem(params, degree * sizeof(TCoeff));
GetMem(coeffs, degree * sizeof(TCoeff));
for i := 0 to pred(degree) do begin
write('params[', i, '] = '); readln(params^[i]); // значения параметров
write('coeffs[', i, '] = '); readln(coeffs^[i]); // значения коеффициентов при параметрах
end;
end;
procedure Free(var params, coeffs: PTCoeffs; const degree: Integer);
begin
FreeMem(params, degree * sizeof(TCoeff));
FreeMem(coeffs, degree * sizeof(TCoeff));
end;
var
coeffs, params: PTCoeffs;
begin
(*
Для функции p(x, y, z) = x + 2y + 3z при (x = 2, y = 3, z = 5) :
params[0] = 2
params[1] = 3
params[2] = 5
coeffs[0] = 1
coeffs[1] = 2
coeffs[2] = 3
P(x, y, z) = 1 * 2 + 2 * 3 + 3 * 5 = 23
*)
GetPolinom(params, coeffs, 3);
writeln('P = ', P(params, coeffs, 3):2:2);
Free(params, coeffs, 3);
readln;
end.
Многочлен не обязательно должен быть линейным, а пользователь задает только коэфициенты!
Тогда приведи примеры (хотя бы 5-6) возможных многочленов... Ибо телепаты - в Google
C одними коэффициентами далеко не уедешь, тогда уж и степени надо задавать ...
Пользователь вводит два многочлена
2*(x^2)+2*(y^2)
2*(x^2)-2*(y^2)
Паскаль должен нам выдать
1.Произведение 4*(x^4)-4*(y^4)
2.Сумма 4*(x^2)
Не не так. Пользователь задает массив коэффициентов и степеней каждого многочлена. Например ползователь вводит :
1. 2 3 4
2. 2 4 3
Это значит что он ввел многочлен
2*x^2+4*y^4+4*z^3
Помогите пожалуйста кто-нибудь с задачей!
а как узнать, к каким переменным это относится?
то есть различить 2x^2 и 2y^2?
или порядок фиксированный, и пользователь должен вводить информацию (пусть нули) по ВСЕМ переменным?
а если у него y^2+2y - как быть?
Каждая переменная может встречаться только 1 раз. Переменные - это английский алфавит (поэтому и ограничение 26). Переменные употребляются в алфавитном порядке. Т. е если пользователь вводит
2 3 4
1 2 3
Это значит что многочлен имеет вид 2*a+3*(b^2)+4*(c^3)
Помогите плиз, сдавать завтра!
constТеперь результат перемножения я не могу хранить в такой структуре...
max_degree = 26;
type
tpoly = record
coeff: integer;
power: integer;
end;
tpolynom = array[1 .. max_degree] of tpoly;
Да нет я имею ввиду 1 раз в каждом многочлене
Указателями пользоваться можно? Или только массивы?
тока массивы и записи
help me please
помогите очень нужно
Вопрос жизни и смерти, вопрос зачет или нет! Выручите пожалуйста
хватит флудить!
сам виноват, что до последнего момента дотянул.
ты говоришь, что каждая переменная в одном многочлене встречается только один раз.
допустим:
1) y^2+2*x
2) x^2+2*y
В сумме и x, и y будут встречаться в разных степенях...
хотя..... если можно пользоваться записями... уже что-то.
максимальная степень ограничена?
Степень ограничим 10
Для удовства можно вводить переменные по порядку, не y^2+x^3 а x^3+y^2
что-то такое получилось....
плохо без списков
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.
а как перемножать их?
единственная идея, которая возникает, абсолютно бешеная - четырехмерный массив...
каждый коэффициент (равный произведению коэффициентов) находится на пересечении тех степеней переменных, при перемножении которых он получился.
то есть если мы умножим 2a^3 на a^2, получим значение 2 в ячейке [1,3,1,2]
А что делать дальше с задачей про сложение? А произведение мне главно здать препод тупой ничего не поймет
сложение я тебе написала.
что не нравится?
Видимо что-то не хватает потому чио она результат не выводит
ты даже вывод сам написать не можешь?
в массиве res получились все нужные коэффициенты.
а уж в каком формате их выводить (то ли кучей цифр, то ли писать буквы и степени) - будь добр, разберись сам.
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)