연산(Operation)과 함수(Function)
연산자
- 산술연산자 ( **, *, /, +, - )
- 관계연산자 ( ==, /=, >=, <=, > , < )
- 논리연산자 (.not. , .and. , .or. , .eqv. , .neqv. )
- 문자연산자 ( // )
기호 | 우선순위 | 이름 | 사용법 | |
수학식 | Fortran 표기 | |||
( ) | 1 | 괄호 | a+b(x+y) | a+b*(x+y) |
** | 2 | 거듭제곱 | xa | x**a |
* | 3 | 곱셈 | a x b | a * b |
/ | 나눗셈 | a | a/b | |
b | ||||
+ | 4 | 덧셈 | a+b | a+b |
- | 뺄셈 | a-b | a-b |
수치연산
주의:
산술연산을 하면 결과는 피연산자의 유형과 같아진다.
3 + 4 => 7
3.0 + 4.0 => 7.0
9.0 / 4.0 => 2.25
9/4 => 2
1.0 / 2.0 => 0.5
1/2.0 => 0
정수와 실수를 혼합해서 사용하면, 정수는 실수로 전환되고 결과도 실수형이 된다.
아래는 같은 연산이지만 결과가 다른 예이다.
3.0 + 8 / 5 => 3.0 + 1 => 3.0 + 1.0 => 4.0
3 + 8.5 / 5 => 3 + 8.0 / 5.0 => 3 + 1.6 => 3.0 + 1.6 => 4.6
2.0 ** 3 => 2.0 * 2.0 * 2.0 => 8.0
(-4.0) ** 2 => (-4.0) * (-4.0) => 16.0
(7.0) ** (1/2) 는 (7.0) ** 0 = 1.0 으로 계산될 수 있다. 주의!
산술 표현의 우선순위 규칙
1. 모든 지수계산은 제일 먼저 실행된다. 연속적인 지수항은 오른쪽에서 왼쪽 순서로 실행
2. 그 다음으로 곱셈과 나뭇셈이 왼쪽에서 오른쪽으로 실행된다.
3. 마지막으로 덧셈, 뺄셈이 왼쪽에서 오른쪽으로 실행된다.
문자연산 (Character operation)
두개의 문자열을 결합하려면 연결연산자 (//)를 사용한다.
예) "Kilo" // "meters" => "Kilometers"
문자열에서 특정 문자를 추출하는 경우,
character(4) :: last_name = "Park"
character(11) :: first_name = "Chang-Hyoun"
print *, first_name//" "//last_name
source = "sugar"
source(:3) => "sug" 값을 가짐
source(4:) => "ar฿฿" 값을 가짐 (฿은 공백을 의미)
내장함수 또는 수치함수(Numerical Functions)
포트란 내장함수
- abs(x) x의 절대값
- cos(x) x 라디안의 코사인 함수 값
- sin(x)
- tan(x)
- exp(x) 지수함수
- int(x) x의 정수부
- fraction(x) x의 소수부
- floor(x) x보다 작거나 같은 가장 큰 정수
- log(x) x의 자연로그
- mod(x,y) int(x/y) * y
- nint(x) x에 가장 가까운 정수
- real(x) x를 실수형으로 변환
- float(x) x를 실수형으로 변환
- sqrt(x) x의 제곱근
- max(x1, x2, x3, ...) 최대값
- min(x1, x2, x3, ...) 최소값
연습문제
- 2+3/5
- (2+3)**2
- 25.01**1/2
- (2.0 + 3**2 ) /( 8-2+1)
- abs (1-2-4)
- int (5.0 + 4.0/ 3.0 )
- “one”//”two”
2. 다음과 같이 변수가 주어졌을 때, 다음 표현식의 결과?
TWO=2.0
THREE=3.0
FOUR=4.0
IntEight=8
IntFive=5
Str_1 = “For”
Str_2 = “tran”
Label_1=”foot”
Label_2=”lbs”
1) TWO+THREE * THREE
2) IntFive/3
3) (THREE+TWO/ FOUR )**2
4) IntFive**2 / TWO**2
5) Str_1//Str_2//”-90”
6) Label_1//” “//Label_2
7) Str_2(2:3)//”ndom”
3. 다음 식을 fortran 표현식으로 써라
x=40, y=?