福島康裕

AND , OR

A AND B  A.and.B

EX: N is greater than 1 and less than 3
(N.gt.1).and.(N.lt.3)

Q: Leap year (閏年)
 “year
that could be divided by four, except for
the year that could be divided by 100 but could
not be divided by 400”
(Hint 1: 1900 and 2100 is not a leap year)
(Hint 2: a mod b  mod(a,b) )
Ans:
(mod(N,400).eq.0).or.((mod(N,4).eq.0).and.(mod(N,100).gt.0))
Introduction to “Array(陣列)”

Calculate standard deviation
PROGRAM WITHOUTARRAY
C
C
C
LEARN ARRAY IN FORTRAN (1)
CALCULATE MEAN VALUE
2005/05/18 Y. FUKUSHIMA
implicit none
real*8 S1,S2,S3,S4,S5
real*8 mean, std
write
write
write
write
write
(*,*)
(*,*)
(*,*)
(*,*)
(*,*)
'#1 >>' ; read (*,*) S1
'#2 >>' ; read (*,*) S2
'#3 >>' ; read (*,*) S3
'#4 >>' ; read (*,*) S4
'#5 >>' ; read (*,*) S5
C
Calculate mean
mean=(S1+S2+S3+S4+S5)/5
C Calculate STD
std = ( (S1-mean)**2 + (S2-mean)**2
1
+ (S3-mean)**2 + (S4-mean)**2
1
+ (S5-mean)**2 )**0.5d0
write (*,*) 'mean: ', mean
write (*,*) 'standard deviation: ', std
stop
end
We cannot use loops …
 Inconvenient !!
Introduction to “Array(陣列)”

C
C
C
“Array” can save you !!
PROGRAM WITHARRAY
LEARN ARRAY IN FORTRAN (2)
Calculate Statistics
2005/05/18 Y. FUKUSHIMA
implicit none
integer i
real*8 S(5)
real*8 mean, std, sum, var
do i=1,5
write (*,*) '#',i,'>>' ; read (*,*) S(i)
end do
C
Calculate sum and mean
sum=0
do i=1,5
sum=sum+S(i)
end do
mean=sum/5.0d0
C
Calculate variation and std
var=0
do i=1,5
var=var+(S(i)-mean)**2
end do
std=var**0.5
write (*,*) 'mean: ', mean
write (*,*) 'standard deviation: ', std
stop
end
real*8 s1,s2,s3,s4,s5
real*8 s(5)
Indentation

In order to express structures, please
use appropriate “indentation”
C
Calculate variation and std
var=0
do i=1,5
var=var+(S(i)-mean)**2
end do
std=var**0.5
if n.gt.0 then
sum = sum + n
else if n.eq.999 then
goto 10
else
write (*,*) ‘invalid number!’
end if
Standard input / output

Unix (including Cygwin) system has “standard
input” and “standard output”



Standard input : keyboard
Standard output: console display
Ex) ls command shows output to standard output
福島康裕@mango ~
$ ls -l
total 330
-rwxr-xr-x 1 福島康裕 None
-rwxr-x--- 1 福島康裕 None
-rwxrwxrwx 1 福島康裕 None
-rwxr-xr-x 1 福島康裕 None
-rwxrwxrwx 1 福島康裕 None
-rwxr-xr-x 1 福島康裕 None
-rwxrwxrwx 1 福島康裕 None
70125 May 16 23:24 a.exe
2692 Oct 11 2004 all.dem
613 May 16 22:28 approx.f
71658 May 18 20:11 array1.exe
696 May 18 21:28 array1.f
70854 May 18 21:38 array2.exe
604 May 18 21:38 array2.f
Redirection of standard output


We can change the standard input/output
by using “redirection”
Ex) Change standard output for ls
command to a file
福島康裕@mango ~
$ ls –l > list.txt
redirection of stdout : >
福島康裕@mango ~
stdin : <
$ cat list.txt
total 332
-rwxr-xr-x 1 福島康裕 None 70125 May 16 23:24 a.exe
-rwxr-x--- 1 福島康裕 None 2692 Oct 11 2004 all.dem
-rwxrwxrwx 1 福島康裕 None 613 May 16 22:28 approx.f
-rwxr-xr-x 1 福島康裕 None 71658 May 18 20:11 array1.exe
-rwxrwxrwx 1 福島康裕 None 696 May 18 21:28 array1.f
-rwxr-xr-x 1 福島康裕 None 70854 May 18 21:38 array2.exe
Redirection of standard output

Ex) Copy a file using cat and redirection
福島康裕@mango ~
$ cat list.txt > list2.txt
redirection of stdout : >
福島康裕@mango ~
stdin : <
$ cat list2.txt
total 332
-rwxr-xr-x 1 福島康裕 None 70125 May 16 23:24 a.exe
-rwxr-x--- 1 福島康裕 None 2692 Oct 11 2004 all.dem
-rwxrwxrwx 1 福島康裕 None 613 May 16 22:28 approx.f
-rwxr-xr-x 1 福島康裕 None 71658 May 18 20:11 array1.exe
-rwxrwxrwx 1 福島康裕 None 696 May 18 21:28 array1.f
-rwxr-xr-x 1 福島康裕 None 70854 May 18 21:38 array2.exe
Redirection of standard input

Running program witharray


by inputting from keyboard (=standard input)
by inputting from a file (redirected standard input)
福島康裕@mango ~
$ ./array2.exe
# 1>>
80
# 2>>
90
# 3>>
67
# 4>>
50
# 5>>
70
mean: 71.4
standard deviation: 29.9866637
福島康裕@mango ~
$
福島康裕@mango ~
$ ./array2.exe < in.dat
# 1>>
# 2>>
# 3>>
# 4>>
# 5>>
mean: 71.4
standard deviation: 29.9866637
福島康裕@mango ~
$
80
90
67
50
70
in.dat
Pipe

We can connect two commands with
a pipe command | command
福島康裕@mango ~
Result was put into less command
$ ls –al | less
and now we can go up and down !
total 332
-rwxr-xr-x 1 福島康裕 None 70125 May 16 23:24 a.exe
-rwxr-x--- 1 福島康裕 None 2692 Oct 11 2004 all.dem
-rwxrwxrwx 1 福島康裕 None 613 May 16 22:28 approx.f
-rwxr-xr-x 1 福島康裕 None 71658 May 18 20:11 array1.exe
-rwxrwxrwx 1 福島康裕 None 696 May 18 21:28 array1.f
-rwxr-xr-x 1 福島康裕 None 70854 May 18 21:38 array2.exe
Summary
AND and OR
 Array in FORTRAN
 Indentation: A format for letting the
source code look more structured.
 Unix (cygwin): Standard input and
output
 Unix (cygwin): Redirection
 Unix (cygwin): Pipe
