= to ==, why? [SOLVED]
12-09-2016, 05:53 PM (This post was last modified: 12-11-2016 03:38 PM by compsystems.)
Post: #1
 compsystems Senior Member Posts: 1,318 Joined: Dec 2013
= to ==, why? [SOLVED]
Hello

The following code is a program that shows step by step, the deduction of the quadratic formula

version 1 without intermediate steps.
PHP Code:
//The following code is a program that shows step by step, the deduction of the quadratic formula
// version 1 without intermediate steps.
export lineByLineFlag := 0
//global symbolics output;
#cas

begin
local ansStr
equStr0equStr1;

local equ

print;
// Clear Terminal Window

print( "***** Deduction Quadratic Formula *****" ); // Title

print( "version 1 without intermediate steps" );

wait();

choose_cas();

assume(a>0);
print(

equ := ((a*x^2+b*x+c) = 0); output:={ equ };
print(
">"+equ ); output:= appendoutput"→ "+equ);
print(
"assume(a>0)" );

pause();

ansStr := "answer * 4*a"// ((a*x^2+b*x+c)*4*a) = 0

print( ">"+ansStr ); output:= appendoutput"> "+ansStr);    equ := equ 4*a; print( "" ); print( ""equ ); output:= appendoutput"→ "+equ);

pause();

ansStr := "expand( answer )"// (4*a^2*x^2 +4*a*b*x +4*a*c) = 0

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equ := expandequ ); print( "" ); print( ""equ ); output:= appendoutput"→ "+equ);

pause();

ansStr := "answer + b²"// (4*a^2*x^2 +4*a*b*x + 4*a*c+b^2 ) = (b^2)

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equ := equ+b^2; print( "" ); print( ""equ ); output:= appendoutput"→ "+equ);

pause();

ansStr := "answer - 4*a*c"// (4*a^2*x^2 +4*a*b*x +4*a*c+b^2 -4*a*c) = (b^2 -4*a*c)

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equ := equ-4*a*c; print( "" ); print( ""equ ); output:= appendoutput"→ "+equ);

pause();

ansStr := "simplify( answer )"// (4*a^2*x^2 +4*a*b*x +b^2) = (-4*a*c +b^2)

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equ := simplify(equ); print( "" ); print( ""equ ); output:= appendoutput"→ "+equ);

pause();

ansStr := "factor( answer )"// (2*a*x+b)^2) = (-4*a*c+b^2)

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equ := factor(equ); print( "" ); print( ""equ ); output:= appendoutput"→ "+equ);

pause();

ansStr := "√(answer)"// (abs(2*a*x+b)) = (√(-4*a*c+b^2))

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equ := (equ); print( "" ); print( ""equ ); output:= appendoutput"→ "+equ);

pause();

equ := exprreplacestringequ ), "abs""" ) ); // (2*a*x+b) = (√(-4*a*c+b^2))

print( stringequ ) );

pause();

ansStr :=  "answer - b" ;  // (2*a*x+b-b) = (√(-4*a*c+b^2)-b)

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equ := equ-b; print( "" ); print( ""equ ); output:= appendoutput"→ "+equ);

pause();

ansStr := "simplify( answer )"// (2*a*x-b) = (√(-4*a*c+b^2)-2*b)

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equ := simplify(equ); print( "" ); print( ""equ ); output:= appendoutput"→ "+equ);

pause();

ansStr := "answer/( 2*a )";    // (2*a*x/(2*a)) = (-b+√(-4*a*c+b^2))/(2*a)

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equ := equ/(2*a); print( "" ); print( ""equ ); output:= appendoutput"→ "+equ);

pause();

print(
">"+ansStr ); output:= appendoutput"> "+ansStr); equ := simplify(equ); print( "" ); print( ""equ ); output:= appendoutput"→ "+equ);

pause();

ansStr :=  "replace( answer, \"b+\", \"b±\" )"// x1 = (-b±√[b^2-4*a*c])/(2*a)

print( ">"+ansStr ); output:= appendoutput"> "+ansStr);  equStr0:= replaceansStr"answer",  "string(" equ ")" );

equStr1 := exprequStr0 ); print( "" ); print( ""equStr1 );

pause();

purge(a);
return
"done";

end;
#end

// Not CAS prg
export pause()
begin

if lineByLineFlag == 1 then

//print( "____________________________[PAUSE]"  ); wait( );

print( "                                                                [PAUSE]"  ); wait( );
else
print(
"" );

end;
end;

// Not CAS prg
export choose_cas()
begin
local ok
:= 1;

local cancel := 0;

local currentPos := 2;

keyPressedOnMenu := choose(currentPos,"Pause every step", { "No""Yes" });
if

if currentPos == 2 then

print( "Any key to continue after [PAUSE]" );
print(
"" );

lineByLineFlag := 1;
else
print(
"Use cursor keys ↑↓ to move the output screen" );
print(
"" );

lineByLineFlag:= 0;

end;

else

kill;

end;
end

output
Quote:(a*x^2+b*x+c) = 0
→ ((a*x^2+b*x+c)*4*a) = 0

→ (4*a^2*x^2+4*a*b*x+4*a*c) = 0

→ (4*a^2*x^2+4*a*b*x+4*a*c+b^2) = (b^2)

→ (4*a^2*x^2+4*a*b*x+4*a*c+b^2-4*a*c) = (b^2-4*a*c)

→ (4*a^2*x^2+4*a*b*x+b^2) = (-4*a*c+b^2)

→ ((2*a*x+b)^2) = (-4*a*c+b^2)

→ (abs(2*a*x+b)) = (√(-4*a*c+b^2))

→ (2*a*x+b-b) = (√(-4*a*c+b^2)-b)

→ (2*a*x) = (-b+√(-4*a*c+b^2))

→ (2*a*x/(2*a)) = ((-b+√(-4*a*c+b^2))/(2*a))

→ x = ((-b+√(-4*a*c+b^2))/(2*a))

version 2 with intermediate steps.
PHP Code:
//The following code is a program that shows step by step, the deduction of the quadratic formula
// version 2 with intermediate steps.
export lineByLineFlag := 0;
//global symbolics output;
#cas

begin
local ansStr
equStr0equStr1;

local equ

print;
// Clear Terminal Window

print( "***** Deduction Quadratic Formula *****" ); // Title

print( "version 2 with intermediate steps" );

wait();

choose_cas();

assume(a>0);
print(

equ := ((a*x^2+b*x+c) = 0); output:={ equ };
print(
">"+equ );
print(
"assume(a>0)" );

pause();

ansStr := "answer * 4*a"// ((a*x^2+b*x+c)*4*a) = 0

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equStr0:= replaceansStr"answer",  "(" equ ")" ); output:= appendoutput"> "+equStr0); print( ">"+equStr0 ); equ := exprequStr0 ); output:= appendoutput"→ "+equ); print( "" ); print( ""equ );

pause();

ansStr := "expand( answer )"// (4*a^2*x^2 +4*a*b*x +4*a*c) = 0

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equStr0:= replaceansStr"answer",  "(" equ ")" ); output:= appendoutput"> "+equStr0); print( ">"+equStr0 ); equ := exprequStr0 ); output:= appendoutput"→ "+equ); print( "" ); print( ""equ );

pause();

ansStr := "answer + b²"// (4*a^2*x^2 +4*a*b*x + 4*a*c+b^2 ) = (b^2)

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equStr0:= replaceansStr"answer",  "(" equ ")" ); output:= appendoutput"> "+equStr0); print( ">"+equStr0 ); equ := exprequStr0 ); output:= appendoutput"→ "+equ); print( "" ); print( ""equ );

pause();

ansStr := "answer - 4*a*c"// (4*a^2*x^2 +4*a*b*x +4*a*c+b^2 -4*a*c) = (b^2 -4*a*c)

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equStr0:= replaceansStr"answer",  "(" equ ")" ); output:= appendoutput"> "+equStr0); print( ">"+equStr0 ); equ := exprequStr0 ); output:= appendoutput"→ "+equ); print( "" ); print( ""equ );

pause();

ansStr := "simplify( answer )"// (4*a^2*x^2 +4*a*b*x +b^2) = (-4*a*c +b^2)

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equStr0:= replaceansStr"answer",  "(" equ ")" ); output:= appendoutput"> "+equStr0); print( ">"+equStr0 ); equ := exprequStr0 ); output:= appendoutput"→ "+equ); print( "" ); print( ""equ );

pause();

ansStr := "factor( answer )"// (2*a*x+b)^2) = (-4*a*c+b^2)

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equStr0:= replaceansStr"answer",  "(" equ ")" ); output:= appendoutput"> "+equStr0); print( ">"+equStr0 ); equ := exprequStr0 ); output:= appendoutput"→ "+equ); print( "" ); print( ""equ );

pause();

ansStr := "√(answer)"// (abs(2*a*x+b)) = (√(-4*a*c+b^2))

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equStr0:= replaceansStr"answer",  "(" equ ")" ); output:= appendoutput"> "+equStr0); print( ">"+equStr0 ); equ := exprequStr0 ); output:= appendoutput"→ "+equ); print( "" ); print( ""equ );

pause();

equ := exprreplacestringequ ), "abs""" ) ); // (2*a*x+b) = (√(-4*a*c+b^2))

print( stringequ ) );

pause();

ansStr :=  "answer - b" ;  // (2*a*x+b-b) = (√(-4*a*c+b^2)-b)

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equStr0:= replaceansStr"answer",  "(" equ ")" ); output:= appendoutput"> "+equStr0); print( ">"+equStr0 ); equ := exprequStr0 ); output:= appendoutput"→ "+equ); print( "" ); print( ""equ );

pause();

ansStr := "simplify( answer )"// (2*a*x-b) = (√(-4*a*c+b^2)-2*b)

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equStr0:= replaceansStr"answer",  "(" equ ")" ); output:= appendoutput"> "+equStr0); print( ">"+equStr0 ); equ := exprequStr0 ); output:= appendoutput"→ "+equ); print( "" ); print( ""equ );

pause();

ansStr := "answer/( 2*a )";    // (2*a*x/(2*a)) = (-b+√(-4*a*c+b^2))/(2*a)

print( ">"+ansStr ); output:= appendoutput"> "+ansStr); equStr0:= replaceansStr"answer",  "(" equ ")" ); output:= appendoutput"> "+equStr0); print( ">"+equStr0 ); equ := exprequStr0 ); output:= appendoutput"→ "+equ); print( "" ); print( ""equ );

pause();

print(
">"+ansStr ); output:= appendoutput"> "+ansStr); equStr0:= replaceansStr"answer",  "(" equ ")" ); output:= appendoutput"> "+equStr0); print( ">"+equStr0 ); equ := exprequStr0 ); output:= appendoutput"→ "+equ); print( "" ); print( ""equ );

pause();

ansStr :=  "replace( answer, \"b+\", \"b±\" )"// x1 = (-b±√[b^2-4*a*c])/(2*a)

print( ">"+ansStr ); equStr0:= replaceansStr"answer",  "string(" equ ")" );
print(
">"+equStr0 );

equStr1 := exprequStr0 ); print( "" ); print( ""equStr1 );

pause();

// ansStr := "expr( replace( string( answer ), \"x\", \"x1\" ))"; // x1 = (-b+√(-4*a*c+b^2))/(2*a)
// print( ">"+ansStr ); output:= append( output, "> "+ansStr); equStr0:= replace( ansStr, "answer",  "(" + equ + ")" ); output:= append( output, "> "+equStr0); print( ">"+equStr0 ); equ := expr( equStr0 ); output:= append( output, "→ "+equ); print( "" ); print( ""+ equ );
// pause();

// ansStr :=  "expr( replace( string( answer ), \"b+\", \"b-\" ))"; // x1 = (-b-√[b^2-4*a*c])/(2*a)
// print( ">"+ansStr ); output:= append( output, "> "+ansStr); equStr0:= replace( ansStr, "answer",  "(" + equ + ")" ); output:= append( output, "> "+equStr0); print( ">"+equStr0 ); equ := expr( equStr0 ); output:= append( output, "→ "+equ); print( "" ); print( ""+ equ );
// pause();

// ansStr := "expr( replace( string( answer ), \"x1\", \"x2\" ))"; // x2 = (-b-√(-4*a*c+b^2))/(2*a)
// print( ">"+ansStr ); output:= append( output, "> "+ansStr); equStr0:= replace( ansStr, "answer",  "(" + equ + ")" ); output:= append( output, "> "+equStr0); print( ">"+equStr0 ); equ := expr( equStr0 ); output:= append( output, "→ "+equ); print( "" ); print( ""+ equ );
// pause();

