Quadratic Factoring Program
Name: Quadratic Factoring v1.1 Author: Timothy Foster Download: quadfact1.1.zip Compatibility: Parent page not set File Size: 490 bytes |
This program will factor quadratic equations equal to 0, and it can factor quadratic expressions. The program identifies GCF and prime quadractic polynomials. |
Want to update this page?
- Upload new files to provide up-to-date versions of your program;
- or Edit the content of this page to provide up-to-date information about your program.
A moderator will only process these changes if you add the word update to the list of tags
What the community thinks:
I created a quadratic factoring program. How does it fare? For some reason, it claims x2+2x+1 to be prime, but hopefully no one needs a program to factor that.
Timothy Foster - @tfAuroratide
Auroratide.com - Go here if you're nerdy like me
Just use the quadratic formula. Ax2+Bx+C factors as A(x-r1)(x-r2), where r1 and r2 are the roots. To limit yourself to factoring over rational/integer polynomials, check if Ar1 and Ar2 are integers, and proceed accordingly.
Of course… that way is definitely smaller. Why did I not think of that? Find the roots, and put it in the form, whereas mine processes the numbers which takes longer… what about unfactorable ones?
I also found the problem on the x2+2x+1.
Timothy Foster - @tfAuroratide
Auroratide.com - Go here if you're nerdy like me
i believe un-factorable ones would give a decimal value for sqrt(B²-4AC), or an imaginary value ;)
make sure you get into a+bi mode so the calculator will let you take the square root of a negative number.
Well, for imaginary numbers for sure, but decimal values do have roots.
(1)Maybe for irrational numbers, but those are hard to identify.
Timothy Foster - @tfAuroratide
Auroratide.com - Go here if you're nerdy like me
maybe use a decimal to fraction converter?
Thats all i could think of…
Unless you go back to the way you were doing it before, using factors and stuff, which seems more foolproof to me, but slower and larger.
'sigh' the age old battle between speed and reliability…
You don't need a decimal to fraction converter unless the original equation also had decimals in it, which would defeat the entire point of factoring it.
First test if D=B²-4AC is nonnegative: if it's negative, then you know the polynomial is prime.
Then compute the roots r1 and r2. Test if Ar1 is an integer: if it has a fractional part, then you know the polynomial is prime. You don't need to test Ar2 if your coefficients are integers, since Ar1+Ar2=-B.
Otherwise, the two factors are (Ax-Ar1) and (Ax-Ar2). Factor the GCD from each of these terms. The integer factor in the factorization will be A divided by the product of the two GCDs — or at least, this has to be an integer if the coefficients A, B, and C were. Otherwise, you've just factored the polynomial over the rational numbers.
No problems with reliability that I see.
oh…
i see…
#here is the C answer
#include<stdio.h>
#include<math.h>
float a,b,c, roota, rootb,h,y,z,d,e,f,g,i,temp=1,lcm;
long int temp2, lcmtemp;
double lcd (double xx, double yy);
/* Declare values */
main()
{
/* (h)(dx+e)(fx+g) */
printf ("\nThis Program calculates the factors of quadratic equations");
printf ("\n(a) x*x + (b) x + (c)\n");
do
{
printf ("\nInput a=");
scanf("%f", &a);
printf ("\nInput b=");
scanf("%f", &b);
printf ("\nInput c=");
scanf("%f", &c);
if ((b*b-4*a*c)<0) printf ("\nnon solvable quadratic re-enter values\a\a\a");
}
while ((b*b-4*a*c)<0);
/* line 23 calcualtions of roots of quadratic equation*/
z=sqrt((b*b)-(4*a*c));
roota=((-b)-z)/(2*a);
rootb=((-b)+z)/(2*a);
printf ("\nroot1=%+f", roota);
printf ("\nroot2=%+f", rootb);
if (roota>0)
{
i=1;lcm=roota;}
else { i=-1;lcm=roota*(-1);};
/* Call function to calculate LCM for 1st root*/
y= lcd (1, lcm);
y=(long)(y*i+0.5*i);
y=y/1000000;
/* calculates d and e*/
/* (h)(dx+e)(fx+g) */
/*printf("\nLCD1=%f",y); */
e=(long)((((roota/y)+(0.5))*i*-1)*i);
d=(long)((1/y)+(0.5*i));
if (rootb>=0)
{
i=1;lcm=rootb;}
else { i=-1;lcm=rootb*(-1);};
/* Call function to calculate LCM for 2nd root*/
y= lcd (1,lcm);
y=(long)(y*i+0.5*i);
y=y/1000000;
/* calculates f and ge*/
/* (h)(dx+e)(fx+g) */
/*printf("\nLCD2=%f",y);*/
g=(long)((((rootb/y)+(0.5))*-1*i)*i);
f=(long)((1/y)+(0.5*i));
if (f<0) {f=f*-1;g=g*-1;};
if (d<0) {d=d*-1;e=e*-1;};
/* calculate h*/
h=(long)(a/(d*f));
/* (h)(dx+e)(fx+g) */
printf("\n(%f)(%fx+ %f) (%fx + %f)",h,d,e,f,g);
printf("\n\nCopyright Frank Hull");
return 0;
}
double lcd (double xx, double yy)
{
lcmtemp=(long) (yy*1000000+0.5);
temp2=(long) (xx*1000000+0.5);
while (lcmtemp!=temp2)
{
if (xx>yy)
{
z=xx-yy;
xx=z;
}
else
{
z=yy-xx;
yy=z;
}
lcmtemp=(long) (yy*1000000+0.5);
temp2=(long) (xx*1000000+0.5);
continue;
};
return (yy*1000000);
}
And who cares about a C version??
Sunrise 3 Progress: 30%
Size: around 20 KB, not including the save lists and in-game RAM.
This is not your own work; you based the C version off of Timothy Foster's z80 TI-Basic version. You acquired the algorithm from T. Foster. So give him some credit, will you?
Sunrise 3 Progress: 30%
Size: around 20 KB, not including the save lists and in-game RAM.
I have a factoring program that will solve everything, I just need to type it in.
Please wait.
Basically, you need to make sure you get the signs right on the factors.
Given A, B, and C, find N and O so that
N+O=B
NO=AC
Here it is: (Works on the TI-83 Plus and up)
:ClrDraw
:AxesOff
:ClrHome
:Horiz //Answer will be displayed on the graph screen
:Prompt A,B,C //Get quadratic
:If not(C
:Then
:{A,B,1,0}→L1
:Goto 2 //"Goto 2" skips to the display command
:End
:If not(A //A=0 means it isn't a quadratic
:Then //but I put it in for the sake of completeness
:{B,C,0,1}
:Goto 2
:End
:abs(AC→P
:1-2(AC<0)→M
:0→Q
:For(N,1,P) //Searches for factors
:Output(4,1,{N,P}) //Lets you know if it will take a while
:P/N→O
:If not(fpart(O
:Then
:1-2(B<0)→R
:R*abs(N+MO)→R //I put in the multiplication sign for readability
:If R=B //If factors found
:Then //End Loop
:N→Q
:P→N
:End
:End
:End
:If not(Q) //If no factors found
:Goto 3
:If Q>0
:Then
:Q→N
:Else
:O→N
:Q→O
:End
:1-2(B<0)→R
:MR→S
:RN→N
:SO→O
:A→X
:N→Y
:X/Y→Z
:While fpart(Z) //Finds GCF of A and N
:X-Yfpart(Z)→(-) //Theta
:Y→X
:(-)→Y
:X/Y→Z
:End
:A/Y→D
:N/Y→E
:Y→F
:O/D→G
:If FD=/=A or FE+GD=/=B or GE=/=C //Not equal to
:Goto 3 //This shouldn't happen
:{D,E,F,G}→L1
:If sum(L1>0)<=1 //Less than or equal to
:-L1→L1 //Makes sure at least two factors are positive
:Lbl 2
:Text(0,0,"(", L1(1), "X", sub("-+", 2-(L1(2)<0),1), abs(L1(2)), ")(", L1(3), sub("-+", 2-(L1(4)<0),1), abs(L1(4)), ")")
:Goto 4 //The long Text( command means the calc doesn't
:Lbl 3 //have to calculate the lengths of numbers.
:Text(0,0,"PRIME")
:Lbl 4
:Pause
:AxesOn
:Full
:ClrHome
:Output(1,1," //Gets rid of the "Done"
Please comment!
It might work on the TI-83 regular, I don't know.
This was programmed on a TI-83 plus, regular edition.
Pretty sure that
should be
That moves the cursur to the second line, which is not ideal.
Oh…
By the way, how do you set the code apart from the rest of the text like that?
I prefer to use the assembly code to get rid of the done. And Johnny, it is the little box above the gui that says code. I'm not sure if guests can access it or not
No, I don't see it. Thanks anyway.
What do th a, b and c represent that the program asks for when executed?
A(x)^2+B(x)+C
A, B, and C are the constants
Hey. I entered your code into my ti 83 plus and it works. It also messed my calculator up.
everything still works, i'ts just below the line. even when i quit. it looks like this.
never mind. had to go back to mode. somehow it changed it from full to horizontal.
Can i just write this program in my TI-84 Plus CE, or do i have to download it onto the calculator?
You can just write it.
The Silver Phantom welcomes you