Fortran/IDL basic

Similar documents
<C6F7C6AEB6F5B1B3C0E72E687770>

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

윈도우즈프로그래밍(1)

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

PowerPoint 프레젠테이션

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - 02_Fortran_프로그래밍.pptx

Java ...

Microsoft PowerPoint - chap05-제어문.pptx

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - chap-03.pptx

Microsoft PowerPoint - chap06-1Array.ppt

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - Chapter_04.pptx

OCW_C언어 기초

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - C++ 5 .pptx

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

목차 배열의개요 배열사용하기 다차원배열 배열을이용한문자열다루기 실무응용예제 C 2

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - Lesson2.pptx

슬라이드 1

프로그램의실행화면 주석 (comment) 두수의합 : 300 /* 두개의숫자의합을계산하는프로그램 */ 주석은코드를설명하는글입니다. 주석 3 가지방법의주석 주석의예 /* 한줄로된주석 */ /* 저자 : 홍길동날짜 : 2013.

11장 포인터

금오공대 컴퓨터공학전공 강의자료

Tcl의 문법

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

02장.배열과 클래스

4장.문장

Microsoft PowerPoint - 2주차-1차시 (강의자료) ch01 - C Programming 기초 (part 2)

컴파일러

PowerPoint 프레젠테이션

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

Microsoft PowerPoint - additional01.ppt [호환 모드]

PowerPoint 프레젠테이션

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - c2.ppt

PowerPoint 프레젠테이션

Microsoft PowerPoint - Chapter_08.pptx

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

JAVA PROGRAMMING 실습 02. 표준 입출력

<342EBAAFBCF620B9D720B9D9C0CEB5F92E687770>

슬라이드 1

중간고사

SRC PLUS 제어기 MANUAL

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - e pptx

PowerPoint 프레젠테이션

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

Visual Basic 반복문

C 프로그램의 기본

PL10

Microsoft PowerPoint - lec3.ppt

해양모델링 2장5~ :26 AM 페이지6 6 오픈소스 소프트웨어를 이용한 해양 모델링 물리적 해석 식 (2.1)의 좌변은 어떤 물질의 단위 시간당 변화율을 나타내며, 우변은 그 양을 나타낸 다. k 5 0이면 C는 처음 값 그대로 농

Microsoft PowerPoint - chap04-연산자.pptx

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

chap 5: Trees

PowerPoint Template

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

PowerPoint 프레젠테이션


Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint 웹 연동 기술.pptx

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning


제4장 기본 의미구조 (Basic Semantics)

쉽게

Microsoft PowerPoint - chap-06.pptx

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap12-고급기능.pptx

PowerPoint Presentation

Infinity(∞) Strategy

untitled

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

PowerPoint 프레젠테이션

Multi-pass Sieve를 이용한 한국어 상호참조해결 반-자동 태깅 도구

PowerPoint Presentation

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

PowerPoint 프레젠테이션

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

<4D F736F F F696E74202D20C1A63036C0E520BCB1C5C3B0FA20B9DDBAB928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

OCW_C언어 기초

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

C# Programming Guide - Types

Microsoft PowerPoint - 제11장 포인터

Transcription:

Fortran basic 2018 전산천문학및실습 한두환 / 박명구

Fortran 이란? Fortran (FORmula TRANslation) - 과학및공학분야에서수학적계산에주로사용하는프로그램언어 - Outdated but still important, especially in science Version Fortran 66 Fortran 77 Fortran 90/95

Fortran 구조 프로그램구조 Program name Declarations Statements Stop End 주프로그램의이름 선언문 : 변수, 배열, 프로그램의성질 실행문 : 직접실행되는문 ( 치환문, 제어문, 입출력문 ) 프로그램의정지 프로그램의끝

Fortran 구조 프로그램구조 주프로그램의이름 선언문 : 변수, 배열, 프로그램의성질 실행문 : 직접실행되는문 ( 치환문, 제어문, 입출력문 ) 프로그램의정지 프로그램의끝

Fortran 규칙 칸 (Column) 에관한규칙 칸내용설명 1 1-5 6 주석행 (Comment) 문번호 (Statement #) 연속행 (Continue line) 첫째칸에 * 또는 c 를써서행을시작하면주석행으로선언할수있다. 문 (Statement) 을식별또는참조할때사용문번호를선언할수있고 1-99999 사이의숫자를사용할수있다. 6 번째칸에문자를사용하면문을연결하여사용할수있다. 7-72 문 (Statement) 실행문기술 72 번째칸까지실행문을기술할수있다. 73- 이이후에열은컴파일할때무시된다.

Fortran 규칙 칸 (Column) 에관한규칙 C 1 2 3 4 5 6 7 C23456789012345678901234567890123456789012345678901234567890123456789012 program rule real r, area, pi pi = 3.141592653589793238462643383279502412 c This program reads a real number r and prints c the area of a circle with radius r. write (*,20) The value of PI is, + pi 20 format(a20,f12.9) write (*,*) 'Give radius r:' read (*,*) r area = 3.14159*r*r write (*,*) 'Area = ', area stop

변수의종류와선언 변수 (Variables) 변수이름은문자 a-z 와숫자 0-9 로정의할수있다. 단, 첫번째는문자로시작해야한다. 대문자와소문자를구분하지않는다. 변수의종류 (Types) 종류 (Type) 내용 설명 integer 정수형 32bit (-2147483648, 2147483647) real 실수형 32bit (1.175494E-38, 3.402823E+38) double precision 배정도실수형 64bit (2.225074D-308, 1.797693D+308) complex 복소수형 ( 실수부, 허수부 ) logical 논리형 참 (.TRUE.) 거짓 (.FALSE.) character 문자형 문자, 문자열

변수의종류와선언 변수의선언 1. 변수종류선언문에의한방법 2. IMPLICIT 명령문에의한방법 3. 묵시적방법 4. 매개변수문에의한방법 program variables integer num implicit integer (v-y,z) implicit real (a-c,e) real pi, pi2 parameter (pi=3.14159265358979) pi2=3.14159 index=10 num=211 stop

변수의종류와선언 1. 변수종류선언문에의한방법변수종류에따라대응하는명령문사용 INTEGER, REAL, DOUBLE PRECISION, COMPLEX, LOGICAL, CHARACTER Integer num Real num1 Double precision num3 Complex vect Logical mx Character str*7 num=9 num1=7.2 num2=9.3d0 vect=(2,3) mx=.true. str= abcdefg 변수명 num num1 num3 vect mx str 종류정수형실수형배정도실수형복소수형논리형문자형

변수의종류와선언 2. IMPLICIT 명령문에의한방법 특정영문자혹은지정된범위에포함된영문자로시작하는 변수명의종류 (type) 을지정한다. implicit integer(a-c,x) implicit real(i-n,z) 변수명의첫문자가 a-c (a, b, c), x 로시작하는변수명은모두정수형변수가된다. 변수명의첫문자가 i-n, z 로시작하는변수는모두실수형변수가된다.

변수의종류와선언 3. 묵시적방법변수명의첫문자가 I-N 중하나로시작되는변수는정수형변수로선언된다. 그외나머지변수명은실수형변수가된다. 4. 매개변수문에의한방법프로그램에서상수와같이변수값이변하지않는경우매개변수문을이용하여선언할수있다. real pi parameter (pi=3.14159265358979) 실수형변수인 pi 의변수값을 3.14159265358979 로정의한다.

기초명령어 1. READ READ( 입력장치번호, FORMAT 문번호,ERR 문번호,END 문번호 ) 2. PRINT(or WRITE) PRINT( 입력장치번호,FORMAT 문번호 ) 3. STOP 4. END read *, num read(*,*)name print *, pi print(*,*) num write(5,10) pi,num

예제 1 program Hello print *, Hello! write(6,90) 90 format(1x, Nice to meet you.,/) stop Hello! Nice to meet you. Press RETURN to close window...

예제 2 program vartype Integer num Real num1 Double precision num2 Complex vect Logical mx Character str*7 num=9 num1=7.2 num2=9.3e0 vect=(2,3) mx=.true. str='abcdefg' print *,num stop

예제 3 원의넓이계산 program circle real r, area, pi parameter (pi = 3.14159) write (*,*) 'Input radius r: read (*,*) r area = pi*r*r write (*,*) 'Area = ', area stop Give radius r: 2 Area = 12.5664 Press RETURN to close window...

연산 (expression) 산술연산자 우선순위연산자비고 1 괄호속소괄호만사용가능 2 함수 3 ** 지수 4 *,/ 곱셈, 나눗셈 5 +,- 덧셈, 뺄셈 사용예 A=3+5 B=A*8 c=a**2 x=(2.0,3.1)-(1.0,1.1)

연산 (expression) 관계연산자 연산 의미.GT. Greater than ( >) ~ 보다크다..GE. Greater than or equal to ( ) ~ 보다크거나같다..LT. Less than (<) ~ 보다작다..LE. Less than or equal to ( ) ~ 보다작거나같다..EQ. Equal to (=) ~ 와같다..NE. Not equal to ( ) ~ 와같지않다.

연산 (expression) 논리연산자연산의미.NOT. 부정 A.NOT. A T F.AND. 논리곱 A B A.AND. B T T T T F F F F F.OR. 논리합 A B A.OR. B T T T T F T.EQV. 논리등가 A B A.EQV. B T T T T F F F F T.NEQV. 논리비등가 A B A.NEQV. B T T F T F T

내장함수

예제 4 - 연산 (expression) program Arithmetic A=5.7 B=6.5 I=8 K=7 C=A+I D=A+B*K E=A+I/K F=I/K write (*,*)'A= ',A, B= ',B write (*,*)'I= ',I, K= ',K write (*,*)'A+I= ',C write (*,*)'A+B*K= ',D write (*,*)'A+I/K= ',E write (*,*)'I/K= ',F stop

예제 4 - 연산 (expression) program Arithmetic A= 5.70000 B= 6.50000 A=5.7 B=6.5 I=8 K=7 C=A+I D=A+B*K I= A+I= A+B*K= A+I/K= I/K= 8 K= 13.7000 51.2000 6.70000 1.00000 7 E=A+I/K Press RETURN to close window... F=I/K write (*,*)'A= ',A, B= ',B write (*,*)'I= ',I, K= ',K write (*,*)'A+I= ',C write (*,*)'A+B*K= ',D write (*,*)'A+I/K= ',E write (*,*)'I/K= ',F stop

예제 5 - 연산 (expression) 논리연산 program Logic LOGICAL s1,s2,s3,s123 a=10.0 b=50.0 s1=a.ge.10.and.a.lt.40 s1 10 a<40 s2=a.ge.0.and.a.lt.10.or.b.ge.50 s2 0 a<10 or b 50 s3=b.ge.0.and.b.lt.50 s3 0 b<50 s123=s1.or.s2.or.s3 s123 s1 or s2 or s3 write (*,*)'a=',a,' b=',b write (*,*)'s1=',s1,' s2=',s2,' s3=',s3 write (*,*)'s123=',s123 stop

예제 5 - 연산 (expression) 논리연산 program Logic LOGICAL s1,s2,s3,s123 a=10.0 Press RETURN to close window... b=50.0 s1=a.ge.10.and.a.lt.40 s1 10 a<40 s2=a.ge.0.and.a.lt.10.or.b.ge.50 s2 0 a<10 or b 50 s3=b.ge.0.and.b.lt.50 s3 0 b<50 s123=s1.or.s2.or.s3 s123 s1 or s2 or s3 write (*,*)'a=',a,' b=',b write (*,*)'s1=',s1,' s2=',s2,' s3=',s3 write (*,*)'s123=',s123 stop a= 10.0000 b= 50.0000 s1= T s2= T s3= F s123= T

예제 6 연산 (expression) xx 2 + 2aaaa + bb = 0, aa = 5, bb = 24 일때근찾기,xx = aa ± aa 2 bb program Roots_of_EQ C---roots of X**2+2aX+b=0---- real a,b a=-5.0 b=24.0 root1=-a+sqrt(a**2-b) root2=-a-sqrt(a**2-b) write (*,*)'a=',a,' b=',b print *, Roots of X**2+2aX+b=0 : write (*,*) root1, and ', root2 stop

예제 6 연산 (expression) xx 2 + 2aaaa + bb = 0, aa = 5, bb = 24 일때근찾기,xx = aa ± aa 2 bb program Roots_of_EQ C---roots of X**2+2aX+b=0---- a= -5.00000 b= 24.0000 real a,b Roots of X**2+2aX+b=0 : 6.00000 and 4.00000 a=-5.0 b=24.0 Press RETURN to close window... root1=-a+sqrt(a**2-b) root2=-a-sqrt(a**2-b) write (*,*)'a=',a,' b=',b print *, Roots of X**2+2aX+b=0 : write (*,*) root1, and ', root2 stop

프로그램오류 1. Syntax Error 스펠링이틀린경우 잘못된명령어사용 Comma(,), apostrophe( ) 사용 2. Run-time Error 수식연산중에나는오류 (0 으로나누는경우 ) 3. Line-Positioning Errors 잘못된열에서작성 (7~72) 4. Errors in Arithmetic Expressions 변수종류를혼용해서사용 (REAL : A-H, O-Z, INTEGER : I-N)

입출력문 (I/O statement) OPEN 문외부파일을사용혹은생성하거나장치를연결하는데사용하는명령문기본형식 : open (unit=unitnumber,file=filename, ) open(unit=1,file= test.dat ) open(1,file= test.dat ) unit : 장치번호, 1-99사이의정수, 5 : 표준입력 6 : 표준출력 * : 장치번호생략시, 표준입출력선언

입출력문 (I/o statement) READ 문외부파일혹은장치로부터자료를읽어들일때사용하는명령문기본형식 : read (unit=unitnumber,format, )variables read(*,*)x 표준입력을통해변수값 x, y 를읽는다. CLOSE 문파일의사용이끝나면 CLOSE 문을사용하여파일을닫는다. 기본형식 : close (unit=unitnumber) 9번장치번호의 close(9) 파일을닫는다.

입출력문 (I/o statement) PRINT 문변수값을표준출력장치에출력한다. 기본형식 : print *,variables print *,x WRITE 문외부파일혹은장치에변수값을출력한다. 기본형식 : write(unit=unitnumber,format, ) write(*,*)x

입출력문 (I/o statement) 파일입력 1. 파일열기 (OPEN 문 ) 2. 자료읽기 (READ 문 ) 3. 파일닫기 (CLOSE 문 ) 파일출력 1. 파일열기 (OPEN 문 ) 2. 자료출력 (WRITE 문 ) 3. 파일닫기 (CLOSE 문 )

예제 7 입출력문 (I/o statement) program IO real A,I,C open(unit=9,file='ex07-io.txt') read(9,*)a,i close(9) ex07-io.txt 파일을읽어들이고읽은자료를출력하고, 자료의합도출력하기 C=A+I write(*,*)'a=',a,' I=',I write(*,*)'c=',c open(11,file='ex07-out.txt') write(11,*)'a==',a,' I==',I write(11,*)'c==',c close(11) stop

예제 7 입출력문 (I/o statement) program IO real A,C open(unit=9,file='ex07-io.txt') read(9,*)a,i close(9) C=A+I write(*,*)'a=',a,' I=',I write(*,*)'c=',c open(11,file='ex07-out.txt') write(11,*)'a==',a,' I==',I write(11,*)'c==',c close(11) stop ex07-io.txt 파일을읽어들이고읽은자료를출력하고, 자료의합도출력하기 A= 12.1230 I= 7 C= 19.1230 Press RETURN to close window...

입출력문 (I/O statement) FORMAT 문입출력문과같이사용되며변수값의형태를변환시켜준다. fn format(formatcode) fn = 문번호 formatcode : 형식기본형식의미 (w: 변수전체칸,d: 유효숫자 ) 예 A Aw 문자열 A9 D Dw.d 배정도실수형 D7.3 E Ew.d 실수형, 지수표시 E8.2 F Fw.d 실수형, 고정형식 F9.5 I Iw 정수형 I3 X wx 수평띄워쓰기 2X

입출력문 (I/o statement) 예제 1 예제 ) hello.f program Hello print *, 'Hello!' write(6,90)'hello~~!' 90 format(3x,a3,/) 결과 stop Hello! Hello~~! Press RETURN to close window...

예제 8 입출력문 (I/o statement) program format_ex A=5.7 I=8 C=A+I write (*,*)'A= ',A write (*,*)'A+I= ',C write (*,*)'--use format statements--' write (*,10)'A=',A write (*,20)'A+I=',C 10 format(a2,f3.1) 20 format(a4,f4.1) stop

예제 8 입출력문 (I/o statement) program format_ex A=5.7 I=8 C=A+I write (*,*)'A= ',A write (*,*)'A+I= ',C A= 5.70000 A+I= 13.7000 --use format statements-- A=5.7 A+I=13.7 Press RETURN to close window... write (*,*)'--use format statements--' write (*,10)'A=',A write (*,20)'A+I=',C 10 format(a2,f3.1) 20 format(a4,f4.1) stop

예제 9 - 입출력문 (I/o statement) 반지름을입력받아원의넓이를계산하여 ex09-circle.txt 파일로결과를저장하기 program circle real r, area, pi parameter (pi = 3.14159) c This program reads a real number r and prints c the area of a circle with radius r. open(3,file='ex09-circle.txt') write (*,*) 'Give radius r:' read(*,*) r area = pi*r*r write (3,*) 'Given radius r=',r write (3,*) 'Area = ', area stop

예제 9 - 입출력문 (I/o statement) 반지름을입력받아원의넓이를계산하여 ex09-circle.txt 파일로결과를저장하기 program circle real r, area, pi parameter (pi = 3.14159) c This program reads a real number 2 r and prints c the area of a circle with radius r. open(3,file='ex09-circle.txt') write (*,*) 'Give radius r:' read(*,*) r area = pi*r*r write (3,*) 'Given radius r=',r write (3,*) 'Area = ', area stop Give radius r: Press RETURN to close window... Given radius r= 2.00000 Area = 12.5664

조건문 (if statement) 조건문 IF (expression) executable statement IF (expression) THEN statement ENDIF IF (expression) THEN statement ELSEIF (expression) THEN statement ELSE statement ENDIF if (x.lt. 0) x=-x if (y.gt. 0) then x=exp(y) if

조건문 (if statement) 조건문 Nested if statements if (x.gt. 0) then if (x.ge. y) then write(*,*) 'x is positive and x >= y' else write(*,*) 'x is positive but x < y' if elseif (x.lt. 0) then write(*,*) 'x is negative' else write(*,*) 'x is zero' if

예제 10 조건문 (if statement) x 값과 y 값을비교하여출력하기 program ex_if1 x=2.3 y=4.1 if (x.ge. y) then write(*,*) ' x >= y' else write(*,*) ' x < y' if stop x < y Press RETURN to close window...

예제 11 - 조건문 (if statement) x 값과 y 값을입력받고비교하여출력하기 program ex_if write(*,*) 'Give the values of x and y:' read(*,*) x,y if (x.gt. 0) then if (x.ge. y) then write(*,*) 'x is positive and x >= y' else write(*,*) 'x is positive but x < y' if elseif (x.lt. 0) then write(*,*) 'x is negative' else write(*,*) 'x is zero' if stop

예제 11 - 조건문 (if statement) x 값과 y 값을입력받고비교하여출력하기 program ex_if write(*,*) 'Give the values of x and y:' read(*,*) x,y if (x.gt. 0) then if (x.ge. y) then 4.1 write(*,*) 'x is positive x is positive and x >= but y' x < y else write(*,*) 'x is positive Press RETURN but x < to y' close window... if elseif (x.lt. 0) then write(*,*) 'x is negative' else write(*,*) 'x is zero' if stop Give the values of x and y: 2.3

반복문 (loops) DO loops 기본형식 : DO m i=s,e,t statements m CONTINUE m : DO loop의영역을나타내는문번호 i : 수행횟수의제어 (integer) s : 초기값 e : 최종값 t : 증가값 CONTINUE : 정상적인실행순서를진행시키는명령문

반복문 (loops) DO loops (fortran 90/95) DO i=s,e,t statements ENDDO WHILE loops expression 이참일경우반복한다. 기본형식 : WHILE (expression) DO statements ENDDO DO WHILE (expression) statements ENDDO

반복문 (loops) If 와 goto 를사용한반복문 m if (expression) then statements goto m if Until 반복문 DO statements until (expression) m continue statements if (expression) goto m

반복문 (loops) exiting from DO loops m m n DO m i=s,e,t statements if(expression) exit CONTINUE DO m i=s,e,t statements if(expression) goto n CONTINUE CONTINUE

반복문 (loops) 다중 DO 반복문 do 10 i=s1,e1,t1 do 20 j=s2,e2,t2 statements 20 continue 10 continue do 10 i=s1,e1,t1 do 10 j=s2,e2,t2 statements 10 continue

예제 12 - 반복문 (loops) 1 부터 n 까지의합계산 program loop_sum integer i, n, sum write(*,*) Give a value of n read(*,*)n sum = 0 do 10 i = 1,n sum = sum + i write(*,*) i=,i write(*,*) sum=,sum 10 continue stop

예제 12 - 반복문 (loops) 1 부터 n 까지의합계산 program loop_sum integer i, n, sum write(*,*) Give a value of n read(*,*)n sum = 0 do 10 i = 1,n sum = sum + i write(*,*) i=,i write(*,*) sum=,sum 10 continue stop Give a value of n 10 i= 1 sum= 1 i= 2 sum= 3 i= 3 sum= 6 i= 4 sum= 10 i= 5 sum= 15 i= 6 sum= 21 i= 7 sum= 28 i= 8 sum= 36 i= 9 sum= 45 i= 10 sum= 55 Press RETURN to close window...

예제 13 - 반복문 (loops) 100 보다작거나같은수를 2 의지수로하여값을계산 program loops integer n write(*,*) loop while n=1 while(n.le. 100) do n=2*n write(*,*)n do write(*,*) loop if statements n=1 10 if (n.le. 100) then n=2*n write(*,*)n goto 10 if stop

예제 13 - 반복문 (loops) program loops 100보다 integer 작거나n 같은수를 2의지수로하여값을계산 write(*,*) loop while n=1 while(n.le. 100) do n=2*n write(*,*)n do write(*,*) loop if statements n=1 10 if (n.le. 100) then n=2*n write(*,*)n goto 10 if stop loop - while 2 4 8 16 32 64 128 loop - if statements 2 4 8 16 32 64 128 Press RETURN to close window...

예제 14 - 반복문 (loops) 다중 DO 반복문 program doubledo do 10 i=1,10 do 20 j=1,10 write(*,*)'i,j=',i,j 20 continue 10 continue stop i,j= 1 1 i,j= 1 2 i,j= 1 3 i,j= 1 4 i,j= 10 8 i,j= 10 9 i,j= 10 10 Press RETURN to close window...

배열 (Array) 배열선언 : 변수는사전에선언하지않아도가능, 배열은반드시선언해야함. dimension a1(k) integer a1(k) real a1(k) character*n a1(k) a1(k): 1차원배열 (vector),k-첨자변수( 정수 ),n-문자수 real a1(k) a2(l:u): 1차원 real 배열 a2(l:u) (vector),l-첨자최소치,u-첨자최대치 ex) a(5) a[1],a[2],a[3],a[4],a[5] a(0:4) a[0],a[1],a[2],a[3],a[4]

배열 (Array) 배열선언 : 변수는사전에선언하지않아도가능, 배열은반드시선언해야함. 2차원배열 dimension a3(n1,n2) integer a3(n1,n2) real a3(n1,n2) character*n a3(n1,n2) n1-행, n2-열, n-문자수 (1,1) (1,2) (1,3) (1,n2) (2,1) (2,2) (2,3) (2,n2) (n1,1) (n1,2) (n1,3) (n1,n2)

배열 (Array) 배열입출력 : 입출력문에서배열명은배열요소전부를나타냄 integer a(3) read (*,*) a print *, a integer a(3) do 10 i=1,3 read (*,*) a(i) print *,a(i) 10 continue integer a(3) print *, (a(i),i=1,3)

배열 (Array) 배열입출력 : 입출력문에서배열명은배열요소전부를나타냄 2 차원배열출력 : integer a(2,3) print *, ((a(i,j),j=1,3),i=1,2) 순서 i=1(j=1,2,3) i=2(j=1,2,3) : 행우선으로처리 integer a(2,3) do 10 i=1,2 do 20 j=1,3 print *,a(i,j) 20 continue 10 continue

예제 15 - 배열 (Array) 3 by 3 행렬인 aa ii, jj = ii/jj 계산및출력 program ex_array integer i,j real a(3,3) do 10 i=1,3 do 20 j=1,3 a(i,j)=real(i)/real(j) 20 continue print *,(a(i,j),j=1,3) 10 continue stop

예제 15 - 배열 (Array) 3 by 3 행렬인 aa ii, jj = ii/jj 계산및출력 program ex_array integer i,j real a(3,3) do 10 i=1,3 do 20 j=1,3 a(i,j)=real(i)/real(j) 20 continue print *,(a(i,j),j=1,3) 10 continue stop 1.00000 0.500000 0.333333 2.00000 1.00000 0.666667 3.00000 1.50000 1.00000 Press RETURN to close window...

함수 (function) 포트란에서사용하는함수는라이브러리에내장되어있는내장함수 (intrinsic function) 과사용자가정의한문함수 (statement function) 가있다. 내장함수 (intrinsic fucntion) ex) 삼각함수, 로그함수, 지수함수, 제곱근 yy = ssssnn 2 xx + ccccss 2 xx + ee 2xx zz = xx + yy = xx 2 + yy 2 y=sin(x)**2+cos(x)**2+exp(2*x) z=abs(x+y)+sqrt(x**2+y**2)

함수 (function) 문함수 (statement fucntion) 사용자의필요에따라함수를정의. 기본형식 : fn(a1,a2,..., an)=expression fn: 함수명 a1,a2,...,an : 인수 expression : 산술식이나논리식 문함수위치는선언문다음, 실행문이전 함수명은 6 자이내 인수는 1 개이상 ADD(a,b)=a+b x=add(3.5,5.5)

예제 16 - 함수 (function) 문함수 (statement fucntion) 사용자의필요에따라함수를정의. ff xx = xx 3 2xx 2 + xx + 5 program fx real x,y,r f(x)=x**3-2*x**2+x+5 do i=1,20 r=0.5*i y=f(r) write(*,*)'f(',r,')=',y do stop

부프로그램 (subprogram) 함수의형태가하나의독립된단위프로그램으로작성된것 프로그램에서자주사용하는문함수를모듈처럼만들어사용할수있다. 기본형식 : ftype FUNCTION fn(v1,v2,...,vn) statement (fn=...) RETURN END ftype : 함수의형태 (REAL, INTEGER 등등 ) fn: 함수명 v1,v2,...,vn : 인수로단순변수또는배열명 RETURN : 호출프로그램으로되돌려주는명령문 END : 부프로그램의끝 [ 함수명 =...] 인내용이반드시포함. RETURN(or END) 문사용시함수명에저장된함수값이되돌려짐.

예제 17 - 부프로그램 (subprogram) a,b 를비교하여큰값선택하기 (findmax(a,b)) program find_max real a,b,findmax a=3.2 b=5.2 program ex_find_max real a,b external findmax a=3.2 b=5.2 print*,findmax(a,b) if(a.ge.b)then findmax=a else findmax=b if print*,findmax stop stop FUNCTION findmax(x,y) real x,y if(x.ge.y)then findmax=x else findmax=y if RETURN END

예제 18 - 부프로그램 (subprogram) 프로그램에서자주사용하는문함수를모듈처럼만들어사용할수있다. program ex_ft real y,r external f do i=1,20 r=0.5*i y=f(r) write(*,*)'r=',r,'y=',y do stop function f(x) real f,x f=x**3-2*x**2+x+5 return ff xx = xx 3 2xx 2 + xx + 5

부프로그램 -subroutine 함수부프로그램 (FUNTION) 과마찬가지로하나의독립된단위프로그램 여러개의결과값을전달할수있다. ( 함부부프로그램은하나의결과값만전달 ) 기본형식 : SUBROUTINE sn(v1,v2,...,vn) statement RETURN END sn: 서브루틴명 v1,v2,...,vn : 인수로단순변수또는배열명 RETURN : 호출프로그램으로되돌려주는명령문 END : 부프로그램의끝

부프로그램 -subroutine 함수부프로그램 (FUNTION) 과마찬가지로하나의독립된단위프로그램 기본형식 : SUBROUTINE sn(v1,v2,...,vn) statement RETURN END subroutin 은명령문임, 한개이상의 RETURN 문을포함해야하고, END 로끝난다. main 프로그램내에서사용할수없음 인수가없는경우도있음

부프로그램 -subroutine 주프로그램 (Main program) 에서서브루틴호출하는형식 CALL sn(v1,v2,...,vn) sn: 서브루틴명 v1,v2,...,vn : 인수로단순변수또는배열명 CALL: 서브루틴프로그램을호출시사용하는명령문 program main... CALL sn(v1,v2,...,vn)... STOP END SUBROUTINE sn(v1,v2,...,vn) statement RETURN END

예제 19 - 부프로그램 (subprogram) a,b 를비교하여큰값선택하기 (findmax(a,b)) program ex_find_max real a,b,maximum program find_max real a,b,findmax a=3.2 b=5.2 if(a.ge.b)then findmax=a else findmax=b if print*,findmax stop a=3.2 b=5.2 call findmax(a,b,maximum) print*,maximum stop SUBROUTINE findmax(x,y,maxim) real x,y,maxim if(x.ge.y)then maxim=x else maxim=y if RETURN END

형선언문 (Type Statement) IMPLICIT 문변수명의첫글자를임의로지정하여변수의형태를결정 IMPLICIT type(c1,...,cn), type(d1,...,dn) type : 변수의형태 (integer, real, character,...) C1,...,Cn, D1,...,Dn : 변수명의첫번째영문자 IMPLICIT integer(a,x-z), real(k-m) 묵시적방법무시 (I-N 중하나로시작되는변수명 = 정수형변수, 나머지변수명 = 실수형변수 ) IMPLICIT NONE

형선언문 (Type Statement) DATA 문특정변수나배열의원소에초기치설정 data v1,v2,...,vn /d1,d2,...,dn/ v1,v2,...,vn: 변수명또는배열명 d1,d2,...,dn: 초기치 data A,B,C /1.0, 2.5, 3.3/ data A/1.0/, B/2.5/, C/3.3/ dimension x(2,2), a(10) data x/1.0,-3.7,3.0,0.0/, a/10*0.0/ data m/10/, n/20/, x/2.5/, y/2.5/ data m,n /10,20/, x,y /2*2.5/ real A(10,20) data A/200*0.0/

공통블록 (Common blocks) COMMON 문여러서브루틴간에공동기억장소를마련해변수를공유하는방법 common /name1/v1,...,vn /name2/x1,...,xn name : common block 의이름, 앞뒤로 / 가있어야함. v1,...,vn x1,...,xn : 변수, 배열 부프로그램의 COMMOM 문에사용된변수는반드시주프로그램의 COMMON 문에사용되어야함. 주프로그램의 COMMON 문의변수이름인부프로그램에서 COMMON 문의변수이름과같지안아도됨 ( 같게할것을권장 )

공통블록 (Common blocks) COMMONprogram 문 여러서브루틴간에공동기억장소를마련해변수를공유하는방법 real A,B common /kim/a,b name : common... block의이름, 앞뒤로 / 가있어야함. v1,...,vn x1,...,xn : 변수, 배열 stop 부프로그램의 COMMOM문에사용된변수는반드시주프로 그램의 COMMON문에사용되어야함. 주프로그램의 subroutine COMMON tmp(..) 문의변수이름인부프로그램에서 COMMON문의변수이름과같지안아도됨 ( 같게할것을권장 ) real A,B common /kim/a,b... return

예제 20 - 공통블록 (Common blocks) program ex_area COMMON문여러서브루틴간에공동기억장소를마련해변수를공유하는방법 real L,Tarea,Rarea,Tcir,Rcir common /var/tarea,rarea,tcir,rcir L=3.0 name : common block의이름, 앞뒤로 / 가있어야함.... v1,...,vn x1,...,xn : 변수, 배열 call calarea(l) print*, Tarea=,Tarea print*, Rarea=,Rarea print*, Tcir=,Tcir print*, Rcir=,Rcir stop End subroutine calarea(x) 부프로그램의 COMMOM문에사용된변수는반드시주프로그램의 COMMON문에사용되어야함. real x,tarea,rarea,tcir,rcir common /var/tarea,rarea,tcir,rcir 주프로그램의 COMMON문의변수이름인부프로그램에서 COMMON문의변수이름과같지안아도됨 ( 같게할것을권장 ) Tarea=sqrt(3.0)/2.0*x**2 Rarea=x**2 Tcir=3.0*x Rcir=4.0*x subroutine calarea(x)... return

유의할점 program test print*,8/3 print*,8.0/3 print*,8.0/3.0 print*,2**3 print*,2.0**3 print*,2.0**3.0 stop 2.0**3 = 2.0*2.0*2.0 2.0**3.0 = exp(3.0*log(2.0) (-2.0)**3 : fine (-2.0)**3.0 : uncalculable

예제 least square fit yfit xx = aa sin xx + bb sin 2xx + cc sin 3xx sine.txt xx ii ( ) yy ii xx ii ( ) yy ii 3 0.0433 183-0.2043 20 0.2532 200-1.2431 34 0.3386 218-1.8422 50 0.356 230-1.8726 75 0.4983 248-1.4889 88 0.7577 269-0.8372 111 1.4585 290-0.4377 129 1.8628 303-0.364 143 1.8264 320-0.3508 160 1.2431 344-0.2126 sine.txt 자료를 yfit(x) 로 least square fit 해서 x, y, yfit(x) 를화면과파일 sinefit.txt 에출력하라. ff xx = aaff 0 xx + bbff 1 xx + ccff 2 xx ff 0 xx, ff 1 xx, ff 2 xx : known function of xx M = ff 0 2, PP ff 0 ff 1, QQ ff 0 ff 2 R ff 1 2, SS ff 1 ff 2, TT ff 2 2 U yyff 0, VV yyff 1, WW yyff 2 DD = MMMMMM + 2PPPPPP MMMM 2 RRQQ 2 TTPP 2 a = 1 DD b = 1 DD c = 1 DD UU RRRR SS2 + VV QQQQ PPPP + WW PPPP QQQQ UU SSSS PPPP + VV MMMM QQ2 + WW PPPP MMMM UU PPPP RRRR + VV PPPP MMMM + WW MMMM PP2