Title: Arrays
1Arrays
2Introduction
In scientific and engineering computing, it is
very common to need to manipulate ordered sets of
values, such as vectors and matrices. There is
a common requirement in many applications to
repeat the same sequence of operations on
successive sets of data. In order to handle
both of these requirements, F provides extensive
facilities for grouping a set of items of the
same type into an array which can be operated on
either as an object in its own
right or by reference to each of its
individual elements.
3The array concept
4The array concept
- A set with n (6) object, named A
- In mathematical terms, we can call A, a vector
- And we refer to its elements as A1, A2, A3,
5The array concept
- In F, we call such an ordered set of related
variables an array - Individual items within an array array elements
- A(1), A(2), A(3), , A(n)
6Array Concept
In all the programs we have used one name to
refer to one location in the computers memory.
It is possible to refer a complete set of data
obtained for example from repeating statements,
etc. To do this is to define a group called
array with locations in the memory so that its
all elements are identified by an index or
subscript of integer type. An array element is
designated by the name of the array along with a
parenthesized list of subscript expressions.
7The array concept
- Subscripts can be
- x(10)
- y(i4)
- z(3imax(i, j, k))
- x(int(y(i)z(j)x(k)))
- x(1)x(2)x(4)1
- print,x(5)
8The array concept
A20
A31
9Array declarations
- type, dimension(subscript bounds)
list_of_array_names - type, dimension(nm) variable_name_list
- real, dimension(04) gravity, pressure
- integer, dimension(1100) scores
- logical, dimension(-1, 3) table
10Examples for Shape Arrays
real, dimension ( 0 49 ) z ! the array
z has 50 elements real, dimension ( 11 60
) a, b, c ! a,b,c has 50
elements real, dimension ( -20 -1 ) x
! the array x has 20 elements real,
dimension ( -9 10 ) y ! the array
y has 20 elements
11Array declarations
- Up to 7 dimensions
- Number of permissible subscripts rank
- Number of elements in a particular
dimension extent - Total number of elements of an array size
- Shape of an array is determined by its rank and
the extent of each dimension
12Array constants and initial values
Since an array consists of a number of array
elements, it is necessary to
provide values for each of these elements by
means of an array constructor . In its
simplest form, an array constructor consists of a
list of values enclosed between special
delimiters the first of which
consists of the 2 characters ( /
the second of the 2 characters
/ ) ( / value_1, value_2, .,
value_n /)
13Examples
integer, dimension ( 10 ) arr arr
(/ 3, 5, 7, 3, 27, 8, 12, 31, 4, 22 /) arr (
1 ) 3 arr ( 5 ) 27 !
the value 27 is storen in the 5th location of the
array arr arr ( 7 ) 12 arr ( 10 )
22
14Array constructors
- (/ value_1, value_2, /)
- arr (/ 123, 234, 567, 987 /)
- Regular patterns are commonimplied do(/
value_list, implied_do_control /) - arr (/ (i, i 1, 10) /)
- arr (/ -1, (0, i 1, 48), 1 /)
15Initialization
- You can declare and initialize an array at the
same time - integer, dimension(50) my_array (/ (0, i
1, 50) /)
16Input and output
- Array elements treated as scalar variables
- Array name may appear whole array
- Subarrays can be referred too
EXAMPLE integer, dimension ( 5 )
value read , value read , value(3)
17Examples
- real, dimension(5) p, qinteger, dimension(4)
rprint , p, q(3), rread , p(3), r(1), q - print , p, q (3), q (4), r
- print , q (2)
- ! displays the value in the 2nd location of the
array q - print , p
- ! displays all the values storen in the array
p
18Using arrays and array elements...
-
- The use of array variables within a loop ,
therefore, greatly increases the power and
flexibility of a program. F enables an array to
be treated as a single object in its own right,
in much the same way as a scalar object.
Assignment of an array constant to an array
variable will be performed as is seen below -
- array_name (/ list_of_values /)
- array_name (/ value_1, value_2, ..,
value_n /) -
- An array element can be used anywhere that a
scalar variable can be used - a(2) t(5) - t(3)q(2) a(i) t(j) - f(k)
-
19Using arrays and array elements...
- An array can be treated as a single object
- Two arrays are conformable if they have the same
shape - A scalar, including a constant, is conformable
with any array - All intrinsic operations are defined between two
conformable objects
20Using arrays and array elements...
Arrays having the same number of elements may be
applied to arrays and simple expressions. In this
case, operation applied toan array are carried
out elementwise.
- .
- real, dimension(20) a, b, c
- .
- .
- a bc
- do i 1, 20
- a(i) b(i)c(i)
- end do
21Example
integer, dimension ( 4 ) a, b integer,
dimension ( 0 3 ) c integer, dimension (
6 9 ) d a (/ 1, 2, 3, 4 /) b
(/ 5, 6, 7, 8 /) c (/ -1, 3, -5, 7
/) c(0) c(1) c(2) c(3) a a b
! will result a (/ 6, 8, 10, 12 /) d
2 abs ( c ) 1 ! will result d
(/ 3, 7, 11, 15 /)
d(6) d(7) d(8) d(9)
22Intrinsic procedures with arrays
- Elemental intrinsic procedures with arrays
- array_1 sin(array_2)
- arr_max max(100.0, a, b, c, d, e)
- Some special intrinsic functions
- maxval(arr)
- maxloc(arr)
- minval(arr)
- minloc(arr)
- size(arr)
- sum(arr)
23Sub-arrays
- Array sections can be extracted from a parent
array in a rectangular grid usinf subscript
triplet notation or using vector subscript
notation - Subscript triplet subscript_1 subscript_2
stride
Similar to the do loops, a subscript triplet
defines an ordered set of subscripts
beginning with subscript_1, ending with
subscript_2 and considering a seperation of
stride between the consecutive subscripts.
The value of stride must not be zero.
24Sub-arrays
- Subscript triplet subscript_1 subscript_2
stride - Simpler forms
- subscript_1 subscript_2
- subscript_1
- subscript_1 stride
- subscript_2
- subscript_2 stride
- stride
-
25Example
real, dimension ( 10 ) arr arr ( 1 10
) ! rank-one array containing all the
elements of arr. arr ( ) !
rank-one array containing all the elements of
arr. arr ( 3 5 ) ! rank-one array
containing the elements arr (3), arr(4),
arr(5). arr ( 9 ) ! rank-one array
containing the elements arr (1), arr(2),.,
arr(9). arr ( 4 ) ! rank-one array
containing the elements arr (1), arr(5),arr(9).
26Example
integer, dimension ( 10 ) a integer,
dimension ( 5 ) b, i integer
j a (/ 11, 22, 33, 44, 55, 66, 77, 88,
99, 110 /) i (/ 6, 5, 3, 9, 1 /) b
a ( i ) ! will result b ( 66, 55, 33,
99, 11 /) a ( 2 10 2 ) ! will result
a ( 22, 44, 66, 88, 110 /) a ( 1 10 2
) (/ j 2, ( j 1, 5 ) /) ! will
result a ( 1, 4, 9, 16, 25 /)
a(1) a(3) a(5) a(7) a(9)
27Type of printing sub-arrays
work ( / 3, 7, 2 /) print , work (1),
work (2), work (3) ! or print , work ( 1 3
) ! or print , work ( 1 ) ! or integer
i do i 1, 3, 1 print , work
(i) end do ! or another example print , sum
( work (1 3) ) ! or another example print ,
sum ( work (1 3 2) )
28Type of INPUT of sub-arrays
integer, dimension ( 10 ) a integer,
dimension ( 3 ) b . b a ( 4 6
) ! b (1 ) a (4) ! b (2 ) a
(5) ! b (3 ) a (6) . a ( 1 3 )
0 ! a(1) a(2) a(3) 0 a ( 1 2 ) 1 !
a(1) a(3) . a(9) 1 a ( 1 2 ) a ( 2
2 ) 1 ! a(1) a(2) 1 ! a(3)
a(4) 1 ! a(5) a(6) 1 ! etc.
29PROBLEM Write a function that takes 2 real
arrays as its arguments returns an array in which
each element is the maximum of the 2
corresponding elements in the input
array function max_array ( array_1, array_2 )
result (maximum_array) ! this function
returns the maximum of 2 arrays on an element-by-
element basis ! dummy arguments real,
dimension ( ) , intent (in) array_1,
array_2 ! result variable real, dimension ( size
(array_1) ) maximum_array ! use the
intrinsic function max to compare
elements maximum_array max ( array_1,
array_2) ! or use a do-loop instead of the
intrinsic function max to compare elements !
do i 1, size (array_2) ! maximum_array (
i ) max ( array_1 ( i ), array_2 ( i ) ) !
end do end function max_array
30Do following problems for practice