Не могу понять, почему не работает... Многочлен состоит из одночленов типа k*x^a*y^b*z^c. Вылетает ошибка, если введу например (2*x^3*y^4*z^5+4*x^2*y^6*z^7) и (4*x^7*y^5*z^8+2*x^3*y^4*z^5), т. е. первый одночлен из 1 многочлена равен второму одночлену из 2 многочлена.
Вот код программы:
type
list=record
k,a,b,c:Integer;
next: pointer;
prev: pointer;
end;
var sp1,sp2,e1,e2,pnt,pnt2,tpnt1,tpnt2:^list;
procedure TForm1.add1Click(Sender: TObject);
begin
label1.Caption :='';
if k1.text <>'' then
begin
if label1.Caption ='' then
begin
new(sp1);
new(e1);
sp1.k:=StrToInt(k1.Text);
sp1.a:=StrToInt(a1.Text);
sp1.b:=StrToInt(b1.Text);
sp1.c:=StrToInt(c1.Text);
sp1.next :=e1;
pnt:=sp1;
end
else
begin
new(e1);
e1.k:=StrToInt(k1.Text);
e1.a:=StrToInt(a1.Text);
e1.b:=StrToInt(b1.Text);
e1.c:=StrToInt(c1.Text);
pnt.next :=e1;
pnt:=e1;
end;
pnt.next :=nil;
label1.Caption :=label1.Caption +'+'+inttostr(sp1.k)+'*(x^'+inttostr(sp1.a)+')(y^'+inttostr(sp1.b)+')(z^'+inttostr(sp1.c) +')';
k1.SetFocus;
end;
end;
procedure TForm1.add2Click(Sender: TObject);
begin
label2.Caption:='';
if k2.text <>'' then
begin
if label2.Caption ='' then
begin
new(sp2);
new(e2);
sp2.k:=StrToInt(k2.Text);
sp2.a:=StrToInt(a2.Text);
sp2.b:=StrToInt(b2.Text);
sp2.c:=StrToInt(c2.Text);
sp2.next :=e2;
sp2.prev:=nil;
pnt2:=sp2;
end
else
begin
new(e2);
e2.k:=StrToInt(k2.Text);
e2.a:=StrToInt(a2.Text);
e2.b:=StrToInt(b2.Text);
e2.c:=StrToInt(c2.Text);
pnt2.next :=e2;
e2.prev :=pnt2;
pnt2:=e2;
end;
pnt2.next :=nil;
label2.Caption :=label2.Caption +'+'+inttostr(sp2.k)+'*(x^'+inttostr(sp2.a)+')(y^'+inttostr(sp2.b)+')(z^'+inttostr(sp2.c) +')';
k2.SetFocus;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var s:String;
dinc:Boolean;
begin
pnt:=sp1;
s:='';
dinc:=false;
while (pnt<>nil) do
begin
tpnt1:=sp2;
while (tpnt1<>nil) do
begin
if (tpnt1.a =pnt.a) and (tpnt1.b =pnt.b) and (tpnt1.c =pnt.c) then
begin
pnt.k:=pnt.k+tpnt1.k;
if tpnt1=sp2 then
begin
sp2:=tpnt1.next;
tpnt1:=sp2;
end
else
begin
tpnt2:=tpnt1.prev;
tpnt1:=tpnt1.next;
tpnt2.next:=tpnt1;
tpnt1.prev:=tpnt2;
end;
dinc:=true;
end;
if(not dinc) then tpnt1:=tpnt1.next
else dinc:=false;
end;
s:=s+'+'+IntToStr(pnt^.k)+'*(x^'+IntToStr(pnt.a)+')(y^'+IntToStr(pnt.b)+')(z^'+IntToStr(pnt.c) +')';
pnt:=pnt.next;
end;
pnt:=sp2;
while (pnt<>nil) do begin
s:=s+'+'+IntToStr(pnt.k)+'*(x^'+IntToStr(pnt.a)+')(y^'+IntToStr(pnt.b)+')(z^'+IntToStr(pnt.c) +')';
pnt:=pnt.next;
end;
label3.Caption :=s;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
pnt:=nil;
pnt2:=nil;
end;
end.
В чем ошибка??
-
- Сообщения: 3
- Зарегистрирован: 02 июн 2009, 07:06
- Вложения
-
- Form1.jpg (51.81 КБ) 126 просмотров
Что-то у меня такое большое чувство, что 4*x^7*y^5*z^8+2*x^3*y^4*z^5 даже при x=y=5 уже совершенно не влазит в integer
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
попробуй extended
< L3X. (ICQ: 8721378, Mail - l3x@list.ru)
-
- Сообщения: 3
- Зарегистрирован: 02 июн 2009, 07:06
У меня прога должна просто составить сумму многочлена, без всяких точных значений x,y,z. Входные данные-это только показатели степени и коэффициент k при одночлене.
Прога вылетает на выделенной красным строке. (см. код задачи выше).
Полное условие задачи-в readme.txt
Прога вылетает на выделенной красным строке. (см. код задачи выше).
Полное условие задачи-в readme.txt
- Вложения
-
[Расширение txt было запрещено, вложение больше недоступно.]
Стучите в асю 11один11-5шесть5шесть, обсудим.