| 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%Kostia P.                            %%
 %%Mr. Wong                            %%
 %%Program : Binary Addition in Turing.%%
 %%Finished February 17th 2005         %%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 %Set the screen size, colour and font
 View.Set ("graphics:340;200,position:bottom;left,nobuttonbar")
 drawfillbox (0, 0, maxx, maxy, black)
 colorback (black)
 color (yellow)
 
 %Variable Declaration
 var snum1, snum2 : string
 var lnum1 : int
 var lnum2 : int
 var query : string (1)
 
 %Procedure - Length of StringNum1 is Greater
 procedure glnum1
 %Individual Variables
 var dif : int := lnum1 - lnum2
 var lenum2 : string := snum2
 for x : 1 .. dif
 lenum2 := "0" + lenum2
 end for
 %%%%%%%%%%%%%%%%%%%%%%%%
 var add1, add2 : array 1 .. lnum1 of int
 var final : array 1 .. lnum1 of int
 var fdigit : int := 0
 var carry : int := 0
 %%%%%%%%%%%%%%%%%%%%%%%%
 for i : 1 .. lnum1
 add1 (i) := strint (snum1 (i))
 end for
 for i : 1 .. lnum1
 add2 (i) := strint (lenum2 (i))
 end for
 %%%%%%%%%%%%%%%%%%%%%%%%
 for decreasing k : lnum1 .. 1
 if k = 1 and add1 (k) + add2 (k) = 0 and carry = 0 then
 fdigit := 0
 elsif k = 1 and add1 (k) + add2 (k) = 1 and carry = 0 then
 fdigit := 1
 elsif k = 1 and add1 (k) + add2 (k) = 1 and carry = 1 then
 fdigit := 10
 elsif k = 1 and add1 (k) + add2 (k) = 2 and carry = 0 then
 fdigit := 10
 elsif k = 1 and add1 (k) + add2 (k) = 2 and carry = 1 then
 fdigit := 11
 end if
 %%%%
 if add1 (k) + add2 (k) = 0 and carry = 0 then
 final (k) := 0
 carry := 0
 elsif add1 (k) + add2 (k) = 0 and carry = 1 then
 final (k) := 1
 carry := 0
 elsif add1 (k) + add2 (k) = 1 and carry = 0 then
 final (k) := 1
 carry := 0
 elsif add1 (k) + add2 (k) = 1 and carry = 1 then
 final (k) := 0
 carry := 1
 elsif add1 (k) + add2 (k) = 2 and carry = 0 then
 final (k) := 0
 carry := 1
 elsif add1 (k) + add2 (k) = 2 and carry = 1 then
 final (k) := 1
 carry := 1
 end if
 end for
 %Put the final values
 put "The addition these two values produce.."
 put fdigit ..
 if lnum1 > 1 then
 for t : 2 .. lnum1
 put final (t) ..
 end for
 end if
 
 end glnum1
 %Procedure - Second number is greater
 procedure glnum2
 %Reversal of variables
 var temp1, temp2 : string
 temp1 := snum1
 temp2 := snum2
 snum1 := temp2
 snum2 := temp1
 
 lnum1 := length (snum1)
 lnum2 := length (snum2)
 %%%%%%%%%%%%%%%%%%%%%%%%
 var dif : int := lnum1 - lnum2
 var lenum2 : string := snum2
 for x : 1 .. dif
 lenum2 := "0" + lenum2
 end for
 %%%%%%%%%%%%%%%%%%%%%%%%
 var add1, add2 : array 1 .. lnum1 of int
 var final : array 1 .. lnum1 of int
 var fdigit : int := 0
 var carry : int := 0
 %%%%%%%%%%%%%%%%%%%%%%%%
 for i : 1 .. lnum1
 add1 (i) := strint (snum1 (i))
 end for
 for i : 1 .. lnum1
 add2 (i) := strint (lenum2 (i))
 end for
 %%%%%%%%%%%%%%%%%%%%%%%%
 for decreasing k : lnum1 .. 1
 if k = 1 and add1 (k) + add2 (k) = 0 and carry = 0 then
 fdigit := 0
 elsif k = 1 and add1 (k) + add2 (k) = 1 and carry = 0 then
 fdigit := 1
 elsif k = 1 and add1 (k) + add2 (k) = 1 and carry = 1 then
 fdigit := 10
 elsif k = 1 and add1 (k) + add2 (k) = 2 and carry = 0 then
 fdigit := 10
 elsif k = 1 and add1 (k) + add2 (k) = 2 and carry = 1 then
 fdigit := 11
 end if
 %%%%%%%%%%%%%%%%%%%%%%%%
 if add1 (k) + add2 (k) = 0 and carry = 0 then
 final (k) := 0
 carry := 0
 elsif add1 (k) + add2 (k) = 0 and carry = 1 then
 final (k) := 1
 carry := 0
 elsif add1 (k) + add2 (k) = 1 and carry = 0 then
 final (k) := 1
 carry := 0
 elsif add1 (k) + add2 (k) = 1 and carry = 1 then
 final (k) := 0
 carry := 1
 elsif add1 (k) + add2 (k) = 2 and carry = 0 then
 final (k) := 0
 carry := 1
 elsif add1 (k) + add2 (k) = 2 and carry = 1 then
 final (k) := 1
 carry := 1
 end if
 end for
 %Put final answer
 put "The addition these two values produce.."
 put fdigit ..
 if lnum1 > 1 then
 for t : 2 .. lnum1
 put final (t) ..
 end for
 end if
 
 end glnum2
 
 %Equal Amount
 procedure glequal
 %%%%%%%%%%%%%%%%%%%%%%%%
 var add1, add2 : array 1 .. lnum1 of int
 var final : array 1 .. lnum1 of int
 var fdigit : int := 0
 var carry : int := 0
 %%%%%%%%%%%%%%%%%%%%%%%%
 for i : 1 .. lnum1
 add1 (i) := strint (snum1 (i))
 end for
 for i : 1 .. lnum2
 add2 (i) := strint (snum2 (i))
 end for
 %%%%%%%%%%%%%%%%%%%%%%%%
 for decreasing k : lnum1 .. 1
 if k = 1 and add1 (k) + add2 (k) = 0 and carry = 0 then
 fdigit := 0
 elsif k = 1 and add1 (k) + add2 (k) = 1 and carry = 0 then
 fdigit := 1
 elsif k = 1 and add1 (k) + add2 (k) = 1 and carry = 1 then
 fdigit := 10
 elsif k = 1 and add1 (k) + add2 (k) = 2 and carry = 0 then
 fdigit := 10
 elsif k = 1 and add1 (k) + add2 (k) = 2 and carry = 1 then
 fdigit := 11
 end if
 %%%%%%%%%%%%%%%%%%%%%%%%
 if add1 (k) + add2 (k) = 0 and carry = 0 then
 final (k) := 0
 carry := 0
 elsif add1 (k) + add2 (k) = 0 and carry = 1 then
 final (k) := 1
 carry := 0
 elsif add1 (k) + add2 (k) = 1 and carry = 0 then
 final (k) := 1
 carry := 0
 elsif add1 (k) + add2 (k) = 1 and carry = 1 then
 final (k) := 0
 carry := 1
 elsif add1 (k) + add2 (k) = 2 and carry = 0 then
 final (k) := 0
 carry := 1
 elsif add1 (k) + add2 (k) = 2 and carry = 1 then
 final (k) := 1
 carry := 1
 end if
 end for
 %Put final answer
 put "The addition these two values produce.."
 put fdigit ..
 if lnum1 > 1 then
 for t : 2 .. lnum1
 put final (t) ..
 end for
 end if
 end glequal
 %Procedure - Call glnum1, glnum2, equal
 procedure procCall
 if lnum1 > lnum2 then
 glnum1
 elsif lnum1 < lnum2 then
 glnum2
 else
 glequal
 end if
 end procCall
 %Question Loop
 loop
 %Get snum1, snum2
 put "Please enter the first binary number.."
 get snum1
 put "Please enter the second binary number.."
 get snum2
 lnum1 := length (snum1)
 lnum2 := length (snum2)
 procCall
 put ""
 put ""
 put "Would you like to calculate another value?"
 get query
 if query = "y" or query = "yes" or query = "Yes" or query = "Y" then
 delay (400)
 cls
 elsif query = "n" or query = "N" or query = "No" or query = "no" then
 exit
 else
 exit
 end if
 end loop
 %End program
 
 |