[포트란] 수치해석(?)에서 함수(?)사용 질문입니다.
포트란으로 이리저리 검색하다 들어온 사회환경시스템공학과 2학년학생입니다.
(토목이라는 이름이 너무 거칠어서 요즘 이렇게 바꾸는 추세 입니다.)
이번학기때 수치해석을 듣습니다.
저번주까지 기초적인 문법을 듣고(그래봤자 화면에 쓰여있는거 따라치고 결과확인하는거지만)
숙제를 내주셨습니다. 작년에 배웠던 정역학 문제를 주시면서
(첨부파일에 있습니다.) 프로그램을 짜오라고 하시네요.
프로그래밍도 모르는놈(초등학교때 학원에서c한달, 중학교때 윤선생컴퓨터에서 vb한달, 지금은 기억도 안납니다.)이 머리 짜내서
만드는 도중에 중간에 막혔습니다.
아래는 제가 짠 코드입니다.
========================================
print *,'가로길이(2Xb)를 입력해 주세요'
print *,'계산단위는 m입니다. '
read *,z
print *,'문제상의 처짐값(Yb-c)은 10m 입니다.'
print *,'원하시는 처짐값을 입력해 주세요'
read *,d
10 print *,'A와 B의 예상최대높이를 입력해 주세요'
print *,'예상최대높이는 처짐값보다 커야 합니다.'
read *,y
if (d>=y) then
print *,'예상최대높이는 처짐값보다 커야 합니다.'
goto 10
endif
do i=1,y
if ( (d/i)+1==COSH((z/2)/i) ) then
tc=i
goto 20
endif
enddo
print *,'예상최대높이가 낮습니다.',y,'보다 더 큰 수를 입력해 주세요'
goto 10
20 print *,'만족하는 c값은',tc,'입니다.'
end
========================================
제가막히는 것이
1.do 문에서 i가 1씩 올라가니까 그러면 계산이 정답이 소수점이 나올경우 안될꺼 같아서 do i=1,y,0.1하면 integer 가 0으로 나누어진다면서 에러가 납니다.
2.i의 초기값을 0.2나 0.8로 하면 실행시켜서 어떤 값을 입력해도만족하는 값은 0이라고 나옵니다.
만약 1로 하면 계속 더큰수를 입력하라고 나옵니다.
설명 부탁드립니다.^^
p.s 질문이 너무 수준이 낮아 여기 물을 흐리는건 아닌지 모르겠네요. 너그러이 용서해 주시길...
첨부 | 파일 크기 |
---|---|
![]() | 499.92 KB |
제가 포트란을 쓴 지가 오래 되어 확실치 않으니 참고만 하세요.f77
제가 포트란을 쓴 지가 오래 되어 확실치 않으니 참고만 하세요.
f77에서는 i~n으로 시작하는 변수명은 디폴트로 정수형입니다.
그런데 do i=1,y,0.1 로 하면 i는 정수형이므로 0.1씩 증가하는 것은 기대한 대로
동작하지 않을 것입니다. do의 첨자를 x 같은 실수형 변수로 쓰세요.
그리고 do 루프의 내용에 문제가 있네요. 실수형 연산의 특성상 주어진 방정식의
좌변과 우변이 정확히 같아지는 것은 거의 불가능합니다. 어느 정도의 tolerance를
주어 그 이내에 들면 만족한다고 봐아죠. 예를 들어
ps. f77에서는 ==를 .eq.로 썼는데 이 코드는 f90인가 보군요.
댓글 달기