langs a-z
This commit is contained in:
parent
db842d013d
commit
d066446780
11389 changed files with 98361 additions and 1020 deletions
|
|
@ -0,0 +1,58 @@
|
|||
create or replace package ethiopian is
|
||||
|
||||
function multiply
|
||||
( left in integer,
|
||||
right in integer)
|
||||
return integer;
|
||||
|
||||
end ethiopian;
|
||||
/
|
||||
|
||||
create or replace package body ethiopian is
|
||||
|
||||
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
|
||||
|
||||
loop
|
||||
if not is_even(plier) then
|
||||
temp := temp + plicand;
|
||||
end if;
|
||||
exit when plier <= 1;
|
||||
plier := half(plier);
|
||||
plicand := double(plicand);
|
||||
end loop;
|
||||
|
||||
return temp;
|
||||
|
||||
end multiply;
|
||||
|
||||
end ethiopian;
|
||||
/
|
||||
|
||||
/* example call */
|
||||
begin
|
||||
dbms_output.put_line(ethiopian.multiply(17, 34));
|
||||
end;
|
||||
/
|
||||
Loading…
Add table
Add a link
Reference in a new issue