WARNING: This example assumes the output is sent to a printer, and as a result, every formatted output contains printer control.
1 1 2 2 3 3 4 4 5 5 6 6 7 7
....5....0....5....0....5....0....5....0....5....0....5....0....5....0....5
1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9
2*1= 2 2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
:
:
8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72
9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
PROGRAM Multiplication_Table
IMPLICIT NONE
INTEGER, PARAMETER :: MAX = 9
INTEGER :: i, j
CHARACTER(LEN=80) :: FORMAT
FORMAT = "(9(2X, I1, A, I1, A, I2))"
DO i = 1, MAX
WRITE(*,FORMAT) (i, '*', j, '=', i*j, j = 1, MAX)
END DO
END PROGRAM Multiplication_Table
Click here to download this program.
1 1 2 2 3 3 4 4 5 5 6 6 7 7
....5....0....5....0....5....0....5....0....5....0....5....0....5....0....5
1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9
2*1= 2 2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*1= 3 3*2= 6 3*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*1= 4 4*2= 8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54
7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63
8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72
9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
But, this will not work perfectly. If the above is expanded into the following:(9(I1,A,I1,A,I2))
You will see that after the result is printed with I2, the next number will be printed with I1. Therefore, this result and the first number of the next multiplication will join together! More precisely, we would have the following output:(I1,A,I1,A,I2,I1,A,I1,A,I2,I1,A,I1,A,I2,......,I1,A,I1,A,I2)
To overcome this this problem, we should added a few spaces between two multiplication results. In the solution above, we use 2X to insert two spaces:1*1= 11*2= 21*3= 3 .......
FORMAT = "(9(2X, I1, A, I1, A, I2))"
Since there are nine rows, i runs from 1 to 9 with a counting DO loop:FORMAT = "(9(2X, I1, A, I1, A, I2))" WRITE(*,FORMAT) (i, '*', j, '=', i*j, j = 1, MAX)
FORMAT = "(9(2X, I1, A, I1, A, I2))" DO i = 1, MAX WRITE(*,FORMAT) (i, '*', j, '=', i*j, j = 1, MAX) END DO