Ethiopian multiplication: Difference between revisions
Content added Content deleted
(Modula-3) |
|||
Line 786: | Line 786: | ||
=={{header|PL/SQL}}== |
=={{header|PL/SQL}}== |
||
This code was taken from the ADA example above - very minor differences. |
|||
{{incorrect|PL/SQL|The task asks for three functions to be defined and used: halve, double, and even.}} |
|||
<lang plsql> |
|||
<lang plsql>CREATE FUNCTION ethiopianMult(pNum1 NUMBER, pNum2 NUMBER) RETURN NUMBER IS |
|||
create or replace package ethiopian is |
|||
function multiply |
|||
vNum1 NUMBER := pNum1; |
|||
( left in integer, |
|||
vNum2 NUMBER := pNum2; |
|||
right in integer) |
|||
vTot NUMBER := 0; |
|||
return integer; |
|||
BEGIN |
|||
⚫ | |||
end ethiopian; |
|||
vNum1 := trunc(vNum1/2); |
|||
/ |
|||
⚫ | |||
vNum2 := vNum2 + vNum2; |
|||
create or replace package body ethiopian is |
|||
if mod(vNum1,2) != 0 then |
|||
vTot := vTot + vNum2; |
|||
function is_even(item in integer) return boolean is |
|||
⚫ | |||
begin |
|||
⚫ | |||
return item mod 2 = 0; |
|||
end is_even; |
|||
⚫ | |||
function double(item in integer) return integer is |
|||
begin |
|||
return item * 2; |
|||
end double; |
|||
function half(item in integer) return integer is |
|||
begin |
|||
return trunc(item / 2); |
|||
end half; |
|||
function multiply |
|||
( left in integer, |
|||
right in integer) |
|||
return Integer |
|||
is |
|||
temp integer := 0; |
|||
plier integer := left; |
|||
plicand integer := right; |
|||
begin |
|||
⚫ | |||
if not is_even(plier) then |
|||
temp := temp + plicand; |
|||
⚫ | |||
plier := half(plier); |
|||
plicand := double(plicand); |
|||
⚫ | |||
⚫ | |||
temp := temp + plicand; |
|||
return temp; |
|||
end multiply; |
|||
end ethiopian; |
|||
/ |
|||
/* example call */ |
|||
begin |
|||
dbms_output.put_line(ethiopian.multiply(17, 34)); |
|||
end; |
|||
/ |
|||
⚫ | |||
=={{header|PowerShell}}== |
=={{header|PowerShell}}== |