Advertisement
EgorYankovsky

PV2

Feb 20th, 2022 (edited)
1,196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. c     Main part
  2.       PROGRAM main
  3.  
  4.       COMMON /const/ rad
  5.       COMMON /input/ Xmin, Xmax, Xstep, Ymin, Ymax, Ystep
  6.  
  7.       rad = 3.1415927 / 180
  8.       PRINT *, rad
  9.  
  10.       CALL inputf
  11.       CALL outputf
  12.       END
  13.  
  14. c     Input values from file
  15.       SUBROUTINE inputf
  16.  
  17.       COMMON /const/ rad
  18.       COMMON /input/ Xmin, Xmax, Xstep, Ymin, Ymax, Ystep
  19.  
  20.       OPEN (1, FILE='input.txt', ACTION='READ', STATUS='OLD', ERR=1)
  21.       READ (1, *, ERR=1) Xmin, Xmax, Xstep, Ymin, Ymax, Ystep
  22.       IF (Xmin .GT. Xmax .OR. Ymin .GT. Ymax) GOTO 1
  23.       GOTO 2
  24.          
  25.     1 PAUSE 'Error: please check the input file'
  26.       STOP
  27.     2 END
  28.  
  29. c     Write cosec(x+y) result in output file
  30.       SUBROUTINE outputf
  31.  
  32.       COMMON /const/ rad
  33.       COMMON /input/ Xmin, Xmax, Xstep, Ymin, Ymax, Ystep
  34.  
  35.       OPEN (2, FILE='output.txt', ACTION='WRITE', ERR=3)
  36.  
  37. c     Draw the table top
  38.       WRITE (2, 13) '|   y\x    '
  39.       ri = Xmin
  40.       DO WHILE (ri .LT. Xmax)
  41.          WRITE (2, 10) ri * rad
  42.          ri = ri + Xstep
  43.       END DO
  44.       WRITE (2, 10) Xmax
  45.       WRITE (2, 13) '|'
  46.       WRITE (2, 14)
  47.  
  48. c     Peredelat'
  49.      
  50.       IF(MOD((Xmax - Xmin),Xstep).EQ.0)THEN
  51.         iparts = (Xmax - Xmin) / Xstep + 1
  52.       ELSE
  53.         iparts = (Xmax - Xmin) / Xstep + 2
  54.       ENDIF
  55.      
  56. c     Peredelat'
  57.      
  58.       DO i = 0, iparts, 1
  59.         WRITE (2, 12)
  60.       END DO
  61.       WRITE (2, 13) '|'
  62.       WRITE (2, 14)
  63.      
  64.      
  65.       ry = Ymin
  66.       DO WHILE(ry.LT.Ymax)
  67.         rx = Xmin
  68.         WRITE(2, 10) ry * rad
  69.         DO WHILE(rx.LT.Xmax)
  70.             IF(SIN(rx + ry).EQ.0) WRITE(2, 15) 'NaN'
  71.             IF(SIN(rx+ry).NE.0) WRITE(2, 10) 1 / SIN((rx + ry) * rad)
  72.             rx = rx + Xstep
  73.         END DO
  74.         WRITE(2, 10) 1 / SIN((rx + Ymax) * rad)
  75.         WRITE(2, 13) '|'
  76.         WRITE (2, 14)
  77.         ry = ry + Ystep
  78.         DO i = 0, iparts, 1
  79.             WRITE (2, 12)
  80.         END DO
  81.         WRITE (2, 13) '|'
  82.         WRITE (2, 14)
  83.       END DO
  84.      
  85.       WRITE(2, 10) Ymax
  86.       rx = Xmin
  87.         DO WHILE(rx.LT.Xmax)
  88.             WRITE(2, 10) 1 / SIN((rx + Ymax) * rad)
  89.             rx = rx + Xstep
  90.         END DO
  91.       WRITE(2, 10) 1 / SIN((Xmax + Ymax) * rad)
  92.       WRITE(2, 13) '|'
  93.       WRITE (2, 14)
  94.  
  95.       GOTO 4
  96.     3 PAUSE 'Error: please check the output file'
  97.       STOP
  98.  
  99.    10 FORMAT ('|'E9.4' '\)
  100.    11 FORMAT ('|'F11.4' '\)
  101.    12 FORMAT ('|'10('—')\)
  102.    13 FORMAT (a\)
  103.    14 FORMAT (/1x\)
  104.    15 FORMAT ('|'A9' '\)
  105.  
  106.     4 END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement