1. X-manager 사용방법
(전산실에서 접속 O, 외부에서 접속 X)
◆ X-manager 실행
windows상에서 시작 → 모든 프로그램 → Xmanager Enterprise → Xstart
(실행)
* 세션 : 대기전산 Ⅰ
* 호스트 : 220.69.235.29
* 프로토콜 : SSH
* 사용자 이름 : 계정. 학번 8자리 (예: 20100779)
* 비밀번호 : 패스워드, 학번 뒤 4자리 (예: 0779)
* 실행 명령 : xterm(Linux)
◆ 패스워드 변경
* 사용자 이름 : 학번 8자리 (예: 20100779)
* 패스워드 : 학번 뒤 4자리 (예: 0779)
* 패스워드 변경: 로그인 후, passwd 각자 계정
※ 패스워드 변경 시 가능하면 8자 이상으로 설정
◆ Fortran 명령어 Tip
1 … 5 6 7 … 72 …
! Example.f
&
1행에 문자 c 또는 !를 작성하면 주석 처리
integer a,b,c,d [정수 선언], Tap키 이용
a=1 ; b=2 [한 줄에 쓰기]
write(*,*) a,b
c=3
d=4
write(*,*) c,
d [줄 바꿈]
stop
end
: /a [아래에서 위로 찾기], :wq [저장 후 종료]
◆ 실습 자료
[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
[20100779@atmos7 ~]$ vi 1.f [vi 편집기 열기]
◆ Vi 편집기 Tip
숫자 + shift+g
shift+g
[숫자 행으로 가기]
[마지막행으로 가기]
yy + p
숫자 yy + p
[1줄 복사] + [붙여넣기]
[여러 줄 복사] + [붙여넣기]
dd
숫자 + dd
[1줄 삭제]
[여러 줄 삭제]
[20100779@atmos7 ~]$ pgf90 1.f [1.f 컴파일]
[20100779@atmos7 ~]$ a.out [실행]
1 2
3 4
FORTRAN STOP
[20100779@atmos7 ~]$ cp 1.f 3.f [1.f를 3.f로 복사]
[20100779@atmos7 ~]$ ls
[20100779@atmos7 ~]$ mv 3.f 2.f [1.f를 2.f로 변경]
[20100779@atmos7 ~]$ rm 2.f [2.f를 삭제]
rm: remove regular file `2.f'? y
[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]$
[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]$
◆ 프로그램 오류들
코딩된 프로그램 내에 문법상의 오류가 있다면, 컴파일 시 오류가 발생하고
해당 오류에 대한 정보가 나타난다. 그러한 정보를 바탕으로 프로그램을 수
정하여 다시 컴파일 하여야 한다. 아래에 주어진 유형 외에도 수많은 오류가
발생하므로, 해당 오류의 문제점을 정확히 파악하고 수정하는 것이 중요하
다.
유형 1) 프로그램의 불일치
Fortran 프로그램의 시작과 끝을 알리는 PROGRAM문의 프로그램명이 불일치
시 나타나는 오류
유형 2) 선언되지 않은 변수의 사용
선언부에서 선언되지 않은 변수를 실행부에서 사용하였을 때 나타나는
오류
유형 3) 문법상의 오류 (Syntax error)
포트란 문법상의 오류가 있는 라인을 알려줌.
[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]$
[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]$
[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
예1. 짝이 맞지 않은 괄호의 사용
수치연산 부분이나 기타 프로그램 문법 중 짝을 이루지 않는 괄호가
있을 때 나타나는 오류
예2. 쉼표와 시작 라인의 잘못된 입력
쉼표의 생략이나 중복에 의해 나타나는 오류 및 시작 라인의 칸 수가
맞지 않아 나타나는 오류
유형 4) .swp 파일 생성
vi에서 파일을 편집하면 저장을 하기 전까지의 모든 내용을 메모리에 일
시 저장한다. 간혹, vi로 파일 편집 중 터미널 자체를 종료하는 경우가 있
다. 이때 해당 파일이 저장되지 않았으므로 vi는 변경된 내용을 유지하기
위해 스왑(.swp) 파일을 생성함.
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:
위와 같은 메시지가 보일 때, 아래와 같은 방법으로 해결.
[20100779@atmos7 ~]$ ls –a [.1.swp 때문에 오류 발생]
[20100779@atmos7 ~]$ rm .1.f.swp
rm: remove regular file `.1.f.swp'? y
[20100779@atmos7 ~]$
2. Vi 편집기 명령어
커서이동
h 커서를 왼쪽으로 이동 [방향키 ←]
j 커서를 아래로 이동 [방향키 ↓]
k 커서를 위로 이동 [방향키 ↑]
l 커서를 오른쪽으로 이동 [방향키 →]
W,w
다음단어의 처음으로 이동 (대문자는 단어와 특수문자
기준)
E,e 단어의 끝으로 이동
B,b 단어의 처음으로 이동
숫자 0 행의 처음으로 이동 [Home]
$ 행의 마지막으로 이동 [End]
G 문서의 마지막으로 이동 (Shift + g)
12G 12행으로 이동 [12 Shift + g]
gg 문서의 처음으로 이동 (전체화면에서)
H 문서의 처음으로 이동 (현 화면에서)
M 문서의 중간으로 이동
L 문서의 마지막으로 이동
^ 행의 제일 앞으로 커서이동
명령모드
i 현재 위치에서 입력 모드로 변경
I 행의 제일 처음에서 입력 모드로 변경
a
현재 위치에서 우측으로 한 칸 이동 후 입력모드로 변
경
A 행의 제일 마지막에서 입력모드로 변경
o 커서 위치 글자 다음 줄에 입력가능
s 현재문자를 지우고 입력모드로 변경
S 현재 행의 모든 문자를 지우고 입력모드로 변경
x 커서가 있는 문자 삭제
X 커서가 있는 앞 문자 삭제
dd 현재 커서의 1행 삭제
숫자 dd
현재 커서부터 숫자만큼 행 삭제
ex) 10dd : 현재 커서부터 10줄 삭제
yy 현재 커서의 1행 복사
숫자 yy
현재 커서부터 숫자만큼의 행을 복사
ex) 10yy : 현재 커서부터 10줄 복사
p 복사한 내용을 붙여넣기
검색모드
/[찾을 단어] 단어를 아랫방향에서 위 방향으로 찾음 커서의 위치는 위쪽
?[찾을 단어] 단어를 위 방향에서 아랫방향으로 찾음 커서의 위치는 아래쪽
치환모드
:[라인]s/[원래단어]/[바꿀
단어]/[옵션]
원래 있던 단어를 바꿈
g옵션을 주면 적용되는 라인의 모든 부분을 변경
g옵션을 주지 않으면 처음 찾는 부분만 변경
:10s/a/b/g 10행만 a에서 b로 치환
:1,12s/a/b/g 1~12행만 a에서 b로 치환
:%s/a/b/g 전 범위를 a에서 b로 치환
창 나누기
Ctrl + wn 현재 화면을 수평으로 나누기
Ctrl + wv 현재 화면을 수직으로 나누기
Ctrl + ww 창간의 이동
파일관련
:e [파일이름] 파일 열기 (그 전의 내용은 저장 안 됨)
:enew 현재 창을 닫고 빈문서를 연다
:q 종료 (변경된 내용이 없는 경우)
:q! 강제종료 (변경된 내용이 있어도 무시)
:w 파일 저장
:wq 파일 저장 후 종료
:wq! 강제 파일 저장 후 종료 (shift + zz)
기타
:w >> [파일이름] 파일이름에 현재 내용 추가
:f 현재 작업 중인 파일의 이름과 라인 수
:set nu line number 활성화
:set nonu line number 비활성화
3. Linux 설명
● OS (Operating System)
운영체제, 컴퓨터 시스템의 전반적인 동작을 제어하고 조정하는 시스템
프로그램들의 집합
● 유닉스 (Unix)
미국 벨 연구소가 프로그래밍 연구와 개발을 촉진시킬 환경 조성을 목적
으로 개발한 다수 사용자를 위한 운영체제
● 리눅스 (Linux)
대형 기종에서만 작동하던 운영체계인 ‘유닉스’를 386 기종의 개인용 컴
퓨터에서도 작동 할 수 있게 만든 운영체제
● 서버 (Server)
고객이 원하는 정보를 제공해주는 컴퓨터나 소프트웨어
● 터미널 (Terminal)
서버에 접속하여 시스템에 데이터를 입력하거나 표시하는데 쓰이는 프로
그램들의 통칭 (예 : Xmanager, Putty 등)
● TELNET (Telecommunication Network) and SSH (Secure SHell)
인터넷을 통하여 원격지의 호스트 컴퓨터에 접속할 때 지원되는 인터넷
표준 프로토콜. 기술적으로 말하면 원격지 컴퓨터를 엑세스하기 위한 사용자
명령어들과 TCP/IP 기반의 프로토콜을 말한다.
● FTP (File Transfer Protocol)
인터넷상에서 한 컴퓨터에서 다른 컴퓨터로 파일 전송을 지원하는 통신
규약. 어떤 한 컴퓨터에 원격으로 접속하여 파일을 주고받는 것을 목적으로
함.
4. Linux 편집기 명령
pwd 현재위치 절대경로 보여줌
cat [파일명] 텍스트로 작성된 파일을 화면에 출력
more [파일명]
텍스트로 작성된 파일을 화면에 페이지 단위로 출력
[Space]키는 다음 페이지, [b]는 앞 페이지
history 계정 사용자가 사용했던 명령어기록을 보여줌
mkdir [디렉토리 명]
디렉토리를 새로 만들 때 사용.
생성된 디렉토리는 명령어를 수행한 사용자의 소유가 됨.
rmdir [디렉토리 명] 디렉토리를 삭제 할 때 사용.
df (또는 df x) 장치 x의 남은 공간 보여주기
top 메모리 상태 보여주기 (q는 종료)
touch abc.txt
파일이 없을 경우엔 abc.txt라는 빈파일 생성
abc.txt가 있을 경우엔 파일의 수정날짜를 변경시킴
man x 명령어 x에 관한 매뉴얼 페이지 얻기 (q는 종료)
who 현재 시스템에 login하고 있는 사용자의 리스트를 보여줌
mkdir : make directories
rmdir : remove empty directories
man : manual
ls 명령어 현재 디렉토리의 파일목록
ls -a 현재 디렉토리의 목록(숨김파일 포함)
ls -l 현재 디렉토리의 목록을 자세히 보여줌
ls *.txt 확장자가 txt인 목록을 보여줌
ls –l /usr/bin/a
/usr/bin/디렉토리에 있는 목록 중 앞글자가 ‘a’인 것의
목록을 자세히
ls : list directories contents
cd 명령어 사용자의 홈디렉토리로 이동
cd ~john john 사용자의 홈디렉토리로 이동(대개 /home/john/)
cd .. ‘..’은 현재 디렉토리의 상위디렉토리를 의미
cd /usr/bin ‘/usr/bin’ 디렉토리로 이동 (절대경로)
cd /root cd ../usr/bin : 상대경로로 이동
rm 명령어 파일이나 디렉토리 삭제 명령어
rm abc.txt abc.txt를 그냥 삭제
rm –i abc.txt 삭제시 확인
rm –r abc 디렉토리 삭제
rm –rf abc abc디렉토리와 그 하부를 강제로 전부 삭제
rm : remove files or directories
mv 명령어
파일과 디렉토리의 이름변경이나 위치이동때
사용
mv [이동할 파일] [위치] 파일 위치이동
mv [원본파일이름] [변경할 파일이름] 파일이름 변경
mv : move files
cp 명령어
파일이나 디렉토리 복사 명령어,
새로 복사한 파일은 사용자의 소유가 됨
cp abc.txt fgh.txt abc.txt 파일을 fgh.txt란 이름으로 복사
cp –r abc fgh abc 디렉토리를 fgh란 이름으로 복사
cp /home/test/*.* . test 디렉토리내의 모든파일을 현 디렉토리로 복사
cp : copy files or directories
ln 명령어
Windows의 ‘바로가기 아이콘’과 비슷한 것을 만들어 줌
심볼릭링크와 하드링크가 있음
ln –s aaa.txt bbb.txt
심볼릭링크
- Windows의 바로가기아이콘과 비슷
- 주로 사용자가 많이 사용하는 링크
- 긴 디렉토리명을 이동시 유용함
- 원본을 다른 곳으로 이동시키면 사용 못함
- 새로운 inode생성
- 원본자체를 가리키는 포인터 역할 뿐이므로, 원본 수
정 시
당연히 수정된 파일이 보임
- 원본의 삭제시 링크가 끊김
- 파일시스템이 달라도 관계없음
ln aaa.txt bbb.txt
하드링크
- 동일한 inode 사용
- 원본 수정시 하드링크도 수정됨
- 원본 삭제 시 살아있음
- 동일한 파일시스템에만 적용됨
- 파일복사와 차이는 공간을 차지하지 않는 것임
cal 명령어 서기 원년부터 9999년까지의 달력을 볼 수 있음
cal 현재 달력을 볼 수 있음
cal [연도] 입력한 연도의 1~12월 달력을 볼 수 있음
cal [월] [연도] 입력한 연도, 월의 달력을 볼 수 있음
◆ 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) → .(온점)
● Tap 키 이용
vi 편집기에서 들여쓰기 이용
리눅스 상에서는 자동완성기능
● xterm 창에서 글자 크게 하기
Ctrl + 마우스 오른쪽 (누른 채로 계속) → Huge
● 작업 중지 (리눅스 명령어와 실행파일)
Ctrl + c
5. Fortran 설명
● Fortran은 1954년 IBM 704 과학적인 계산을 하기 위해 시작된 컴퓨터 프
로그램 언어 (가장 오래된 저급 언어)
● 수식 (Formular) 변환기(Translator)의 약자
● 당시 7명의 전문가가 약 2년 반 동안에 걸쳐 완선된 것이 포트란의 기본
을 이루었고 그 후 ANSI에서 이를 수정하고 능력을 확장시켜 포트란을 완성
● 포트란은 산술 기호(+, - 등)를 그대로 사용할 수 있으며, 삼각함수∙지수함
수 등과 같은 기초적인 수학 함수들을 쓸 수 있는 언어
● 쉽고 간단한 문법과 명령어, 단기간에 활용가능, 명령은 문장으로 표현, 문
장은 실행문과 비 실행문으로 구성
● 활용 영역
많은 입∙출력을 요구하는 문제보다는 많은 양의 계산이 필요한 공학, 통
계학, 수학 그리고 대기과학 등에 널리 사용
● Fortran 77, Fortran 90, Fortran 95, Fortran 2003, Fortran 2008
[참고문헌 : https://ko.wikipedia.org/wiki/%ED%8F%AC%ED%8A%B8%EB%9E%80]
6. 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
7. Fortran 77과 Fortran 90의 차이
◆ Fortran 77의 단점
◆ Fortran 90의 장점
8. Fortran 규칙
9. Fortran 명령문 구조
◆ 산술 연산자와 계산 우선순위
기호 우선순위 이름 수학식
포트란
표현식
( ) 1 괄호 × a + b*(x+y)
** 2 거듭제곱 
x**a
*
3
곱셈 × a * b
/ 나눗셈  a / b
+
4
덧셈  a + b
- 뺄셈  a - b
10. 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
10. Fortran 실전문제
1. 다음과 같은 공식을 이용하여 섭씨 온도가 0 ℃와 100 ℃ 일 때, 화씨 온도 (℉)를 출력
하시오.
  

  
2. 다음과 같은 포맷으로 출력하시오.
1 2 3 4 5 6 7
1 * *
2 * * * *
3 * * *
4 * *
5 * *
6 *
3. “ ” 안에 있는 숫자와 문자를 각각 지정하여 출력하시오.
“010-1592-8282 Lee Sun Sin”
4. 반지름( = 8.33)인 원의 넓이를 출력하시오. (단, 유효숫자는 소수점 둘째자리까지)
원의 넓이 = 
(  )
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. 다음과 같은 그림을 통하여 A, B를 출력하시오. 또한, A
2
+B
2
가 C
2
임을 출력하시
오 (단, 소수점 둘째자리까지).
6. 다음과 같은 방정식을 이용하여 근을 출력하시오 (단, 소수점 둘째자리까지).

           
근 1 = 
 

, 근 2 = 
 

7. 나는 사과 100개월 가지고 있다. 이 중에서 22개는 먹고, 나머지 사과는 친구
4명과 동일하게 나누었다. 이때, 몇 개씩 나누었고 남은 사과가 몇 개인지를
출력하시오 (단, mod 함수를 이용).
8. 
log 
log
을 출력하시오 (단, 소수점 둘째자리까지).
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. 구구단에서 1, 2, 3, 4, 5단의 합을 각 단에 대해서 출력하시오.
10. parameter문을 이용하여 4개의 숫자(2, 4, 9, 12)를 출력하고 이 숫자들의 합과
곱을 출력하시오.
11. do문을 이용하여 다음과 같은 함수식을 , cos , cos , 으로 출력하시오
(단, 는 에서 까지, 간격).
  cos  cos 
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.  ⋯   까지의 합계를 구할 때, 배열을 이용하여
1000번째마다의 항을 출력하시오 (단, Subroutine을 이용).
(Ex. 항 , 항 , 항 , 항 ⋯)
14. 아래와 같은 문자를 읽고 다음과 같은 결과 형식으로 출력하시오.
문자 : “ABCDEFG”
결과 형식:
ABCDEFG
ABCDEF
ABCDE
ABCD
ABC
AB
A
15. 연수입이 1000, 4000, 6000만원 일때, 다음 표에 의하여 세금을 출력하시오.
연수입 [만원] 세금 [만원]
 미만 0
 이상  미만  초과분에 대하여 %
 이상  +  초과분에 대하여 %
16. 데이터를 읽고 점수에 맞게 학점을 출력하시오(0~60점 : F, 61~70점 : D,
71~80점 : C, 81~90점 : B, 91~100점 : A).
Yu Si Jin 60 30 20 50 50
Gang Mo Yeon 90 100 30 60 40
Yun Myeong Ju 80 30 90 10 20
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. 

 

 ⋯ 

 

을 계산하여 출력하시오.
(Ex.   ×× ⋯×  ×)
18. 다음 표에서 키()와 몸무게()의 상관계수()을 출력하시오.
키 156 161 198 200 167 175 180
몸무게 38 50 100 120 43 54 60
  

 

  
   
19. DO와 IF 문을 이용하여 데이터를 읽고 최대값, 최소값을 구하고 오름차순
(ex.  ⋯)으로 출력하시오.
데이터 3.4, 12.1, 9.7, 19.3, 5.8, 6.2, 14.5, 8.8, 17.7, 16.9, 11.3
20. DO 문을 이용하여 데이터를 읽고 평균, 분산, 표준편차로 출력하시오.
데이터 3.4, 12.1, 9.7, 19.3, 5.8, 6.2, 14.5, 8.8, 17.7, 16.9, 11.3
 

 (평균)
 
 

 
(분산)
  



 
(표준편차)
implicit none
integer i, j
real wa, wb, n
real x, y, SUM_X, SUM_Y, MEAN_X, MEAN_Y, SUM_S1, SUM_S2, &
SUM_S3, R
dimension x(7), y(7)
real a, MAX_A, MIN_A, sort
dimension a(11)
real c, MEAN_C, VAR_C, SD_C, SUM_C, SUM_C2
dimension c(11)
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

[강릉원주대 대기환경과학과] 대기과학전산입문 설명서

  • 1.
    1. X-manager 사용방법 (전산실에서접속 O, 외부에서 접속 X) ◆ X-manager 실행 windows상에서 시작 → 모든 프로그램 → Xmanager Enterprise → Xstart (실행) * 세션 : 대기전산 Ⅰ * 호스트 : 220.69.235.29 * 프로토콜 : SSH * 사용자 이름 : 계정. 학번 8자리 (예: 20100779) * 비밀번호 : 패스워드, 학번 뒤 4자리 (예: 0779) * 실행 명령 : xterm(Linux)
  • 2.
    ◆ 패스워드 변경 *사용자 이름 : 학번 8자리 (예: 20100779) * 패스워드 : 학번 뒤 4자리 (예: 0779) * 패스워드 변경: 로그인 후, passwd 각자 계정 ※ 패스워드 변경 시 가능하면 8자 이상으로 설정
  • 3.
    ◆ Fortran 명령어Tip 1 … 5 6 7 … 72 … ! Example.f & 1행에 문자 c 또는 !를 작성하면 주석 처리 integer a,b,c,d [정수 선언], Tap키 이용 a=1 ; b=2 [한 줄에 쓰기] write(*,*) a,b c=3 d=4 write(*,*) c, d [줄 바꿈] stop end : /a [아래에서 위로 찾기], :wq [저장 후 종료] ◆ 실습 자료 [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 [20100779@atmos7 ~]$ vi 1.f [vi 편집기 열기]
  • 4.
    ◆ Vi 편집기Tip 숫자 + shift+g shift+g [숫자 행으로 가기] [마지막행으로 가기] yy + p 숫자 yy + p [1줄 복사] + [붙여넣기] [여러 줄 복사] + [붙여넣기] dd 숫자 + dd [1줄 삭제] [여러 줄 삭제] [20100779@atmos7 ~]$ pgf90 1.f [1.f 컴파일] [20100779@atmos7 ~]$ a.out [실행] 1 2 3 4 FORTRAN STOP [20100779@atmos7 ~]$ cp 1.f 3.f [1.f를 3.f로 복사] [20100779@atmos7 ~]$ ls [20100779@atmos7 ~]$ mv 3.f 2.f [1.f를 2.f로 변경] [20100779@atmos7 ~]$ rm 2.f [2.f를 삭제] rm: remove regular file `2.f'? y
  • 5.
    [Leesangho@ARL0 Fortran]$ pgf902.f90 PGF90-F-0002-Unable to open source input file: 2.f90 PGF90/x86-64 Linux 12.8-1: compilation aborted [Leesangho@ARL0 Fortran]$ [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]$ ◆ 프로그램 오류들 코딩된 프로그램 내에 문법상의 오류가 있다면, 컴파일 시 오류가 발생하고 해당 오류에 대한 정보가 나타난다. 그러한 정보를 바탕으로 프로그램을 수 정하여 다시 컴파일 하여야 한다. 아래에 주어진 유형 외에도 수많은 오류가 발생하므로, 해당 오류의 문제점을 정확히 파악하고 수정하는 것이 중요하 다. 유형 1) 프로그램의 불일치 Fortran 프로그램의 시작과 끝을 알리는 PROGRAM문의 프로그램명이 불일치 시 나타나는 오류 유형 2) 선언되지 않은 변수의 사용 선언부에서 선언되지 않은 변수를 실행부에서 사용하였을 때 나타나는 오류 유형 3) 문법상의 오류 (Syntax error) 포트란 문법상의 오류가 있는 라인을 알려줌.
  • 6.
    [Leesangho@ARL0 Fortran]$ pgf901.f90 PGF90-S-0023-Syntax error - unbalanced parentheses (1.f90: 9) 0 inform, 0 warnings, 1 severes, 0 fatal for MAIN [Leesangho@ARL0 Fortran]$ [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]$ [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 예1. 짝이 맞지 않은 괄호의 사용 수치연산 부분이나 기타 프로그램 문법 중 짝을 이루지 않는 괄호가 있을 때 나타나는 오류 예2. 쉼표와 시작 라인의 잘못된 입력 쉼표의 생략이나 중복에 의해 나타나는 오류 및 시작 라인의 칸 수가 맞지 않아 나타나는 오류 유형 4) .swp 파일 생성 vi에서 파일을 편집하면 저장을 하기 전까지의 모든 내용을 메모리에 일 시 저장한다. 간혹, vi로 파일 편집 중 터미널 자체를 종료하는 경우가 있 다. 이때 해당 파일이 저장되지 않았으므로 vi는 변경된 내용을 유지하기 위해 스왑(.swp) 파일을 생성함.
  • 7.
    file when makingchanges. 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: 위와 같은 메시지가 보일 때, 아래와 같은 방법으로 해결. [20100779@atmos7 ~]$ ls –a [.1.swp 때문에 오류 발생] [20100779@atmos7 ~]$ rm .1.f.swp rm: remove regular file `.1.f.swp'? y [20100779@atmos7 ~]$
  • 8.
    2. Vi 편집기명령어
  • 9.
    커서이동 h 커서를 왼쪽으로이동 [방향키 ←] j 커서를 아래로 이동 [방향키 ↓] k 커서를 위로 이동 [방향키 ↑] l 커서를 오른쪽으로 이동 [방향키 →] W,w 다음단어의 처음으로 이동 (대문자는 단어와 특수문자 기준) E,e 단어의 끝으로 이동 B,b 단어의 처음으로 이동 숫자 0 행의 처음으로 이동 [Home] $ 행의 마지막으로 이동 [End] G 문서의 마지막으로 이동 (Shift + g) 12G 12행으로 이동 [12 Shift + g] gg 문서의 처음으로 이동 (전체화면에서) H 문서의 처음으로 이동 (현 화면에서) M 문서의 중간으로 이동 L 문서의 마지막으로 이동 ^ 행의 제일 앞으로 커서이동 명령모드 i 현재 위치에서 입력 모드로 변경 I 행의 제일 처음에서 입력 모드로 변경 a 현재 위치에서 우측으로 한 칸 이동 후 입력모드로 변 경 A 행의 제일 마지막에서 입력모드로 변경 o 커서 위치 글자 다음 줄에 입력가능 s 현재문자를 지우고 입력모드로 변경 S 현재 행의 모든 문자를 지우고 입력모드로 변경 x 커서가 있는 문자 삭제 X 커서가 있는 앞 문자 삭제 dd 현재 커서의 1행 삭제 숫자 dd 현재 커서부터 숫자만큼 행 삭제 ex) 10dd : 현재 커서부터 10줄 삭제 yy 현재 커서의 1행 복사 숫자 yy 현재 커서부터 숫자만큼의 행을 복사 ex) 10yy : 현재 커서부터 10줄 복사 p 복사한 내용을 붙여넣기
  • 10.
    검색모드 /[찾을 단어] 단어를아랫방향에서 위 방향으로 찾음 커서의 위치는 위쪽 ?[찾을 단어] 단어를 위 방향에서 아랫방향으로 찾음 커서의 위치는 아래쪽 치환모드 :[라인]s/[원래단어]/[바꿀 단어]/[옵션] 원래 있던 단어를 바꿈 g옵션을 주면 적용되는 라인의 모든 부분을 변경 g옵션을 주지 않으면 처음 찾는 부분만 변경 :10s/a/b/g 10행만 a에서 b로 치환 :1,12s/a/b/g 1~12행만 a에서 b로 치환 :%s/a/b/g 전 범위를 a에서 b로 치환 창 나누기 Ctrl + wn 현재 화면을 수평으로 나누기 Ctrl + wv 현재 화면을 수직으로 나누기 Ctrl + ww 창간의 이동 파일관련 :e [파일이름] 파일 열기 (그 전의 내용은 저장 안 됨) :enew 현재 창을 닫고 빈문서를 연다 :q 종료 (변경된 내용이 없는 경우) :q! 강제종료 (변경된 내용이 있어도 무시) :w 파일 저장 :wq 파일 저장 후 종료 :wq! 강제 파일 저장 후 종료 (shift + zz) 기타 :w >> [파일이름] 파일이름에 현재 내용 추가 :f 현재 작업 중인 파일의 이름과 라인 수 :set nu line number 활성화 :set nonu line number 비활성화
  • 11.
    3. Linux 설명 ●OS (Operating System) 운영체제, 컴퓨터 시스템의 전반적인 동작을 제어하고 조정하는 시스템 프로그램들의 집합 ● 유닉스 (Unix) 미국 벨 연구소가 프로그래밍 연구와 개발을 촉진시킬 환경 조성을 목적 으로 개발한 다수 사용자를 위한 운영체제 ● 리눅스 (Linux) 대형 기종에서만 작동하던 운영체계인 ‘유닉스’를 386 기종의 개인용 컴 퓨터에서도 작동 할 수 있게 만든 운영체제 ● 서버 (Server) 고객이 원하는 정보를 제공해주는 컴퓨터나 소프트웨어 ● 터미널 (Terminal) 서버에 접속하여 시스템에 데이터를 입력하거나 표시하는데 쓰이는 프로 그램들의 통칭 (예 : Xmanager, Putty 등) ● TELNET (Telecommunication Network) and SSH (Secure SHell) 인터넷을 통하여 원격지의 호스트 컴퓨터에 접속할 때 지원되는 인터넷 표준 프로토콜. 기술적으로 말하면 원격지 컴퓨터를 엑세스하기 위한 사용자 명령어들과 TCP/IP 기반의 프로토콜을 말한다. ● FTP (File Transfer Protocol) 인터넷상에서 한 컴퓨터에서 다른 컴퓨터로 파일 전송을 지원하는 통신 규약. 어떤 한 컴퓨터에 원격으로 접속하여 파일을 주고받는 것을 목적으로 함.
  • 13.
    4. Linux 편집기명령 pwd 현재위치 절대경로 보여줌 cat [파일명] 텍스트로 작성된 파일을 화면에 출력 more [파일명] 텍스트로 작성된 파일을 화면에 페이지 단위로 출력 [Space]키는 다음 페이지, [b]는 앞 페이지 history 계정 사용자가 사용했던 명령어기록을 보여줌 mkdir [디렉토리 명] 디렉토리를 새로 만들 때 사용. 생성된 디렉토리는 명령어를 수행한 사용자의 소유가 됨. rmdir [디렉토리 명] 디렉토리를 삭제 할 때 사용. df (또는 df x) 장치 x의 남은 공간 보여주기 top 메모리 상태 보여주기 (q는 종료) touch abc.txt 파일이 없을 경우엔 abc.txt라는 빈파일 생성 abc.txt가 있을 경우엔 파일의 수정날짜를 변경시킴 man x 명령어 x에 관한 매뉴얼 페이지 얻기 (q는 종료) who 현재 시스템에 login하고 있는 사용자의 리스트를 보여줌 mkdir : make directories rmdir : remove empty directories man : manual ls 명령어 현재 디렉토리의 파일목록 ls -a 현재 디렉토리의 목록(숨김파일 포함) ls -l 현재 디렉토리의 목록을 자세히 보여줌 ls *.txt 확장자가 txt인 목록을 보여줌 ls –l /usr/bin/a /usr/bin/디렉토리에 있는 목록 중 앞글자가 ‘a’인 것의 목록을 자세히 ls : list directories contents
  • 14.
    cd 명령어 사용자의홈디렉토리로 이동 cd ~john john 사용자의 홈디렉토리로 이동(대개 /home/john/) cd .. ‘..’은 현재 디렉토리의 상위디렉토리를 의미 cd /usr/bin ‘/usr/bin’ 디렉토리로 이동 (절대경로) cd /root cd ../usr/bin : 상대경로로 이동 rm 명령어 파일이나 디렉토리 삭제 명령어 rm abc.txt abc.txt를 그냥 삭제 rm –i abc.txt 삭제시 확인 rm –r abc 디렉토리 삭제 rm –rf abc abc디렉토리와 그 하부를 강제로 전부 삭제 rm : remove files or directories mv 명령어 파일과 디렉토리의 이름변경이나 위치이동때 사용 mv [이동할 파일] [위치] 파일 위치이동 mv [원본파일이름] [변경할 파일이름] 파일이름 변경 mv : move files cp 명령어 파일이나 디렉토리 복사 명령어, 새로 복사한 파일은 사용자의 소유가 됨 cp abc.txt fgh.txt abc.txt 파일을 fgh.txt란 이름으로 복사 cp –r abc fgh abc 디렉토리를 fgh란 이름으로 복사 cp /home/test/*.* . test 디렉토리내의 모든파일을 현 디렉토리로 복사 cp : copy files or directories
  • 15.
    ln 명령어 Windows의 ‘바로가기아이콘’과 비슷한 것을 만들어 줌 심볼릭링크와 하드링크가 있음 ln –s aaa.txt bbb.txt 심볼릭링크 - Windows의 바로가기아이콘과 비슷 - 주로 사용자가 많이 사용하는 링크 - 긴 디렉토리명을 이동시 유용함 - 원본을 다른 곳으로 이동시키면 사용 못함 - 새로운 inode생성 - 원본자체를 가리키는 포인터 역할 뿐이므로, 원본 수 정 시 당연히 수정된 파일이 보임 - 원본의 삭제시 링크가 끊김 - 파일시스템이 달라도 관계없음 ln aaa.txt bbb.txt 하드링크 - 동일한 inode 사용 - 원본 수정시 하드링크도 수정됨 - 원본 삭제 시 살아있음 - 동일한 파일시스템에만 적용됨 - 파일복사와 차이는 공간을 차지하지 않는 것임 cal 명령어 서기 원년부터 9999년까지의 달력을 볼 수 있음 cal 현재 달력을 볼 수 있음 cal [연도] 입력한 연도의 1~12월 달력을 볼 수 있음 cal [월] [연도] 입력한 연도, 월의 달력을 볼 수 있음
  • 16.
    ◆ 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) → .(온점) ● Tap 키 이용 vi 편집기에서 들여쓰기 이용 리눅스 상에서는 자동완성기능 ● xterm 창에서 글자 크게 하기 Ctrl + 마우스 오른쪽 (누른 채로 계속) → Huge ● 작업 중지 (리눅스 명령어와 실행파일) Ctrl + c
  • 17.
    5. Fortran 설명 ●Fortran은 1954년 IBM 704 과학적인 계산을 하기 위해 시작된 컴퓨터 프 로그램 언어 (가장 오래된 저급 언어) ● 수식 (Formular) 변환기(Translator)의 약자 ● 당시 7명의 전문가가 약 2년 반 동안에 걸쳐 완선된 것이 포트란의 기본 을 이루었고 그 후 ANSI에서 이를 수정하고 능력을 확장시켜 포트란을 완성 ● 포트란은 산술 기호(+, - 등)를 그대로 사용할 수 있으며, 삼각함수∙지수함 수 등과 같은 기초적인 수학 함수들을 쓸 수 있는 언어 ● 쉽고 간단한 문법과 명령어, 단기간에 활용가능, 명령은 문장으로 표현, 문 장은 실행문과 비 실행문으로 구성 ● 활용 영역 많은 입∙출력을 요구하는 문제보다는 많은 양의 계산이 필요한 공학, 통 계학, 수학 그리고 대기과학 등에 널리 사용 ● Fortran 77, Fortran 90, Fortran 95, Fortran 2003, Fortran 2008 [참고문헌 : https://ko.wikipedia.org/wiki/%ED%8F%AC%ED%8A%B8%EB%9E%80]
  • 18.
    6. 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
  • 19.
    7. Fortran 77과Fortran 90의 차이 ◆ Fortran 77의 단점
  • 20.
  • 21.
  • 22.
  • 27.
    ◆ 산술 연산자와계산 우선순위 기호 우선순위 이름 수학식 포트란 표현식 ( ) 1 괄호 × a + b*(x+y) ** 2 거듭제곱  x**a * 3 곱셈 × a * b / 나눗셈  a / b + 4 덧셈  a + b - 뺄셈  a - b
  • 29.
    10. 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
  • 30.
    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
  • 31.
    write(*,*) '****** Dowhile (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
  • 32.
    write(*,*) '****** Ifthen / 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
  • 33.
    10. Fortran 실전문제 1.다음과 같은 공식을 이용하여 섭씨 온도가 0 ℃와 100 ℃ 일 때, 화씨 온도 (℉)를 출력 하시오.        2. 다음과 같은 포맷으로 출력하시오. 1 2 3 4 5 6 7 1 * * 2 * * * * 3 * * * 4 * * 5 * * 6 * 3. “ ” 안에 있는 숫자와 문자를 각각 지정하여 출력하시오. “010-1592-8282 Lee Sun Sin” 4. 반지름( = 8.33)인 원의 넓이를 출력하시오. (단, 유효숫자는 소수점 둘째자리까지) 원의 넓이 =  (  )
  • 34.
    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)
  • 35.
    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. 다음과 같은 그림을 통하여 A, B를 출력하시오. 또한, A 2 +B 2 가 C 2 임을 출력하시 오 (단, 소수점 둘째자리까지). 6. 다음과 같은 방정식을 이용하여 근을 출력하시오 (단, 소수점 둘째자리까지).              근 1 =     , 근 2 =     7. 나는 사과 100개월 가지고 있다. 이 중에서 22개는 먹고, 나머지 사과는 친구 4명과 동일하게 나누었다. 이때, 몇 개씩 나누었고 남은 사과가 몇 개인지를 출력하시오 (단, mod 함수를 이용).
  • 36.
    8.  log  log 을출력하시오 (단, 소수점 둘째자리까지). 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
  • 37.
    write(*,*) '====================================' write(*,*) '8. Examination ' write(*,*) '====================================' MT = sqrt( log(100.0) + exp( log10(3.0) ) ) write(*,'(f10.2)') MT end 9. 구구단에서 1, 2, 3, 4, 5단의 합을 각 단에 대해서 출력하시오. 10. parameter문을 이용하여 4개의 숫자(2, 4, 9, 12)를 출력하고 이 숫자들의 합과 곱을 출력하시오. 11. do문을 이용하여 다음과 같은 함수식을 , cos , cos , 으로 출력하시오 (단, 는 에서 까지, 간격).   cos  cos  12.  인 물을  씩 뺄 때,  가되려면 몇 번 빼야하는지 출력하시오. (단, 순서에 맞게 출력)
  • 38.
    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
  • 39.
    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.  ⋯   까지의 합계를 구할 때, 배열을 이용하여 1000번째마다의 항을 출력하시오 (단, Subroutine을 이용). (Ex. 항 , 항 , 항 , 항 ⋯) 14. 아래와 같은 문자를 읽고 다음과 같은 결과 형식으로 출력하시오. 문자 : “ABCDEFG” 결과 형식: ABCDEFG ABCDEF ABCDE ABCD ABC AB A
  • 40.
    15. 연수입이 1000,4000, 6000만원 일때, 다음 표에 의하여 세금을 출력하시오. 연수입 [만원] 세금 [만원]  미만 0  이상  미만  초과분에 대하여 %  이상  +  초과분에 대하여 % 16. 데이터를 읽고 점수에 맞게 학점을 출력하시오(0~60점 : F, 61~70점 : D, 71~80점 : C, 81~90점 : B, 91~100점 : A). Yu Si Jin 60 30 20 50 50 Gang Mo Yeon 90 100 30 60 40 Yun Myeong Ju 80 30 90 10 20 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(*,*) '====================================’
  • 41.
    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
  • 42.
    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.       ⋯      을 계산하여 출력하시오. (Ex.   ×× ⋯×  ×) 18. 다음 표에서 키()와 몸무게()의 상관계수()을 출력하시오. 키 156 161 198 200 167 175 180 몸무게 38 50 100 120 43 54 60              
  • 43.
    19. DO와 IF문을 이용하여 데이터를 읽고 최대값, 최소값을 구하고 오름차순 (ex.  ⋯)으로 출력하시오. 데이터 3.4, 12.1, 9.7, 19.3, 5.8, 6.2, 14.5, 8.8, 17.7, 16.9, 11.3 20. DO 문을 이용하여 데이터를 읽고 평균, 분산, 표준편차로 출력하시오. 데이터 3.4, 12.1, 9.7, 19.3, 5.8, 6.2, 14.5, 8.8, 17.7, 16.9, 11.3     (평균)        (분산)         (표준편차) implicit none integer i, j real wa, wb, n real x, y, SUM_X, SUM_Y, MEAN_X, MEAN_Y, SUM_S1, SUM_S2, & SUM_S3, R dimension x(7), y(7) real a, MAX_A, MIN_A, sort dimension a(11) real c, MEAN_C, VAR_C, SD_C, SUM_C, SUM_C2 dimension c(11)
  • 44.
    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
  • 45.
    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)
  • 46.
    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