Maximum difference between adjacent elements of list: Difference between revisions
Content added Content deleted
(Added Algol 68) |
|||
Line 15: | Line 15: | ||
10,3 ==> 7 |
10,3 ==> 7 |
||
<br><br> |
<br><br> |
||
=={{header|ALGOL 68}}== |
|||
<lang algol68>BEGIN # find the maximum difference between consecutive list elements # |
|||
# returns the maximum difference between pairs of elements of list # |
|||
OP MAXDELTA = ( []REAL list )REAL: |
|||
BEGIN |
|||
REAL max diff := 0; |
|||
FOR i FROM LWB list TO UPB list - 1 DO |
|||
REAL delta = ABS ( list[ i ] - list[ i + 1 ] ); |
|||
IF delta > max diff THEN |
|||
max diff := delta # found a higher difference # |
|||
FI |
|||
OD; |
|||
max diff |
|||
END; # MAXDELTA # |
|||
# returns r converted to a string with trailing 0 decimal places removed # |
|||
OP TOSTRING = ( REAL r )STRING: |
|||
BEGIN |
|||
STRING result := fixed( r, 0, 10 ); |
|||
IF result[ LWB result ] = "." THEN result := "0" + result FI; |
|||
INT r end := UPB result; |
|||
INT r start := LWB result; |
|||
WHILE IF r end <= r start THEN FALSE ELSE result[ r end ] = "0" FI DO |
|||
r end -:= 1 |
|||
OD; |
|||
IF r end > LWB result THEN |
|||
# if all decimal places were "0", remove the "." as well # |
|||
IF result[ r end ] = "." THEN r end -:= 1 FI |
|||
FI; |
|||
result[ r start : r end ] |
|||
END; # TOSTRING # |
|||
# test the MAXDELTA operator # |
|||
PROC test max delta = ( []REAL list )VOID: |
|||
BEGIN |
|||
REAL max diff = MAXDELTA list; |
|||
print( ( "Max difference [" ) ); |
|||
FOR i FROM LWB list TO UPB list DO |
|||
print( ( " ", TOSTRING list[ i ] ) ) |
|||
OD; |
|||
print( ( " ] is ", TOSTRING max diff, ":", newline ) ); |
|||
FOR i FROM LWB list TO UPB list - 1 DO |
|||
IF REAL diff = ABS ( list[ i ] - list[ i + 1 ] ); |
|||
diff = max diff |
|||
THEN |
|||
print( ( " ", TOSTRING list[ i ], ", ", TOSTRING list[ i + 1 ] |
|||
, " ==> ", TOSTRING diff |
|||
, newline |
|||
) |
|||
) |
|||
FI |
|||
OD |
|||
END; # test max delta # |
|||
# task test case # |
|||
test max delta( ( 1, 8, 2, -3, 0, 1, 1, -2.3, 0, 5.5, 8, 6, 2, 9, 11, 10, 3 ) ); |
|||
# additional test cases # |
|||
test max delta( ( -1.1, -1.2 ) ); test max delta( ( pi, pi, pi ) ); |
|||
test max delta( ( ) ); test max delta( ( 776.591 ) ) |
|||
END</lang> |
|||
{{out}} |
|||
<pre> |
|||
Max difference [ 1 8 2 -3 0 1 1 -2.3 0 5.5 8 6 2 9 11 10 3 ] is 7: |
|||
1, 8 ==> 7 |
|||
2, 9 ==> 7 |
|||
10, 3 ==> 7 |
|||
Max difference [ -1.1 -1.2 ] is 0.1: |
|||
-1.1, -1.2 ==> 0.1 |
|||
Max difference [ 3.1415926536 3.1415926536 3.1415926536 ] is 0: |
|||
3.1415926536, 3.1415926536 ==> 0 |
|||
3.1415926536, 3.1415926536 ==> 0 |
|||
Max difference [ ] is 0: |
|||
Max difference [ 776.591 ] is 0: |
|||
</pre> |
|||
=={{header|Go}}== |
=={{header|Go}}== |