Регистрация
Войти
Стать экспертом Правила
Информатика

Составить программу на Паскале: Решение кубических уравнений по схеме Горнера. Если что прочитайте в интернете. Я над этой программой сижу 2 недели не могу сделать. Прошу Пожалуйста посчитайте. Я так понял за ваше решение дают 99 поинтов

ОТВЕТЫ



type
  fraction=(integer,integer);

function RatFact(Self:array of integer):sequence of fraction;
    extensionmethod;
//
// На основе алгоритма 78б
// В кн.: Агеев М.И., Алик В.П., Марков Ю.И.
// Библиотека алгоритмов 51б-100б. (Справочное пособие.) Вып.2.
// М.б "Сов. радио", 1976.
//
// Отыскание рациональных корней полиномов с целыми коффициентами.
// Используется предоженное Дж.Пеком расширение вычисления полинома
// методом Горнера.
// !!! Коэффициенты полинома записываются, начиная со свободного члена !!!
//
begin
  var L:=new List<fraction>; // вынужденное: метод иногда дает дубликаты
  (var a0, var an):=(abs(Self.First),abs(Self.Last));
  for var p:=1 to a0 do begin
    if a0 mod p<>0 then continue;
    for var q:=1 to an do begin
      if an mod q<>0 then continue;
      var g:=Self.First; (var f, var t):=(g,p);
      foreach var k in Self.Skip(1) do begin
        var r:=k*t; (f,g,t):=(f*q+r,-g*q+r,t*p);
        end;
      if f=0 then L.Add((p,q));
      if g=0 then L.Add((-p,q))
      end
    end;
    Result:=L
end;

function RedFrac(Self:fraction):fraction; extensionmethod;
begin
  (var p,var q):=Self;
  var s:=sign(p*q);
  (p,q):=(abs(p),abs(q));
  (var a,var b):=(p,q);
  while b<>0 do begin a:=a mod b; Swap(a,b) end;
  Result:=(s*p div a,q div a)
end;

function Beautify(Self:sequence of fraction):sequence of string;
    extensionmethod;
begin
  Result:=Self.Select(e->e.RedFrac).Distinct.OrderBy(x->x[0]/x[1]).
    Select(e->e[0]+(e[1]<>1?'/'+e[1]:''))
end;

begin
  ReadArrInteger(4).RatFact.Beautify.Println
end.


1) -36x³+3x²+14x+3 = 0
 
3 14 3 -36


2) (x-1)(x+2)(x+3/5) = 0;  5x³+8x²-7x-6 = 0

-6 -7 8 5

281
Контакты
Реклама на сайте
Спрошу
О проекте
Новым пользователям
Новым экспертам