purge(a);
return
"done";

end;
#end

// Not CAS prg
export pause()
begin

if lineByLineFlag == 1 then

//print( "____________________________[PAUSE]"  ); wait( );

print( "                                                                [PAUSE]"  ); wait( );
else
print(
"" );

end;
end;

// Not CAS prg
export choose_cas()
begin
local ok
:= 1;

local cancel := 0;

local currentPos := 2;

keyPressedOnMenu := choose(currentPos,"Pause every step", { "No""Yes" });
if

if currentPos == 2 then

print( "Any key to continue after [PAUSE]" );
print(
"" );

lineByLineFlag := 1;
else
print(
"Use cursor keys ↑↓ to move the output screen" );
print(
"" );

lineByLineFlag:= 0;

end;

else

kill;

end;
end

output
Quote:(a*x^2+b*x+c) = 0
> ((a*x^2+b*x+c) = 0) * 4*a
→ ((a*x^2+b*x+c)*4*a) = 0

> expand( (((a*x^2+b*x+c)*4*a) = 0) )
→ (4*a^2*x^2+4*a*b*x+4*a*c) = 0

> ((4*a^2*x^2+4*a*b*x+4*a*c) = 0) + b ²
→ (4*a^2*x^2+4*a*b*x+4*a*c+b^2) = (b^2)

> ((4*a^2*x^2+4*a*b*x+4*a*c+b^2) = (b^2)) - 4*a*c
→ (4*a^2*x^2+4*a*b*x+4*a*c+b^2-4*a*c) = (b^2-4*a*c)

> simplify( ((4*a^2*x^2+4*a*b*x+4*a*c+b^2-4*a*c) = (b^2-4*a*c)) )
→ (4*a^2*x^2+4*a*b*x+b^2) = (-4*a*c+b^2)

> factor( ((4*a^2*x^2+4*a*b*x+b^2) = (-4*a*c+b^2)) )
→ ((2*a*x+b)^2) = (-4*a*c+b^2)

> √ ((((2*a*x+b)^2) = (-4*a*c+b^2)))
→ (abs(2*a*x+b)) = (√(-4*a*c+b^2))

> ((2*a*x+b) = (√(-4*a*c+b^2))) - b
→ (2*a*x+b-b) = (√(-4*a*c+b^2)-b)

> simplify( ((2*a*x+b-b) = (√(-4*a*c+b^2)-b)) )
→ (2*a*x) = (-b+√(-4*a*c+b^2))

> ((2*a*x) = (-b+√(-4*a*c+b^2)))/( 2*a )
→ (2*a*x/(2*a)) = ((-b+√(-4*a*c+b^2))/(2*a))

> simplify( ((2*a*x/(2*a)) = ((-b+√(-4*a*c+b^2))/(2*a))) )
→ x = ((-b+√(-4*a*c+b^2))/(2*a))

version 3 with intermediate steps & SUBROUTINES (DOES NOT WORK)
SAME AS THE PREVIOUS VERSION, simply that the repeated code places it inside a subroutine.

The problem arises because the equation is rewritten a=b => a==b, And in this case the equation becomes a test. a==b -> false (0)
PHP Code:
//The following code is a program that shows step by step, the deduction of the quadratic formula
// VERSION 3 WITH INTERMEDIATE STEPS & SUBROUTINES
export lineByLineFlag := 0
//export equ;
//global symbolics equ, output;
#cas

begin
local ansStr
equstr0equStr1;

print;
// Clear Terminal Window

print( "***** Deduction Quadratic Formula *****" ); // Title

print( "version 3 with intermediate steps & subroutines" );

wait();

choose_cas();

assume(a>0);
print(

equ := ((a*x^2+b*x+c) = 0); output:={ equ };
print(
">"+equ );
print(
"assume(a>0)" );

pause();

ansStr := "answer * 4*a"// ((a*x^2+b*x+c)*4*a) = 0

str2expransStr );

pause();

ansStr := "expand( answer )"// (4*a^2*x^2 +4*a*b*x +4*a*c) = 0

str2expransStr );

pause();

ansStr := "answer + b²"// (4*a^2*x^2 +4*a*b*x + 4*a*c+b^2 ) = (b^2)

str2expransStr );

pause();

ansStr := "answer - 4*a*c"// (4*a^2*x^2 +4*a*b*x +4*a*c+b^2 -4*a*c) = (b^2 -4*a*c)

str2expransStr );

pause();

ansStr := "simplify( answer )"// (4*a^2*x^2 +4*a*b*x +b^2) = (-4*a*c +b^2)

str2expransStr );

pause();

ansStr := "factor( answer )"// (2*a*x+b)^2) = (-4*a*c+b^2)

str2expransStr );

pause();

ansStr := "√(answer)"// (abs(2*a*x+b)) = (√(-4*a*c+b^2))

str2expransStr );

pause();

equ := exprreplacestringequ ), "abs""" ) ); // (2*a*x+b) = (√(-4*a*c+b^2))

print( stringequ ) );

pause();

ansStr :=  "answer - b" ;  // (2*a*x+b-b) = (√(-4*a*c+b^2)-b)

str2expransStr );

pause();

ansStr := "simplify( answer )"// (2*a*x-b) = (√(-4*a*c+b^2)-2*b)

str2expransStr );

pause();

ansStr := "answer/( 2*a )";    // (2*a*x/(2*a)) = (-b+√(-4*a*c+b^2))/(2*a)

str2expransStr );

pause();

str2expransStr );

pause();

ansStr :=  "replace( answer, \"b+\", \"b±\" )"// x1 = (-b±√[b^2-4*a*c])/(2*a)

print( ">"+ansStr ); equStr0:= replaceansStr"answer",  "string(" equ ")" );
print(
">"+equStr0 );

equStr1 := exprequStr0 ); print( "" ); print( ""equStr1 );

pause();

// ansStr := "expr( replace( string( answer ), \"x\", \"x1\" ))"; // x1 = (-b+√(-4*a*c+b^2))/(2*a)
// str2expr( ansStr );
// pause();

// ansStr :=  "expr( replace( string( answer ), \"b+\", \"b-\" ))"; // x1 = (-b-√[b^2-4*a*c])/(2*a)
// str2expr( ansStr );
// pause();

// ansStr := "expr( replace( string( answer ), \"x1\", \"x2\" ))"; // x2 = (-b-√(-4*a*c+b^2))/(2*a)
// str2expr( ansStr );
// pause();

purge(a);
return
"done";

end;

//

str2expransStr ):=

begin
local equStr0
;
print(
">"+ansStr ); output:= appendoutput"> "+ansStr);

equStr0:= replaceansStr"answer",  "(" equ ")" ); output:= appendoutput"> "+equStr0);
print(
">"+equStr0 );

equ := exprequStr0 ); output:= appendoutput"→ "+equ);
print(
"" );
print(
""equ );

end;
#end

// Not CAS prg
export pause()
begin

if lineByLineFlag == 1 then

//print( "____________________________[PAUSE]"  ); wait( );

print( "                                                                [PAUSE]"  ); wait( );
else
print(
"" );

end;
end;

// Not CAS prg
export choose_cas()
begin
local ok
:= 1;

local cancel := 0;

local currentPos := 2;

keyPressedOnMenu := choose(currentPos,"Pause every step", { "No""Yes" });
if

if currentPos == 2 then

print( "Any key to continue after [PAUSE]" );
print(
"" );

lineByLineFlag := 1;
else
print(
"Use cursor keys ↑↓ to move the output screen" );
print(
"" );

lineByLineFlag:= 0;

end;

else

kill;

end;
end
12-09-2016, 07:58 PM (This post was last modified: 02-12-2017 07:32 AM by Han.)
Post: #2
 Han Senior Member Posts: 1,877 Joined: Dec 2013
RE: = to ==, why?
From a programming point of view, there must be a way of distinguishing the operation that tests whether two things are equal in value (==) and the operation that equates two objects (=) in a symbolic manner. So setting the variables x equal to y (i.e. making the two variables interchangeable) is different from testing if the quantity represented by x is equal to the quantity represented by y. This is really only meaningful in the CAS view. In Home view (non-CAS), there is generally no symbolic manipulation so that "=" and "==" are treated the same (i.e. both stand for testing if two values are equal).

