Results 1 to 2 of 2

Thread: factor trinomials

  1. #1
    Join Date
    Mar 2007
    Posts
    107
    Mentioned
    0 Post(s)
    Quoted
    0 Post(s)

    Default factor trinomials

    i know, quite lame of me, but i was pretty bored and had nothing better to do (studying for exams is stupid). anyways, for all of you 12 year olds in basic algebra here is a function that factors those annoying trinomials. enjoy.

    SCAR Code:
    program New;
    var
      GCF, A1, A2, B1, B2: Integer;
    function Factor(var GCF, A1, A2, B1, B2: Integer; A, B, C: Integer): Boolean;
    var
      Product1, Factor1, Factor2, Product2, Modee, Remainder, Modder: Integer;
    begin
      if (A = 0) or (C = 0) then
      begin
        Result := false;
        Exit;
      end;
      if A < 0 then
      begin
        GCF := -1;
        A := -A;
        B := -B;
        C := -C;
      end else
      begin
        GCF := 1;
      end;
      Modder := A;
      Modee := Round(Abs(B));
      Remainder := Modee;
      while Remainder > 0 do
      begin
        Modee := Modder;
        Modder := Remainder;
        Remainder := Modee mod Modder;
      end;
      Modder := Modder;
      Modee := Round(Abs(C));
      Remainder := Modee;
      while Remainder > 0 do
      begin
        Modee := Modder;
        Modder := Remainder;
        Remainder := Modee mod Modder;
      end;
      GCF := GCF * Modder;
      A := A / GCF;
      B := B / GCF;
      C := C / GCF;
      Product1 := A * C;
      Product2 := 0;
      if C < 0 then
      begin
        Factor2 := Round(Abs(B)) - 1;
        Factor1 := -1;
        while Product2 < -Product1 do
        begin
          Factor2 := Factor2 + 1;
          Factor1 := Factor1 + 1;
          Product2 := Factor2 * Factor1;
        end;
      end else
      begin
        Factor2 := Round(Abs(B));
        Factor1 := 0;
        while Factor2 >= Factor1 do
        begin
          Product2 := Factor2 * Factor1;
          if Product2 = Product1 then
          begin
            Break;
          end;
          Factor2 := Factor2 - 1;
          Factor1 := Factor1 + 1;
        end;
      end;
      if not(Abs(Product1) = Product2) then
      begin
        Result := False;
        Exit;
      end;
      if C < 0 then
      begin
        if B < 0 then
        begin
          A2 := -Max(Factor2, Factor1);
          B2 := Min(Factor2, Factor1);
        end else
        begin
          A2 := Max(Factor2, Factor1);
          B2 := -Min(Factor2, Factor1);
        end;
      end else
      begin
        A2 := Factor2 * (B / Round(Abs(B)));
        B2 := Factor1 * (B / Round(Abs(B)));
      end;
      A1 := A;
      B1 := A;
      Modder := Round(Abs(A2));
      Modee := A1;
      Remainder := Modee;
      while Remainder > 0 do
      begin
        Modee := Modder;
        Modder := Remainder;
        Remainder := Modee mod Modder;
      end;
      A1 := A1 / Modder;
      A2 := A2 / Modder;
      Modder := Round(Abs(B2));
      Modee := B1;
      Remainder := Modee;
      while Remainder > 0 do
      begin
        Modee := Modder;
        Modder := Remainder;
        Remainder := Modee mod Modder;
      end;
      B1 := B1 / Modder;
      B2 := B2 / Modder;
      Result := true;
    end;

    begin
      if (Factor(GCF, A1, A2, B1, B2, 42, 91, 42)) then
      begin
        WriteLn('(' + IntToStr(GCF) + ')(' + IntToStr(A1) + 'x+' +
            IntToStr(A2) + ')(' + IntToStr(B1) + 'x+' + IntToStr(B2) + ')');
      end;
    end.

  2. #2
    Join Date
    Mar 2007
    Posts
    4,810
    Mentioned
    3 Post(s)
    Quoted
    3 Post(s)

    Default

    Nice will it work for 13yr old's aswell?

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •