61 lines
2.6 KiB
Text
61 lines
2.6 KiB
Text
BEGIN # display the period and group number of an element, #
|
|
# given its atomic number #
|
|
INT max atomic number = 118; # highest known element #
|
|
# the positions are stored as: #
|
|
# ( group number * group multiplier ) + period #
|
|
INT group multiplier = 100;
|
|
[ 1 : max atomic number ]INT position;
|
|
# construct the positions of the elements in the table #
|
|
BEGIN
|
|
STRING periodic table = "- ="
|
|
+ "-- -----="
|
|
+ "-- -----="
|
|
+ "-----------------="
|
|
+ "-----------------="
|
|
+ "--8--------------="
|
|
+ "--9--------------="
|
|
;
|
|
INT period := 1;
|
|
INT group := 1;
|
|
INT element := 1;
|
|
FOR t FROM LWB periodic table TO UPB periodic table DO
|
|
CHAR p = periodic table[ t ];
|
|
IF p = "8" OR p = "9" THEN
|
|
# lantanoids or actinoids #
|
|
INT series period = IF p = "8" THEN 8 ELSE 9 FI;
|
|
INT series group := 4;
|
|
FOR e TO 15 DO
|
|
position[ element ] := ( group multiplier * series group ) + series period;
|
|
element +:= 1;
|
|
series group +:= 1
|
|
OD
|
|
ELIF p /= " " THEN
|
|
# there is a single element here #
|
|
position[ element ] := ( group multiplier * group ) + period;
|
|
element +:= 1;
|
|
IF p = "=" THEN
|
|
# final element of the period #
|
|
period +:= 1;
|
|
group := 0
|
|
FI
|
|
FI;
|
|
group +:= 1
|
|
OD
|
|
END;
|
|
# display the period and group numbers of test elements #
|
|
[]INT test = ( 1, 2, 29, 42, 57, 58, 59, 71, 72, 89, 90, 103, 113 );
|
|
FOR t FROM LWB test TO UPB test DO
|
|
INT e = test[ t ];
|
|
IF e < LWB position OR e > UPB position THEN
|
|
print( ( "Invalid element: ", whole( e, 0 ), newline ) )
|
|
ELSE
|
|
INT period = position[ e ] MOD group multiplier;
|
|
INT group = position[ e ] OVER group multiplier;
|
|
print( ( "Element ", whole( e, -3 )
|
|
, " -> ", whole( period, 0 ), ", ", whole( group, -2 )
|
|
, newline
|
|
)
|
|
)
|
|
FI
|
|
OD
|
|
END
|