반응형

     정보

    • 업무명    : 2013년 2학기 전선 대기과학전산입문 이해

    • 작성자    : 이상호

    • 작성일    : 2020-02-23

    • 설   명     :

    • 수정이력 :

     

     

     내용

    [특징]

    • 대기과학전산입문에 대한 이해를 돕기위해 작성

     

    [기능]

    • Xmanager 사용 방법

    • Vi 편집기 명령어

    • Linux 설명

    • Fortran 설명, 규칙, 명령문 구조, 예제, 실전 문제

    • 대기과학전산입문 기출문제

     

    [활용 자료]

    • 인터넷 검색

     

    [사용법]

    • 대기과학전산입문 설명서를 통해 학습

    • 기출문제에서 적용

     

    [사용 OS]

    • Windows 10

     

    [사용 언어]

    • Fortran v90

    • 한글 v2018

     

     내용

    [Xmanager 사용 방법]

    • X-manager 실행

      • Windows 10에서 시작 모든 프로그램 Xmanager Enterprise Xstart (실행)

      • 세션           : 대기전산

      • 호스트        : 220.69.235.29

      • 프로토콜     : SSH

      • 사용자 이름 : 계정. 학번 8자리 (: 20100779)

      • 비밀번호     : 패스워드, 학번 4자리 (: 0779)

      • 실행 명령    : xterm(Linux)

     

     

    [패스워드 변경]

    • 사용자 이름 : 학번 8자리 (예: 20100779)

    • 패스워드 : 학번 뒤 4자리 (예: 0779)

    • 패스워드 변경: 로그인 후, passwd 각자 계정

    • 패스워드 변경 시 가능하면 8자 이상으로 설정

     

    [실습 자료]

    # 디렉토리 만들기
    [20100779@atmos7 ~]$ mkdir 2016
    
    # 디렉토리 삭제
    [20100779@atmos7 ~]$ rmdir 2016
    [20100779@atmos7 ~]$ mkdir 2016 	
    
    # 디렉토리 들어가기
    [20100779@atmos7 ~]$ cd 2016
    [20100779@atmos7 ~]$ mkdir 0310 
    [20100779@atmos7 ~]$ cd 0310
    
    # 목록 보기
    [20100779@atmos7 ~]$ ls –l 
    [20100779@atmos7 ~]$ ls
    
    # vi 편집기 열기
    [20100779@atmos7 ~]$ vi 1.f

     

    [프로그래밍 오류들]

    • 코딩된 프로그램 내에 문법상의 오류가 있다면, 컴파일 시 오류가 발생하고 해당 오류에 대한 정보가 나타난다. 그러한 정보를 바탕으로 프로그램을 수정하여 다시 컴파일 하여야 한다. 아래에 주어진 유형 외에도 수많은 오류가 발생하므로, 해당 오류의 문제점을 정확히 파악하고 수정하는 것이 중요하다.

    • 유형 1) 프로그램의 불일치

      • Fortran 프로그램의 시작과 끝을 알리는 PROGRAM문의 프로그램명이 불일치 나타나는 오류

    [Leesangho@ARL0 Fortran]$ pgf90 2.f90
    PGF90-F-0002-Unable to open source input file: 2.f90
    PGF90/x86-64 Linux 12.8-1: compilation aborted
    [Leesangho@ARL0 Fortran]$

     

    • 유형 2) 선언되지 않은 변수의 사용

      • 선언부에서 선언되지 않은 변수를 실행부에서 사용하였을 때 나타나는 오류

    [Leesangho@ARL0 Fortran]$ pgf90 1.f90
    PGF90-S-0038-Symbol, b, has not been explicitly declared (1.f90)
      0 inform,   0 warnings,   1 severes, 0 fatal for MAIN
    [Leesangho@ARL0 Fortran]$

     

    • 유형 3) 문법상의 오류 (Syntax error)

      • 포트란 문법상의 오류가 있는 라인을 알려줌.

      • 1. 짝이 맞지 않은 괄호의 사용

        • 수치연산 부분이나 기타 프로그램 문법 중 짝을 이루지 않는 괄호가 있을 때 나타나는 오류

    [Leesangho@ARL0 Fortran]$ pgf90 1.f90
    PGF90-S-0023-Syntax error - unbalanced parentheses (1.f90: 9)
      0 inform,   0 warnings,   1 severes, 0 fatal for MAIN
    [Leesangho@ARL0 Fortran]$

     

      • 2. 쉼표와 시작 라인의 잘못된 입력

        • 쉼표의 생략이나 중복에 의해 나타나는 오류 및 시작 라인의 칸 수가 맞지 않아 나타나는 오류

    [Leesangho@ARL0 Fortran]$ pgf90 1.f90
    PGF90-S-0034-Syntax error at or near identifier a (1.f90: 9)
      0 inform,   0 warnings,   1 severes, 0 fatal for MAIN
    [Leesangho@ARL0 Fortran]$

     

    • 유형 4) .swp 파일 생성

      • vi에서 파일을 편집하면 저장을 하기 전까지의 모든 내용을 메모리에 일시 저장한다.  간혹, vi로 파일 편집 중 터미널 자체를 종료하는 경우가 있다.  이때 해당 파일이 저장되지 않았으므로 vi는 변경된 내용을 유지하기 위해 스왑(.swp) 파일을 생성함.

    [20100779@atmos7 ~]$ vi 1.f
    E325: ATTENTION
    Found a swap file by the name ".1.f90.swp"
              owned by: sate   dated: Sun Jul  3 22:20:21 2016
             file name: /user4/LSH/1.f90
              modified: no
             user name: sate   host name: atmos7
            process ID: 7770 (still running)
    While opening file "1.f90"
                 dated: Wed Apr 20 00:55:13 2016
    
    (1) Another program may be editing the same file.  If this is the case,
        be careful not to end up with two different instances of the same
        file when making changes.  Quit, or continue with caution.
    (2) An edit session for this file crashed.
        If this is the case, use ":recover" or "vim -r 1.f90"
        to recover the changes (see ":help recovery").
        If you did this already, delete the swap file ".1.f90.swp"
        to avoid this message.
    
    Swap file ".1.f90.swp" already exists!
    [O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
    
    위와 같은 메시지가 보일 때, 아래와 같은 방법으로 해결.
    
    # .1.swp 때문에 오류 발생
    [20100779@atmos7 ~]$ ls –a
    [20100779@atmos7 ~]$ rm .1.f.swp       
    rm: remove regular file `.1.f.swp'?    y  
    [20100779@atmos7 ~]$ 

     

    [Vi 편집기 명령어]

    • 세부 내용은 대기과학전산입문 설명서 참조

     

    [Linux 설명]

    • OS (Operating System)

      • 운영체제, 컴퓨터 시스템의 전반적인 동작을 제어하고 조정하는 시스템 프로그램들의 집합

     

    • 유닉스 (Unix)

      • 미국 벨 연구소가 프로그래밍 연구와 개발을 촉진시킬 환경 조성을 목적으로 개발한 다수 사용자를 위한 운영체제

     

    • 리눅스 (Linux)

      • 대형 기종에서만 작동하던 운영체계인 ‘유닉스’를 386 기종의 개인용 컴퓨터에서도 작동 할 수 있게 만든 운영체제

     

    • 서버 (Server)

      • 고객이 원하는 정보를 제공해주는 컴퓨터나 소프트웨어

     

    • 터미널 (Terminal)

      • 서버에 접속하여 시스템에 데이터를 입력하거나 표시하는데 쓰이는 프로그램들의 통칭 (예 : Xmanager, Putty 등)

     

    • TELNET (Telecommunication Network) and SSH (Secure SHell)

      • 인터넷을 통하여 원격지의 호스트 컴퓨터에 접속할 때 지원되는 인터넷 표준 프로토콜. 기술적으로 말하면 원격지 컴퓨터를 엑세스하기 위한 사용자 명령어들과 TCP/IP 기반의 프로토콜을 말함.

     

    • FTP (File Transfer Protocol)

      • 인터넷상에서 한 컴퓨터에서 다른 컴퓨터로 파일 전송을 지원하는 통신규약.  어떤 한 컴퓨터에 원격으로 접속하여 파일을 주고받는 것을 목적으로 함.

     

    [Linux 편집기 설명]

    • 세부 내용은 대기과학전산입문 설명서 참조

     

    [Vi / Linux / Fortran Tip]

    •  주석 (10행 이상을 주석 처리할 때)

      • 처리 : Esc (Insert 상태 X) → Ctrl+V (방향키로 범위 설정) → Shift+i → c (주석 처리) or 사용할 문자 → Esc

      • 취소 : Esc (Insert 상태 X) → Ctrl+V (방향키로 범위 설정) → x

     

    • 되돌리기 (삭제한 후에 복원시키고 싶을 때

      • Esc (Insert 상태 X) → u

      • Esc (Insert 상태 X) → .(온점)

     

    • Tab 키 이용

      • Vi 편집기에서 들여쓰기 이용

      • 리눅스 사에서는 자동완성 기능

     

    • Xterm 창에서 글자 크게

      • Ctrl + 마우스 오른쪽 (누른 채로 계속) → Huge

     

    • 작업 중지 (리눅스 명령어와 실행 파일)

      • Ctrl + c

     

    [Fortran 설명]

    • Fortran은 1954년 IBM 704 과학적인 계산을 하기 위해 시작된 컴퓨터 프로그램 언어 (가장 오래된 저급 언어)

    • 수식 (Formular) 변환기(Translator)의 약자

    • 당시 7명의 전문가가 약 2년 반 동안에 걸쳐 완선된 것이 포트란의 기본을 이루었고 그 후 ANSI에서 이를 수정하고 능력을 확장시켜 포트란을 완성

    • 포트란은 산술 기호(+, - 등)를 그대로 사용할 수 있으며, 삼각함수∙지수함수 등과 같은 기초적인 수학 함수들을 쓸 수 있는 언어

    • 쉽고 간단한 문법과 명령어, 단기간에 활용가능, 명령은 문장으로 표현, 문장은 실행문과 비 실행문으로 구성

    • 많은 입∙출력을 요구하는 문제보다는 많은 양의 계산이 필요한 공학, 통계학, 수학 그리고 대기과학 등에 널리 사용

     

    [Fortran 컴파일/실행]

    • 컴파일의 의미

      • 사용자가 작성한 소스 코드를 컴퓨터가 실행 가능하도록 바이너리화 (0 or 1) 하는 과정

     

    • 컴파일러

      • 컴파일 작업을 수행해 주는 역할

      • 사용하는 언어의 종류에 따라 표준화 되어 있으며, 제작 업체별로 다양한 버전 존재

     

    • 대표적인 Fortran 컴파일러 속도

      • ifort (intel) ≒ xlf (IBM) > pgf90 (PGI) >> gfortran (GNU)

     

    • 컴파일 및 실행 명령어

      • pgf77 파일명.f ; a.out  (표준)

      • pgf90 파일명.f90 ; a.out  (표준)

      • pgf90 파일명.f ; a.out

     

    [Fortran 77과 Fortran 90의 차이]

    • Fortran 77의 단점

     

     

    • Fortran 90의 장점

     

    [Fortran 규칙]

     

    [Fortran 명령문 구조]

     

     

     

     

     

    • 산술 연산자와 계산 우선순위

     

     
     
     

    [Fortran 예제]

    • 기초 지식

      • 변수 설정 (정수, 실수, 문자)

      • 형변환

      • 반복문

      • 조건문

      • 출력 형식

          integer(kind=4) :: a, b, c, d, e, Total, Mean  
          ! integer(4)     integer*4
          real(kind=4) :: a2, b2, c2, d2, e2, Total2, Mean2        
          ! real(4)        real*4
          character(len=100) :: my*2, names*5, is*2, lee*3, &
                                sang*4, ho*2, sentence           
          ! character(16)   character*16
          integer(kind=4) :: real_goto_integer
          real(kind=4)    :: integer_goto_real
          integer(kind=4) :: i, j
          real(kind=4)    :: wa, avg, wa2, avg2
          real(kind=4)    :: wc
    
          write(*,*) '!==================================='
          write(*,*) '!           1. Integer              '
          write(*,*) '!==================================='
    
          a=1  ;  b=2  ; c=3  ; d=4 ; e=5
    
          Total = a+b+c+d+e
          Mean = Total/4
    
          write(*,*) 'a, b, c, d, e'
          write(*,*) a, b, c, d, e
          write(*,*) 'Total, Mean'
          write(*,*) Total, Mean
    
          write(*,*) '!==================================='
          write(*,*) '!           2. Real                 '
          write(*,*) '!==================================='
    
          a2=1.0  ;  b2=2.0  ; c2=3.0  ;  d2=4.0  ;  e2=5.0
             
          Total2 = a2+b2+c2+d2+e2
          Mean2 = Total2/5.0
    
          write(*,*) 'a2, b2, c2, d2, e2'
          write(*,*) a2, b2, c2, d2, e2
          write(*,*) 'Total2, Mean2'
          write(*,*) Total2, Mean2
    
          write(*,*) '!==================================='
          write(*,*) '!           3. Character            '
          write(*,*) '!==================================='
       
          my='My'  ;  names='Names'  ;  is='is'
          lee='Lee'  ;  sang='Sang'  ;  ho='Ho' 
                
          sentence = 'My Names is Lee Sang Ho'
    
          write(*,*) my, names, is, lee, sang, ho
          write(*,*) my, ' ', names, ' ', is, ' ', lee, ' ', sang, ' ', ho
          write(*,*) sentence
          write(*,*) 'My Names is Lee Sang Ho'         ! 추천
    
          write(*,*) '!==================================='
          write(*,*) '!        4. Integer --> Real        '
          write(*,*) '!           Real    --> Integer     '
          write(*,*) '!==================================='
    
          ! Mean   (Integer)
          integer_goto_real = real(Mean)
          ! Mean2  (Real)
          real_goto_integer = int(Mean2)
          
          write(*,*) 'integer_goto_real'
          write(*,*) integer_goto_real
          write(*,*) 'real_goto_integer'
          write(*,*) real_goto_integer
          
          write(*,*) '!==================================='
          write(*,*) '!           5. Do (1, 2)            '
          write(*,*) '!==================================='
                
          write(*,*) '******  Do (1)  ***** '
    
          wa = 0
    
          do i=1, 5, 1
             wa=wa+real(i)  
             write(*,*) wa, i
          end do
          
          avg = wa/real(i-1)
          write(*,*) i-1, wa, avg
    
          write(*,*) '****** Do while (2) ******'
          
          j=1
          wa2=0.0
          
          do while(j <= 5)
             wa2 = wa2+real(j)
             write(*,*) wa2, j
             j=j+1
          end do
    			  
          avg2 = wa2/real(j-1)
          write(*,*) j-1, wa2, avg2
    
          write(*,*) '!==================================='
          write(*,*) '!           6. If (1, 2, 3)         '
          write(*,*) '!==================================='
    
    		write(*,*) '******  If then (1)  ****** '
               
          wc=0.
    
          do i=1, 10
             if(i == 6) exit
    
             write(*,*) '   Before'
             write(*,*) i
             
             if(i > 4) cycle
    
             write(*,*) '   After'
             write(*,*) ' ----------------------'
    
             wc = wc+real(i)
          enddo
          write(*,*) wc
       
    		write(*,*) '******  If then / else / endif (2)  ****** '
    	 
          do i=1, 10
             if(i >= 5) then   
                write(*,*) '         i >= 5', i
             else
                write(*,*) 'i < 5', i
             endif
          enddo
          
          write(*,*) '******  If then / else if / endif (3)  ******'
          do i=1, 10
             if(i <= 3) then   
                write(*,*) '      i <= 3', i
             else if(i <= 7) then
                write(*,*) '   3 <= i <= 7', i
             else
                write(*,*) 'i >= 8', i
             endif
          enddo
    
    	   write(*,*) '!==================================='
    	   write(*,*) '!           7. Format               '
    	   write(*,*) '!==================================='
          
          write(*,*) '*********  Standard Format  *********'
    
          write(*,1) 'a, b, c, d, e'
    1     format(a20)
          
          write(*,2) a, b, c, d, e
    2     format(5i10)
          
          write(*,3) Total, Mean
    3     format(2i10)
          
          write(*,4) Total2, Mean2
    4     format(2f10.2)
    
    		write(*,*) '**********  Simple Format  *********'      
    		write(*,'(a20)') 'a, b, c, d, e'
    		write(*,'(5i10)') a, b, c, d, e
    		write(*,'(2i10)') Total, Mean
    		write(*,'(2f10.2)') Total2, Mean2
    
    	   end
     
     

    [Fortran 실전문제]

    • 문제 : 대기과학전산입문 설명서 참조

      • 1) 다음과 같은 공식을 이용하여 섭씨 온도가 0 ℃와 100 ℃ 일 때, 화씨 온도 (℉)를 출력하시오.

      • 2) 다음과 같은 포맷으로 출력하시오.

      • 3) "   " 안에 있는 숫자와 문자를 각각 지정하여 출력하시오.

      • 4) 반지름 (R = 8.33)인 원의 넓이를 출력하시오 (단, 유효숫자는 소수점 둘째자리까지).

      • 5) 다음과 같은 그림을 통하여 A, B를 출력하시오. 또한, A2+B2가 C2 임을 출력하시오 (단, 소수점 둘째자리까지).

      • 6) 다음과 같은 방정식을 이용하여 근을 출력하시오 (단, 소수점 둘째자리까지).

      • 7) 나는 사과 100개월 가지고 있다. 이 중에서 22개는 먹고, 나머지 사과는 친구 4명과  동일하게 나누었다. 이때, 몇 개씩 나누었고 남은 사과가 몇 개인지를 출력하시오  (단, mod 함수를 이용).

      • 8) 다음과 같은 수식을 출력하시오 (단, 소수점 둘째자리까지).

      • 9) 구구단에서 1, 2, 3, 4, 5단의 합을 각 단에 대해서 출력하시오.

      • 10) parameter문을 이용하여 4개의 숫자(2, 4, 9, 12)를 출력하고 이 숫자들의 합과 곱을 출력하시오.

      • 11) do문을 이용하여 다음과 같은 함수식을 x, cos (x), cos (2x), y으로 출력하시오 (단, x는 0에서 360까지, 8 간격).

      • 12) 4.0 L인 물을  0.4 L씩 뺄 때, 0 L가되려면 몇 번 빼야하는지 출력하시오 (단, 순서에 맞게 출력).

      • 13) 1 + 2 + 3 + ... + 10000 까지의 합계를 구할 때, 배열을 이용하여 1000번째마다의 항을 출력하시오 (단, Subroutine을 이용). 

      • 14) 아래와 같은 문자를 읽고 다음과 같은 결과 형식으로 출력하시오. 
               문자 : “ABCDEFG”

      • 15) 연수입이 1000, 4000, 6000만원 일때, 다음 표에 의하여 세금을 출력하시오.

      • 16) 데이터를 읽고 점수에 맞게 학점을 출력하시오(0~60점 : F, 61~70점 : D,  
        71~80점 : C, 81~90점 : B, 91~100점 : A).

      • 17) 다음과 수식을 계산하여 출력하시오.

      • 18) 다음 표에서 키 (x)와 몸무게 (y)의 상관계수 (R)을 출력하시오.

      • 19) DO와 IF 문을 이용하여 데이터를 읽고 최대값, 최소값을 구하고 오름차순으로 출력하시오.

      • 20) DO 문을 이용하여 데이터를 읽고 평균, 분산, 표준편차로 출력하시오.

     

    • 답변 : 문제에 대한 소스 코드 첨부

    • 답변 1-4번

          integer :: a1, a2, a3
          real :: c1, c2, f1, f2, R
          real(8) :: n
          character :: e1*1, e2*4, e3*5, e4*3
    
          write(*,*) '===================================='
          write(*,*) '         1. Examination                  '  
          write(*,*) '===================================='
          c1 = 0.
          c2 = 100.
          f1 = ((9./5.)*c1) + 32.
          f2 = ((9./5.)*c2) + 32.
          write(*,*) c1, f1
          write(*,*) c2, f2
    
          write(*,*) '===================================='
          write(*,*) '         2. Examination                  '  
          write(*,*) '===================================='
          write(*,*) ' *   *'
          write(*,*) '* * * *'
          write(*,*) '*  *  *'
          write(*,*) ' *   *'
          write(*,*) '  * *'
          write(*,*) '   *'
    
          write(*,*) '===================================='
          write(*,*) '         3. Examination                  '  
          write(*,*) '===================================='
          a1 = 10
          a2 = 4078
          a3 = 7412
          e1 = '-'
          e2 = ' Lee'
          e3 = ' Sang'
          e4 = ' Ho'
          write(*,3) a1, e1, a2, e1, a3, e2, e3, e4
    3     format(i2,a1,i4,a1,i4,a4,a5,a3)
    
          write(*,*) '===================================='
          write(*,*) '         4. Examination                  '  
          write(*,*) '===================================='
          R = 8.33d0
          n = 3.14d0*(R**2.d0)
          write(*,*) n
          write(*,4) n
    4     format(f10.2)
    
          end

     

    • 답변 5-8번

          real(4) a, b, c2, dtor
          real(4) d, e, f, g, Geun1, Geun2
          integer my, friend, my_apple, apple, Remainder
          real MT
    
          write(*,*) '===================================='
          write(*,*) '         5. Examination                  '  
          write(*,*) '===================================='
          dtor = 3.141592/180.0
          !dtor = ( 4.0*atan(1.0) )/180.
          a = 2.351*cos(35.0*dtor)
          b = 2.351*sin(35.0*dtor)
          c2 = a**2.0 + b**2.0
          write(*,'(4f10.2)') a, b, c2, (2.351**2.0)
    
          write(*,*) '===================================='
          write(*,*) '         6. Examination                   '  
          write(*,*) '===================================='
          e = 8.344
          f = 28.633
          g = 20.84
          d = (f**2.0)-(4.0*e*g)
          Geun1 = ( -f + sqrt(d) )/(2*e)
          Geun2 = ( -f - sqrt(d) )/(2*e)
          write(*,*) Geun1, Geun2
    
          write(*,*) '===================================='
          write(*,*) '         7. Examination                   '  
          write(*,*) '===================================='
          my_apple = abs(100-22)
          my = 1
          friend = 4
    
          apple = my_apple/(my+friend)
          Remainder = mod(my_apple, my+friend)
    
          write(*,*) apple, Remainder
    
          write(*,*) '===================================='
          write(*,*) '         8. Examination                   '  
          write(*,*) '===================================='
          MT = sqrt( log(100.0) + exp( log10(3.0) )  )
    
          write(*,'(f10.2)') MT
    
          end

     

    • 답변 9-12번

          integer i, j, cc
          real wa, ii, water
          real num1, num2, num3, num4, Total, Mean
          real x, dtor, COSx, COS2x, Y
          real a, b, wb
          parameter(num1=2.0, num2=4.0, num3=9.0, num4=12.0)
    
          write(*,*) '===================================='
          write(*,*) '         9. Examination                  '
          write(*,*) '===================================='
          do i=1, 5
             wa = 0 
             do j=1, 9
                wa = wa + (i*j)
             enddo
                write(*,*) i, wa
          enddo
             
          write(*,*) '===================================='
          write(*,*) '         10. Examination                 '
          write(*,*) '===================================='
          Total = num1+num2+num3+num4  
          Mean = num1*num2*num3*num4
          write(*,*) Total, Mean
    
          write(*,*) '===================================='
          write(*,*) '         11 Examination                  '
          write(*,*) '===================================='
          do i=0, 360, 8
             x = real(i)
             dtor = 3.141592/180.0
             COSx = cos(x*dtor)
             COS2x = cos(2*x*dtor)
             Y = COSx+COS2x
             write(*,*) x, COSx, COS2x, Y
          enddo
    
          write(*,*) '===================================='
          write(*,*) '         12. Examination             '
          write(*,*) '===================================='   
          write(*,*) '***** 12.2 Exam  *******'
          water = 4.0
          do i=1, 10
             water = water - 0.4
             write(*,'(f10.2, i10)') water, i
          enddo
          write(*,*) '******  12.2 Exam  ******'
          cc=0
          do ii=4.0, 0.0, -0.4
             write(*,'(f10.2, i10)') ii, cc
             cc=cc+1
          enddo
    
          end

     

    • 답변 13-16번

          integer i, cc, a, wa
          dimension a(10)
          character*7 b
          real  c
          dimension c(3)
          integer e
          character*3 f, d
          dimension  d(3,3)
          dimension  e(3,5), f(3,5)
    
          write(*,*) '===================================='
          write(*,*) '         13. Examination            '
          write(*,*) '===================================='
    
          cc = 0  ;  wa = 0
          do i=1, 10000
             wa = wa + i
             if (mod(i,1000)==0) then
             cc=cc+1
             a(cc)=wa
             write(*,*) i, wa
             endif
          enddo
             
          write(*,*) '===================================='
          write(*,*) '         14. Examination                 '
          write(*,*) '===================================='
          b = 'ABCDEFG'
          do i=1, 7
             write(*,*) b(1:8-i)
          enddo
    
          write(*,*) '===================================='
          write(*,*) '         15. Examination                 '
          write(*,*) '===================================='
          data c/1000, 4000, 6000/
          do i=1, 3
             if (c(i)<2000.0) write(*,*) c(i), 0
             if (c(i)>=2000.0 .and. c(i)<5000.0) 
          &                     write(*,*) c(i), (c(i)-2000.0)*0.02
             if (c(i)>=5000.0) write(*,*) c(i), 60.+((c(i)-5000.0)*0.05)
          enddo
    
          write(*,*) '===================================='
          write(*,*) '         16. Examination                 '
          write(*,*) '===================================='
          open(10, file='DATA_Term05_4.dat')
          do i=1, 3
             read(10,*) d(i,1:3), e(i,1:5)
             do j=1,5
             if (e(i,j)>=0  .and. e(i,j)<=60) f(i,j)='F'
             if (e(i,j)>=61 .and. e(i,j)<=70) f(i,j)='D'
             if (e(i,j)>=71 .and. e(i,j)<=80) f(i,j)='C'
             if (e(i,j)>=81 .and. e(i,j)<=90) f(i,j)='B'
             if (e(i,j)>=91 .and. e(i,j)<=100) f(i,j)='A'
             enddo
             write(*,*) d(i,1:3),' ', f(i,1:5)
          enddo
    
          end

     

    • 답변 17-20번

          write(*,*) '===================================='
          write(*,*) '         17. Examination                 '
          write(*,*) '===================================='
          wa = 1.0
          wb = 0.0
          n = -1.0
          do i=1, 10
             wa = wa*i
             n = n*-1.0
             wb = wb + (n*(1.0/wa))
             write(*,*) i, wa, n, wb
          enddo
    
          write(*,*) '===================================='
          write(*,*) '         18. Examination                 '
          write(*,*) '===================================='
          open(10, file='DATA_Term06_2.dat')
          SUM_X = 0.0
          SUM_Y = 0.0
          do i=1,7
             read(10,*) x(i), y(i)
             SUM_X = SUM_X + x(i)  
             SUM_Y = SUM_Y + y(i)  
          enddo
    
          MEAN_X = SUM_X/real(i-1)
          MEAN_Y = SUM_Y/real(i-1)
          write(*,*) SUM_X, SUM_Y 
          write(*,*) MEAN_X, MEAN_Y 
          SUM_S1 = 0.0
          SUM_S2 = 0.0
          SUM_S3 = 0.0
          do i=1, 7
             SUM_S1 = SUM_S1 + ((x(i)-MEAN_X)*(y(i)-MEAN_Y))
             SUM_S2 = SUM_S2 + ((x(i)-MEAN_X)**2)
             SUM_S3 = SUM_S3 + ((y(i)-MEAN_Y)**2)
          enddo
          R = SUM_S1 / (sqrt(SUM_S2) * sqrt(SUM_S3))
          write(*,*) R
    
          write(*,*) '====================================='
          write(*,*) '         19. Examination                   '
          write(*,*) '====================================='
          open(11, file='DATA_Term06_3.dat')
          read(11,*) a(1:11)
          !      write(*,*) a(1:11)
          MAX_A = -999.0
          MIN_A = 999.0
          do i=1, 11  
             if (a(i)>MAX_A) MAX_A = a(i)
             if (a(i)<MIN_A) MIN_A = a(i)
          enddo
    
          write(*,*) MAX_A, MIN_A
          do i=1, 11
             do j=i+1, 11
                if(a(i) > a(j)) then
                sort=a(j)  ;  a(j)=a(i)  ;  a(i)=sort
                endif
             enddo
          enddo
          write(*,*)
          write(*,*) a(1:11)
    
          write(*,*) '===================================='
          write(*,*) '         20. Examination                 '
          write(*,*) '===================================='
          open(12, file='DATA_Term06_4.dat')
          read(12,*)  c(1:11)
    
          SUM_C = 0.0
          do i=1, 11
             SUM_C = SUM_C +c(i)
          enddo
          MEAN_C = SUM_C/real(i-1)
    
          SUM_C2 = 0.0
          do i=1, 11
             SUM_C2 = SUM_C2 + ((c(i)-MEAN_C)**2)
          enddo
          VAR_C = SUM_C2/real(i-1)
          SD_C = sqrt(VAR_C)
          write(*,*) MEAN_C, VAR_C, SD_C
          
          end

     

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

    [기상학/프로그래밍 언어]

    • sangho.lee.1990@gmail.com

    [해양학/천문학/빅데이터]

    • saimang0804@gmail.com
    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기