Консультация № 177922
18.04.2010, 20:44
45.00 руб.
0 5 1
ЗДРАСТВУЙТЕ УВАЖАЕМЫЕ ЭКСПЕРТЫ. у МЕНЯ СЛЕДУЮЩИЙ ВОПРОС. НУЖНО В ПАСКАЛЕ НАПИСАТЬ ПРОГРАММУ УМНОЖЕНИЯ 2-Х ПОЛИНОМОВ.
НА ВАШЕМ САЙТЕ Я НАШЕЛ РЕШЕНИЕ ЭТОЙ ЗАДАЧИ http://subscribe.ru/archive/comp.soft.prog.pasplus/200902/01023755.html (внизу страницы). нО ПРИ ЗАПУСКЕ возникает ошибка 216 уже когда программа запустилась и введены параметры: PARAMETR B DEGREE. Помогите пожалуйста в решение данной проблему. спасибо


Приложение:
{пользовательский тип}

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);

{освобождаем память}
freePolinom(a);
freePolinom(b);
readln;
end.

Обсуждение

Неизвестный
18.04.2010, 21:21
общий
BUDAEV SERGEI:
Только что проверил, всё работает. В чём компилируете? Это код для Турбо Паскаля.
Неизвестный
18.04.2010, 22:00
общий
Алексей S:
компилирую в free pascal (fpc), то есть когда вы вводите paramter, degree программа работает? вы не могли бы скинуть мне откомпилированный файл и какие значения вы вводите в parametr и degree? у меня возникает ошибка. мой адрес gaysinrus@mail.ru
Неизвестный
18.04.2010, 22:25
общий
Алексей S:
Спасибо Алексей я скомпилировал на птурбо паскале 7.1 ошибки не стало. Спасибо!
Неизвестный
18.04.2010, 22:27
общий
216 - General Protection fault, скорее всего выходим за пределы стека. Т.е. нужно установить (проверить) размеры стека во free pascal
Неизвестный
19.04.2010, 23:29
общий
это ответ
Здравствуйте, BUDAEV SERGEI.
Только что проверил, всё работает. В чём компилируете? Это код для Турбо Паскаля.
Форма ответа