Your CAS program uses non-CAS commands which forces "translation" since non-CAS commands generally do not know how to handle symbolic input; hence the translation to the more common programmatic representation for testing equality (i.e. ==). You also declared equ from the non-CAS side when you really wanted equ to be a CAS variable.

Why not just (within the CAS program) do

eq1:= a*x^2+b*x+c = 0;
eq1:= eq1*4*a;
print(eq1)

rather than passing things back and forth between your main CAS program and non-CAS subroutines? Here's a partially edited program which you can modify to fit your needs (and also to complete based on what is already there).

PHP Code:
export lineByLineFlag := 0;
export equ;
#cas

begin
local ansStr
;

print;
// Clear Terminal Window

print( "***** Deduction Quadratic Formula *****" ); // Title

freeze;

wait();

choose_cas();

freeze;

assume(a>0);
print(

eq1:= a*x^2+b*x+c=0;
print(
">"+eq );

pause();

eq1 := eq1 4*a;
print(
eq1); pause();

eq1 := expand(eq1);
print(
eq1); pause();

eq1 := eq1 b^4*a*c
eq1
:= simplify(eq1);
print(
eq1); pause();

eq1 := factor(eq1);
print(
eq1); pause();

eq1 := sqrt(eq1);

eq1 := subst(eq1abs(2*a*x+b)=2*a*x+b);
print(
eq1); pause();
end;
#end

#cas

str2exprstr ):=

begin
local step1
;
print(
">"+str );

step1:= replacestr"answer",  "(" equ ")" );
print(
">"+step1 ) ;

equ := exprstep1 );
print(
"" );
print(
""equ );

end;
#end

export pause()
begin

if lineByLineFlag == 1 then

print( "                                                                [PAUSE]"  ); wait( );
else
print(
"" );

end;
end;

export choose_cas()
begin
:= 0;

local currentPos := 2;

keyPressedOnMenu := choose(currentPos,"Pause every step", { "No""Yes" });
if

if currentPos == 2 then

print( "Any key to continue after [PAUSE]" );

lineByLineFlag := 1;
else
print(
"Use cursor keys ↑↓ to move the output screen" );

lineByLineFlag:= 0;

end;
print(
"" );
else

kill;

end;
end

Graph 3D | QPI | SolveSys
12-09-2016, 10:15 PM (This post was last modified: 12-09-2016 10:16 PM by compsystems.)
Post: #3
 compsystems Senior Member Posts: 1,318 Joined: Dec 2013
RE: = to ==, why?
Han Wrote:... You also declared equ from the non-CAS side when you really wanted equ to be a CAS variable.
I also think that the problem may be in the global variable, but some statements work fine, it fails when it reaches SQRT.

It is possible to define global variables symbolic, as it does, matLab?

Quote:rather than passing things back and forth between your main CAS program and non-CAS subroutines?
A principle of programming is to split an algorithm into sub-functions, my code should work

Quote:Why not just (within the CAS program) do
eq1:= a*x^2+b*x+c = 0;
eq1:= eq1*4*a;
print(eq1)

The first version of my code is in, it works fine.
12-10-2016, 05:46 AM (This post was last modified: 12-10-2016 05:55 AM by Han.)
Post: #4
 Han Senior Member Posts: 1,877 Joined: Dec 2013
RE: = to ==, why?
(12-09-2016 10:15 PM)compsystems Wrote:
Quote:rather than passing things back and forth between your main CAS program and non-CAS subroutines?
A principle of programming is to split an algorithm into sub-functions, my code should work

Quote:Why not just (within the CAS program) do
eq1:= a*x^2+b*x+c = 0;
eq1:= eq1*4*a;
print(eq1)

The first version of my code is in, it works fine.

Your first version worked fine because everything was kept on the CAS side. The problem is not that you used sub-functions. The problem is that you are using non-CAS commands (I erred and wrote 'subroutines' in my first response; but I meant commands) and therefore there is a lot of conversion/translation between CAS and non-CAS environments that are resulting in unwanted outputs. The problem is your equ:=expr(...) statement in your str2expr() subroutine. My modification of your code also uses sqrt() and does not exhibit the issue that you have.

