Консультация № 158836
26.01.2009, 17:50
0.00 руб.
0 3 1
Помогите, пожалуйста, с задачей!

Задачу нужно сделать с помощью указателей (создавать списки)и через процедуры.

Условие задачи
Вводить коэффициенты и степени многочлена, до тех пока не введём 0 0
Вывести на экран результат.
(пример)
2 3
4 5
0 0

2x^3+4x^5

Причем выведенный многочлен должен быть с упорядоченными степенями и коэффициентами
Затем ввести второй многочлен, выписать его и написать произведение первого и второго многочленов.
Отдельно выписать сумму первого и второго многочленов.

Т.е. программа должна выписывать:
первый многочлен, второй многочлен, их сумму (первого и второго многочленов), их произведение (первого и второго многочленов)

Задачу нужно сделать с помощью указателей (создавать списки)и через процедуры.

Обсуждение

давно
Старший Модератор
31795
6196
27.01.2009, 18:24
общий
это ответ
Здравствуйте, Abelman!

Программа в приложении.
Думаю Вам это нужно, если нет обращайтесь в мини-форум.
Удачи!

Приложение:
{пользовательский тип}
type
isType=^isList;
isList=record
x,y:integer;
z:isType;
end;
{преременные основной программы}
var
a,b:isType;
{вывод одного элемента}
procedure showOne(x,y:integer);
begin
write(x);{}
if y<>0 then write('*X^',y);{}
end;
{сотируем по убыванию степеней}
procedure sortPolinom(var c:isType);
var
d,e:isType;
begin
d:=c;
while d^.z<>nil do
begin
while (d^.y>d^.z^.y)and(d^.z<>nil)do d:=d^.z;
if d^.z<>nil then
begin
e:=d^.z;
d^.z:=d^.z^.z;
e^.z:=c;
c:=e;
d:=c;
end;
end;
end;
{вводим полином}
procedure inputPolinom(var c:isType);
var
d:isType;
e,f:integer;
begin
c:=nil;
repeat
write('parametr:');{показатель и степень}
readln(e);
write('degree:');
readln(f);
if(e=0)and(f=0)then break;
{ещем в списке введенную степень}
d:=c;
while (d^.y<>f)and(d<>nil) do d:=d^.z;
if d=nil then
begin{нет, содаем элемент и включаем его в список}
new(d);
d^.x:=e;
d^.y:=f;
d^.z:=c;
c:=d;
end else inc(d^.x,e);
until false;
sortPolinom(c);
end;
{освобождаем занимаемую память}
procedure freePolinom(var c:isType);
var
d:isType;
begin
while c<>nil do
begin
d:=c;
c:=c^.z;
dispose(d);{освобождаем}
end;
end;
{выводим полином на экран}
procedure showPolinom(c:isType);
begin
while c<>nil do{пока не выведем весь список}
begin
showOne(c^.x,c^.y);
c:=c^.z;{следующий элемент}
if c<>nil then write(' + ');{если не достигли предела выводим знак}
end;
writeln;
end;
{процедура умножения полиномов}
procedure multPolinom(c,d:isType);
var
e,f,g:isType;
begin
write('Mult Polinoms:');
{будем формировать новый список}
g:=nil;
while d<>nil do
begin
{востанавливаем умножаемый список}
e:=c;
while e<>nil do
begin
f:=g;
{проверяем если такая степень}
while (f^.y<>(d^.y+e^.y))and(f<>nil)do f:=f^.z;
if f<>nil then inc(f^.x,d^.x*e^.x){есть увеличиваем показатель}
else
begin{нет дбавляем новый}
new(f);
f^.x:=d^.x*e^.x;
f^.y:=d^.y+e^.y;
f^.z:=g;
g:=f;
end;
e:=e^.z;
end;
d:=d^.z;
end;
sortPolinom(g);
showPolinom(g);
freePolinom(g);
end;
{процедура суммирования}
procedure summPolinom(c,d:isType);
begin
write('Summa Polinoms:');
while (c<>nil)and(d<>nil)do
begin
if c^.y=d^.y then
begin{если степени равны складываем показатели}
showOne(c^.x+d^.x,c^.y);
c:=c^.z;
d:=d^.z;
end else
if c^.y>d^.y then
begin{выводим первый полином}
showOne(c^.x,c^.y);
c:=c^.z;
end else
begin{выводим второй полином}
showOne(d^.x,d^.y);
d:=d^.z;
end;
if (c<>nil)or(d<>nil)then write(' + ');
end;
{выводим оставшиеся полиномы}
if c<>nil then showPolinom(c);
if d<>nil then showPolinom(d);
end;
begin
{вводим первый полином}
writeln('Enter First Polinom:');
inputPolinom(a);
{вводим второй полином}
writeln('Enter Second Polinom:');
inputPolinom(b);
{выводим первый полином}
write('First Polinom:');
showPolinom(a);
{выводим второй полином}
write('Second Polinom:');
showPolinom(b);
{выполняем задание}
multPolinom(a,b);
summPolinom(a,b);
{освобождаем память}
freePolinom(a);
freePolinom(b);
readln;
end.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
27.01.2009, 22:53
общий
Спасибо Вам большое!
А эту программу можно как-нибудь изменить, чтобы она работала не в Turbo Pascal., а в PascalABC.NET или в PascalABC?
давно
Старший Модератор
31795
6196
27.01.2009, 23:02
общий
Я сейчас убегаю, завтра попробую, но PascalABC -уж очень прикольный интерпритатор, со своими "прибамбахами", за это его и не люблю.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа