Polynomial synthetic division: Difference between revisions
Content added Content deleted
(Added Wren) |
MaiconSoft (talk | contribs) (Added Delphi example) |
||
Line 86: | Line 86: | ||
} |
} |
||
</lang> |
</lang> |
||
=={{header|Delphi}}== |
|||
{{libheader| System.SysUtils}} |
|||
{{libheader| Velthuis.BigRationals}} |
|||
{{Trans|Go}} |
|||
Thanks Rudy Velthuis for the [https://github.com/rvelthuis/DelphiBigNumbers Velthuis.BigRationals] library.<br> |
|||
<lang Delphi> |
|||
program Polynomial_synthetic_division; |
|||
{$APPTYPE CONSOLE} |
|||
uses |
|||
System.SysUtils, |
|||
Velthuis.BigRationals; |
|||
type |
|||
TPollynomy = record |
|||
public |
|||
Terms: TArray<BigRational>; |
|||
class operator Divide(a, b: TPollynomy): TArray<TPollynomy>; |
|||
constructor Create(Terms: TArray<BigRational>); |
|||
function ToString: string; |
|||
end; |
|||
{ TPollynomy } |
|||
constructor TPollynomy.Create(Terms: TArray<BigRational>); |
|||
begin |
|||
self.Terms := copy(Terms, 0, length(Terms)); |
|||
end; |
|||
class operator TPollynomy.Divide(a, b: TPollynomy): TArray<TPollynomy>; |
|||
var |
|||
q, r: TPollynomy; |
|||
begin |
|||
var o: TArray<BigRational>; |
|||
SetLength(o, length(a.Terms)); |
|||
for var i := 0 to High(a.Terms) do |
|||
o[i] := BigRational.Create(a.Terms[i]); |
|||
for var i := 0 to length(a.Terms) - length(b.Terms) do |
|||
begin |
|||
o[i] := BigRational.Create(o[i] div b.Terms[0]); |
|||
var coef := BigRational.Create(o[i]); |
|||
if coef.Sign <> 0 then |
|||
begin |
|||
var aa: BigRational := 0; |
|||
for var j := 1 to High(b.Terms) do |
|||
begin |
|||
aa := (-b.Terms[j]) * coef; |
|||
o[i + j] := o[i + j] + aa; |
|||
end; |
|||
end; |
|||
end; |
|||
var separator := length(o) - (length(b.Terms) - 1); |
|||
q := TPollynomy.Create(copy(o, 0, separator)); |
|||
r := TPollynomy.Create(copy(o, separator, length(o))); |
|||
result := [q, r]; |
|||
end; |
|||
function TPollynomy.ToString: string; |
|||
begin |
|||
Result := '['; |
|||
for var e in Terms do |
|||
Result := Result + e.ToString + ' '; |
|||
Result := Result + ']'; |
|||
end; |
|||
var |
|||
p1, p2: TPollynomy; |
|||
begin |
|||
p1 := TPollynomy.Create([BigRational.Create(1, 1), BigRational.Create(-12, 1), |
|||
BigRational.Create(0, 1), BigRational.Create(-42, 1)]); |
|||
p2 := TPollynomy.Create([BigRational.Create(1, 1), BigRational.Create(-3, 1)]); |
|||
write(p1.ToString, ' / ', p2.ToString, ' = '); |
|||
var result := p1 / p2; |
|||
writeln(result[0].ToString, ' remainder ', result[1].ToString); |
|||
readln; |
|||
end.</lang> |
|||
{{out}} |
|||
<pre>[1 -12 0 -42 ] / [1 -3 ] = [1 -9 -27 ] remainder [-123 ]</pre> |
|||
=={{header|Go}}== |
=={{header|Go}}== |