Ethiopian multiplication: Difference between revisions

Content added Content deleted
(VBScript entry)
Line 1,617: Line 1,617:
578
578
</pre>
</pre>

=={{header|VBScript}}==
=====Implementation=====
Nowhere near as optimal a solution as the Ada. Yes, it could have made as optimal, but the long way seemed more interesting.

Demonstrates a List class. The .recall and .replace methods have bounds checking but the code does not test for the exception that would be raised. List class extends the storage allocated for the list when the occupation of the list goes beyond the original allocation.

<code>option explicit</code> makes sure that all variables are declared.
<lang vb>
option explicit

class List
private theList
private nOccupiable
private nTop
sub class_initialize
nTop = 0
nOccupiable = 100
redim theList( nOccupiable )
end sub
public sub store( x )
if nTop >= nOccupiable then
nOccupiable = nOccupiable + 100
redim preserve theList( nOccupiable )
end if
theList( nTop ) = x
nTop = nTop + 1
end sub
public function recall( n )
if n >= 0 and n <= nOccupiable then
recall = theList( n )
else
err.raise vbObjectError + 1000,,"Recall bounds error"
end if
end function
public sub replace( n, x )
if n >= 0 and n <= nOccupiable then
theList( n ) = x
else
err.raise vbObjectError + 1001,,"Replace bounds error"
end if
end sub
public property get listCount
listCount = nTop
end property
end class

function halve( n )
halve = int( n / 2 )
end function

function twice( n )
twice = int( n * 2 )
end function

function iseven( n )
iseven = ( ( n mod 2 ) = 0 )
end function


function multiply( n1, n2 )
dim LL
set LL = new List

dim RR
set RR = new List

LL.store n1
RR.store n2
do while n1 <> 1
n1 = halve( n1 )
LL.store n1
n2 = twice( n2 )
RR.store n2
loop
dim i
for i = 0 to LL.listCount
if iseven( LL.recall( i ) ) then
RR.replace i, 0
end if
next

dim total
total = 0
for i = 0 to RR.listCount
total = total + RR.recall( i )
next
multiply = total
end function
</lang>

=====Invocation=====
<lang vb>
wscript.echo multiply(17,34)
</lang>

=====Output=====
<lang vb>
578
</lang>


=={{header|x86 assembly}}==
=={{header|x86 assembly}}==