EDIT: I still do not understand why you are doing all your calculations using strings when you have direct access to symbolic calculations by the fact that your program is a CAS program. It is as if you had an HP48 installed with an emulator, and the emulator is emulating the HP48. What is the reason for the seemingly unnecessary "extra layer" ?

Graph 3D | QPI | SolveSys
12-10-2016, 07:07 PM (This post was last modified: 12-11-2016 12:43 AM by compsystems.)
Post: #5
 compsystems Senior Member Posts: 1,318 Joined: Dec 2013
RE: = to ==, why?
(12-10-2016 05:46 AM)Han Wrote:  I still do not understand why you are doing all your calculations using strings when you have direct access to symbolic calculations by the fact that your program is a CAS program. It is as if you had an HP48 installed with an emulator, and the emulator is emulating the HP48. What is the reason for the seemingly unnecessary "extra layer" ?

The firt version "deductionQuadFormula_1()" (works fine), operates directly on symbolic expressions

The second version "deductionQuadFormula_2()" (works fine), to show intermediate steps, is required to convert it to string.
An alternative code may exist

The third version "deductionQuadFormula_3()", same as the previous one but using a subfunction to not repeat code (it does not work).

An alternative code may exist, Who can code it?

Codes updated in the first post

Comparison between the outputs of each version (1 & 2)
12-10-2016, 09:39 PM (This post was last modified: 12-10-2016 09:59 PM by Han.)
Post: #6
 Han Senior Member Posts: 1,877 Joined: Dec 2013
RE: = to ==, why?
In your third example, just comment out the export equ line (so that equ is created as a CAS variable) for a quick fix.

(12-10-2016 07:07 PM)compsystems Wrote:  The second version "deductionQuadFormula_2()" (works fine), to show intermediate steps, is required to convert it to string. An alternative code may exist

Why are you converting the CAS operations into strings? You can simply print the strings that show what steps you are doing, and then evaluate the actual operations using the actual CAS commands rather than using expr(...).

Code:
equ:=factor(equ);
print("> " + equ);

Quote:The third version "deductionQuadFormula_3()", same as the previous one but using a subfunction to not repeat code (it does not work). An alternative code may exist, Who can code it?

Unless the images provide information that your code itself cannot generate, there is really no need to include them because it makes your post that much more difficult to read. Also, please don't edit your original post in that manner. Instead, insert "EDIT:" and add more to your post. Otherwise, when existing responses to your original text it may no longer make sense since you have changed your original post.

Anyway, here is an incomplete example (run as quad(0) or quad(1) for no pause or with pause).

PHP Code:
#cas
BEGIN
local eq
;

print(

dostep('assume(a>0)',p);

dostep('equ1:=a*x^2+b*x+c=0',p);

dostep('equ1:=equ1*4*a',p);

dostep('equ1:=expand(equ1)',p);

dostep('equ1:=equ1+b^2-4*a*c',p);

dostep('equ1:=simplify(equ1)',p);

dostep('equ1:=factor(equ1)',p);

// more steps here
END;

dostep(cas,p):=
begin

print(cas);
print(eval(
cas)); // or use print("> " + eval(cas))

if p then

print("                                                                [PAUSE]");

wait();
else
print(
"");

end
end;
#end

Here's an alternative that prints something different from what is actually being computed.

PHP Code:
#cas
BEGIN
local eq
;

print(

dostep("assume(a>0)",'assume(a>0)',p);

dostep("equ1:=a*ax^2+b*x+c=0",'equ1:=a*x^2+b*x+c=0',p);

// more steps here
END;

dostep(s,cas,p):=
begin

print("> "+s);
print(eval(
cas));
if
p then

print("                                                                [PAUSE]");

wait();
else
print(
"");

end
end;
#end

Graph 3D | QPI | SolveSys
12-11-2016, 03:08 PM
Post: #7
 compsystems Senior Member Posts: 1,318 Joined: Dec 2013
RE: = to ==, why?

The problem is that when exporting variables they are operating in HOME mode.

My code works if you delete or comment the line
//export equ;

There should be a command to export symbolic variables

export symbolic equ;
 « Next Oldest | Next Newest »

User(s) browsing this thread: 1 Guest(s)