Product of Array
You are encouraged to solve this task according to the task description, using any language you may know.
Compute the product of the elements of an Array
4D
ARRAY INTEGER($var;0) For ($i;1;3) APPEND TO ARRAY($var;$i) End for $product:=1 For ($i;1;Size of array($var)) $product:=$product*$var{$i} End for
Ada
Define an unconstrained array type with an index starting at any valid integer value
type My_Array is array(Integer range <>) of Integer;
Define the product function
function Product(Item : My_Array) return Integer is Prod : Integer := 1; begin for I in Item'range loop Prod := Prod * Item(I); end loop; return Prod; end Product;
This function will raise the pre-defined exception Constraint_Error if the product overflows the values represented by type Integer
AppleScript
set array to {1, 2, 3, 4, 5} set product to 1 repeat with i in array -- very important -- list index starts at 1 not 0 set product to product * i end repeat
BASIC
10 REM Create an array with some test data in it 20 DIM ARRAY(5) 30 FOR I = 1 TO 5: READ ARRAY(I): NEXT I 40 DATA 1, 2, 3, 4, 5 50 REM Find the sum of elements in the array 60 PROD = 1 70 FOR I = 1 TO 5: PROD = PROD * ARRAY(I): NEXT I 80 PRINT "The product is "; PROD
C#
int value = 1; int[] arg = { 1,2,3,4,5 }; int arg_length = arg.Length; for( int i = 0; i < arg_length; i++ ) value *= arg[i];
Alternate
int prod = 1; int[] arg = { 1, 2, 3, 4, 5 }; foreach (int value in arg) prod *= value;
C++
int value = 1; int arg[] = { 1,2,3,4,5 }; int arg_length = sizeof(arg)/sizeof(arg[0]); int *end = arg+arg_length; for( int *p = arg; p!=end; ++p ) value *= *p;
Using the standard library:
#include <numeric> #include <functional> int arg[] = { 1, 2, 3, 4, 5 }; int value = std::accumulate(arg, arg+5, 1, std::multiplies<int>());
Clean
array = {1, 2, 3, 4, 5} Start = foldl (*) 1 [x \\ x <-: array]
D
auto value = 1; auto array = [1, 2, 3, 4, 5]; foreach(v; array) value *= v;
Erlang
List = [1, 2, 3, 4, 5]. Product = lists:foldl(fun (X, P) -> X * P end, 1, List).
Forth
: product ( addr cnt -- n ) 1 -rot cells bounds do i @ * cell +loop ;
FreeBASIC
dim array(4) as integer = { 1, 2, 3, 4, 5 } dim product as integer = 1 for index as integer = lbound(array) to ubound(array) product *= array(index) next
Haskell
let x = [1..10] product x -- the easy way foldl (*) 1 x -- the hard way
IDL
array = [3,6,8] print,product(array)
Java
int[] arg = { 1,2,3,4,5 }; int value = 1; for (int i: arg) value *= i;
JavaScript
Interpreter: Firefox 2.0
var array = [1, 2, 3, 4, 5]; var product = 1; for( var i in array ) { product *= array[i]; } alert( product );
LISP
Interpreter: XEmacs (beta) version 21.5.21 of February 2005 (+CVS-20050720)
(setq array [1 2 3 4 5]) (eval (concatenate 'list '(*) array))
Interpreter: CLisp (ANSI Common Lisp)
(defparameter data #1A(1 2 3 4 5)) (reduce #'* data)
OCaml
let x = [|1; 2; 3; 4; 5; 6; 7; 8; 9; 10|];; Array.fold_left ( * ) 1 x
Variant, using a liked list rather than an array:
let x = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10];; List.fold_left ( * ) 1 x
PHP
$array = array(1, 2, 3); $product = 1; foreach($array as $key) { $product *= $key; } echo($product);
There is also an array product function built-in to PHP:
$array = array(1,2,3); echo array_product($array);
Perl
Interpeter: Perl
my $var; my @list = (1, 2, 3); map($var *= $_, @list);
Alternate
my $var; my @list = (1, 2, 3); $var *= $_ for (@list);
Pop11
Simple loop:
lvars i, prod = 1, ar = {1 2 3 4 5 6 7 8 9}; for i from 1 to length(ar) do ar(i)*prod -> prod; endfor;
Prolog
product([],1). product([H|T],X) :- product(T,Y), X is H * X.
test
:- product([1,2,3,4,5],X). X = 120;
Python
Interpreter: Python 2.5
x = [1, 2, 3, 4, 5, 6, 7, 8, 9] product = 1 for i in x: product *= i
or
reduce(lambda z, y: z * y, x)
or
from operator import mul reduce(mul, x)
Note: It is encouraged not to use this as reduce may go away in the future.
Ruby
ary = [1,2,3,4,5] # or ary = *1..5 product = ary.inject{ |currentProduct, element| currentProduct * element } # => 120
Scala
val a = Array(1,2,3,4,5) val product = a.foldLeft(1)(_ * _) // (_ * _) is a shortcut for {(x,y) => x * y}
It may also be done in a classic imperative way :
var product = 1 for (val x <- a) product = product * x
Scheme
(define x '(1 2 3 4 5)) (apply * x)
A recursive solution, without the n-ary operator "trick":
(define (reduce f u L) (if (null? L) u (f (car L) (reduce f u (cdr L))))) (reduce * 1 '(1 2 3 4 5)) ;; 1 is unit for *
Seed7
const func integer: prodArray (in array integer: valueArray) is func result var integer: prod is 1; local var integer: value is 0; begin for value range valueArray do prod *:= value; end for; end func;
Call this function with:
writeln(prodArray([](1, 2, 3, 4, 5)));
Standard ML
val x = [1,2,3,4,5] foldl (op*) 1 x
Tcl
set arr [list 3 6 8] set result [expr [join $arr *]]
Toka
4 cells is-array foo 212 1 foo array.put 51 2 foo array.put 12 3 foo array.put 91 4 foo array.put reset 1 4 0 [ i foo array.get * ] countedLoop .