PROGRAM 12
PROGRAM ADJUST
C.....THIS PROGRAM ADJUSTS THE INITIAL DATA SO THAT IT WILL FORM A CLOSED
C.....POLYGON.
C.....F012 ANTHONY F. ORTIZ **104**
C.....DECLARE A 2-DIMENSIONAL REAL ARRAY THAT HOLDS LENGTH, ANGLE IN
C.....DEGREES, ANGLE IN MINUTES, AZIMUTH, DEPARTURE, LATITUDE, X, AND
C.....Y COORDINATES AND A 2-DIMENSIONAL CHARACTER ARRAY THAT HOLDS THE
C.....BEARINGS. ALSO DECLARE A REAL VARIABLES FOR THE ERRORS OF CLOSURES.
INTEGER COUNT
REAL ARRAY1 (5, 8), DCLOSE, LCLOSE
CHARACTER*1 ARRAY2 (5, 2)
COUNT = 1
C.....CALL THE BELOW SUBPROGRAMS FROM THE MAIN PROGRAM.
CALL OPEN_FILES ()
CALL INPUT_VALUES (ARRAY1, ARRAY2)
CALL CALCULATE_DEPTLATI (ARRAY1, ARRAY2)
CALL CALCULATE_CLOSURE (ARRAY1, DCLOSE, LCLOSE)
CALL CALCULATE_COORDINATES (ARRAY1)
CALL PRINT_RESULTS (ARRAY1, DCLOSE, LCLOSE, COUNT)
CALL MAKE_CORRECTIONS (ARRAY1, DCLOSE, LCLOSE)
CALL CALCULATE_CLOSURE (ARRAY1, DCLOSE, LCLOSE)
CALL CALCULATE_COORDINATES (ARRAY1)
CALL PRINT_RESULTS (ARRAY1, DCLOSE, LCLOSE, COUNT)
STOP
END
SUBROUTINE OPEN_FILES ()
C.....THIS SUBROUTINE OPENS THE DATA FILE 'F012P104.DAT' AND THE OUT FILE
C.....'F012P104.OUT'.
OPEN (1, FILE = 'F012P104.DAT')
OPEN (2, FILE = 'F012P104.OUT')
RETURN
END
SUBROUTINE INPUT_VALUES (ARRAY1, ARRAY2)
C.....THIS SUBROUTINE STORES THE DATA VALUES IN A 2 2-DIMENSIONAL ARRAY
C.....(THE INTEGER VALUES IN ONE AND THE CHARACTER VALUES IN ANOTHER).
REAL ARRAY1 (5, 8)
CHARACTER*1 ARRAY2 (5, 2)
DO 10 J = 1, 5
READ (1, 100) (ARRAY1 (J, K), K = 1, 3)
100 FORMAT (3F8.2)
10 CONTINUE
REWIND 1
DO 20 J = 1, 5
READ (1, 200) (ARRAY2 (J, K), K = 1, 2)
200 FORMAT (24X, 2A8)
20 CONTINUE
RETURN
END
SUBROUTINE CALCULATE_DEPTLATI (ARRAY1, ARRAY2)
C.....THIS PROGRAM CALCULATES THE AZIMUTH, DEPARTURE, AND LATITUDE PARTS OF THE
C.....2-DIMENSIONAL REAL ARRAY.
REAL ARRAY1 (5, 8), PI
CHARACTER*1 ARRAY2 (5, 2)
PI = 3.141593
DO 10 J = 1, 5
ARRAY1 (J, 4) = ARRAY1 (J, 2) + ARRAY1 (J, 3) / 60.0
IF (ARRAY2 (J, 1).EQ.'N'.AND.ARRAY2 (J, 2).EQ.'E') THEN
ARRAY1 (J, 4) = ARRAY1 (J, 4)
ELSE
IF (ARRAY2 (J, 1).EQ.'S'.AND.ARRAY2 (J, 2).EQ.'E') THEN
ARRAY1 (J, 4) = 180 - ARRAY1 (J, 4)
ELSE
IF (ARRAY2 (J, 1).EQ.'S'.AND.ARRAY2 (J, 2).EQ.'W') THEN
ARRAY1 (J, 4) = 180.0 + ARRAY1 (J, 4)
ELSE
ARRAY1 (J, 4) = 360.0 - ARRAY1 (J, 4)
ENDIF
ENDIF
ENDIF
ARRAY1 (J, 5) = ARRAY1 (J, 1) * SIN (ARRAY1 (J, 4) * PI / 180.0)
ARRAY1 (J, 6) = ARRAY1 (J, 1) * COS (ARRAY1 (J, 4) * PI / 180.0)
10 CONTINUE
RETURN
END
SUBROUTINE CALCULATE_CLOSURE (ARRAY1, DCLOSE, LCLOSE)
C.....THIS SUBROUTINE CALCULATES THE ERROR OF CLOSURES FOR LATIUDE AND
C.....DEPARTURE.
REAL ARRAY1 (5, 8), DCLOSE, LCLOSE
DCLOSE = 0
LCLOSE = 0
DO 10 J = 1, 5
DCLOSE = DCLOSE + ARRAY1 (J, 5)
LCLOSE = LCLOSE + ARRAY1 (J, 6)
10 CONTINUE
RETURN
END
SUBROUTINE CALCULATE_COORDINATES (ARRAY1)
C.....THIS SUBROUTINE CALCULATES THE X AND Y COORINATES AND STORES THEM IN
C.....THE 2-DIMENSIONAL REAL ARRAY.
REAL ARRAY1 (5, 8)
ARRAY1 (1, 7) = 10000.0
ARRAY1 (1, 8) = 50000.0
DO 10 J = 2, 5
ARRAY1 (J, 7) = ARRAY1 (J - 1, 7) + ARRAY1 (J - 1, 5)
ARRAY1 (J, 8) = ARRAY1 (J - 1, 8) + ARRAY1 (J - 1, 6)
10 CONTINUE
RETURN
END
SUBROUTINE PRINT_RESULTS (ARRAY1, DCLOSE, LCLOSE, COUNT)
C.....THIS PROGRAM PRINTS THE INITIAL AND THE ENDING VALUES OF THE ARRAY.
INTEGER COUNT
REAL ARRAY1 (5, 8), DCLOSE, LCLOSE
IF (COUNT.NE.0) THEN
WRITE (2, 100) 'F012 ANTHONY F. ORTIZ **P104**'
WRITE (2, 100) ' BEFORE CORRECTIONS'
ELSE
WRITE (2, 100) ' AFTER CORRECTIONS'
100 FORMAT (20X, A, /)
ENDIF
COUNT = 0
WRITE (2, 200) 'POINT', 'LENGTH', 'AZIMUTH', 'DEPARTURE',
$'LATITUDE', 'X', 'Y'
200 FORMAT (1X, A, 4X, A, 6X, A, 4X, A, 3X, A, 6X, A, 11X, A, /)
DO 10 J = 1, 5
WRITE (2, 300) J, ARRAY1 (J, 1), ARRAY1 (J, 4), ARRAY1 (J, 5),
$ ARRAY1 (J, 6), ARRAY1 (J, 7), ARRAY1 (J, 8)
300 FORMAT (1X, I3, 6F12.2)
10 CONTINUE
WRITE (2, 400) 'CLOSURE (DEPARTURE) = ', DCLOSE
WRITE (2, 400) 'CLOSURE (LATITUDE) = ', LCLOSE
400 FORMAT (/, 1X, A, F8.2)
RETURN
END
SUBROUTINE MAKE_CORRECTIONS (ARRAY1, DCLOSE, LCLOSE)
C.....THIS PROGRAM MAKES THE CORRECTIONS TO THE INITIAL DATA VALUES.
REAL ARRAY1 (5, 8), DCLOSE, LCLOSE, TOTAL, PI
TOTAL = 0
PI = 3.141593
DO 10 J = 1, 5
TOTAL = TOTAL + ARRAY1 (J, 1)
10 CONTINUE
DO 20 J = 1, 5
ARRAY1 (J, 5) = ARRAY1 (J, 5) - (DCLOSE * ARRAY1 (J, 1) / TOTAL)
ARRAY1 (J, 6) = ARRAY1 (J, 6) - (LCLOSE * ARRAY1 (J, 1) / TOTAL)
ARRAY1 (J, 4) = ASIN (ARRAY1 (J, 5) / ARRAY1 (J, 1)) * 180.0
$ / PI
20 CONTINUE
RETURN
END
C....OUTFILE: F012P104.DAT
285.10 26.00 10.00 N E
610.45 75.00 25.00 S E
720.48 15.00 30.00 S W
203.00 15.00 30.00 N W
647.02 53.00 6.00 N W
C.....OUTFILE: F012P104.OUT
F012 ANTHONY F. ORTIZ **P104**
BEFORE CORRECTIONS
POINT LENGTH AZIMUTH DEPARTURE LATITUDE X Y
1 285.10 26.17 125.72 255.88 10000.00 50000.00
2 610.45 104.58 590.78 -153.70 10125.72 50255.88
3 720.48 195.50 -192.54 -694.28 10716.51 50102.18
4 203.00 344.50 -54.25 195.62 10523.97 49407.90
5 647.02 306.90 -517.41 388.48 10469.72 49603.52
CLOSURE (DEPARTURE) = -47.69
CLOSURE (LATITUDE) = -8.00
AFTER CORRECTIONS
POINT LENGTH AZIMUTH DEPARTURE LATITUDE X Y
1 285.10 27.41 131.24 256.81 10000.00 50000.00
2 610.45 80.80 602.59 -151.72 10131.24 50256.80
3 720.48 -14.35 -178.61 -691.94 10733.83 50105.08
4 203.00 -14.35 -50.32 196.28 10555.22 49413.14
5 647.02 -51.29 -504.90 390.58 10504.90 49609.41
CLOSURE (DEPARTURE) = .00
CLOSURE (LATITUDE) = .00
BACK TO COMP150 PAGE.