Kurdistan Iraqi Region
Ministry of Higher Education
University of Sulaimani
College of Science
Physics Department
Dr. Dlear R. Saber
Dr. Omed Gh. Abdullah
Mr. Ary A. Abdulrahman
Mr. Shaho Osman
2009 - 2010
First step to
Computer Programming
With FORTRAN 90
First stage
2
Problem (1): Write a Fortran program to calculate the value of function ๐๐(๐๐); where x= [-5, 0, 5]:
๐๐(๐ฑ๐ฑ) = ๏ฟฝ ๐ญ๐ญ๐ญ๐ญ๐ญ๐ญโ๐๐(๐ฑ๐ฑ) + ๐๐๐ฑ๐ฑ (๐ฑ๐ฑ > 0) ๐๐ (๐ฑ๐ฑ = ๐๐) ๏ฟฝ๐ฑ๐ฑ๐๐+ ๐๐ (๐ฑ๐ฑ < 2) Solution: read*, x if(x>0) then y=Atan(x) +exp(x) print*, x, y elseif(x<0) then y=sqrt(x**2+2) print*, x, y else y=0 print*, x, y endif end #################################################################################
Problem (2): Write a program in Fortran 90 using coditional control statement to find the value of
(๐๐, ๐พ๐พ) according to value of ๐๐, ๐๐ from the equations below, if(๐๐ = ๐๐) and (๐๐ = ๐๐): ๐ณ๐ณ = |๐ฑ๐ฑ| + (๐ฑ๐ฑ + ๐ฒ๐ฒ) ๐ฐ๐ฐ =|๐ฑ๐ฑ โ ๐ฒ๐ฒ| ๐ณ๐ณ ๏ฟฝ ๐ฑ๐ฑ โฅ ๐๐ ๐ณ๐ณ = (๐ฑ๐ฑ + ๐ฒ๐ฒ)๐ฑ๐ฑ ๐๐(๐ฑ๐ฑ + ๐ณ๐ณ) ๐ฐ๐ฐ = ๐ฑ๐ฑ๐๐+ ๐๐๐ณ๐ณ ๏ฟฝ ๐ฑ๐ฑ < 0 Solution: do read*,x,y if(x==0.or.x>0) goto 50 z=(x+y)**3/(x+z) w=x**2+2*z goto 70 50 z=abs (x)+(x+y) w=z/abs(x+z) 70 print*, z,w read*, choice if (choice==0) exit enddo end #################################################################################
3
Problem (3): Write a Fortran program to calculate exponential of (1) from library function (๐ฌ๐ฌ๐ฌ๐ฌ๐ฌ๐ฌ)
and from the following series up to (15):
๐๐๐ฑ๐ฑ = ๐๐ + ๐ฑ๐ฑ +๐ฑ๐ฑ๐๐ ๐๐! + ๐ฑ๐ฑ๐๐ ๐๐! + ๐ฑ๐ฑ๐๐ ๐๐! + โฏ Solution: x=1 s=1 do i=1,15 f=1 do j=1,i f=f*j enddo s=s+x**i/f enddo print*,s,exp(x) end #################################################################################
Problem (4): Write a Fortran program to calculate exponential of (1) from library function (๐ฌ๐ฌ๐ฌ๐ฌ๐ฌ๐ฌ)
and from the following series up to (15), [without using do-loops]:
๐๐๐ฑ๐ฑ = ๐๐ + ๐ฑ๐ฑ +๐ฑ๐ฑ๐๐ ๐๐! + ๐ฑ๐ฑ๐๐ ๐๐! + ๐ฑ๐ฑ๐๐ ๐๐! + โฏ Solution: x=1 b=1 n=0 s=1 10 n=n+1 if (n<=15) then b=b*x/n s=s+b goto 10 endif z=exp(x) print*,s,z end #################################################################################
Problem (5): Write a fortran program to calculate ๐๐๐๐๐๐(๐๐) from library function (๐ช๐ช๐ช๐ช๐ช๐ช) and from following series up to power (20):
๐๐๐๐๐๐( ๐๐) = ๐๐ โ
๐๐๐๐!๐๐+
๐๐๐๐!๐๐โ
๐๐๐๐!๐๐+ โฏ
Solution:
read*, x s=1
4 sign=-1 do i=2,20,2 f=1 do j=1,i f=f*j enddo s=s+(sign*x**i)/f sign=-1*sign enddo print*,s,cos(x) end #################################################################################
Problem (6): Write a Fortran program to calculate sin(x) from library function (๐ช๐ช๐บ๐บ๐บ๐บ) and the
following series up to power (15), [input the value of ๐๐ by degree]:
๐๐๐ฌ๐ฌ๐ญ๐ญ ๐ฑ๐ฑ =๐๐! โ๐ฑ๐ฑ ๐ฑ๐ฑ๐๐! +๐๐ ๐ฑ๐ฑ๐๐! โ โฏ๐๐ Solution: read*, x c=(22./7)/180 x=x*c sign=1 s=0 do i=1,15,2 f=1 do j=1,i f=f*j enddo s=s+sign*x**i/f sign=-1*sign enddo print*,s,sin(x) end #################################################################################
Problem (7): Write a Fortran program to calculate the sum of series from one to (n) integer [without using do-loops]:
Solution: integer i,n read*,n sum=0 do 10 i=1,n sum=sum+i print*,i,sum
5
10 continue print*,sum end
#################################################################################
Problem (8): Write afortran program to print the following series, [without using do-loops]:
( ๐๐ , ๐๐ , ๐๐ , ๐๐ , ๐๐๐๐ , ๐๐๐๐ , ๐๐๐๐ , ๐๐๐๐๐๐ ) Solution: integer n n=1 10 print*,n If (n<=100) then n=2*n goto 10 endif end #################################################################################
Problem (9): Write a Fortran program to find the real solution of the function:
๐๐(๐๐) = ๐๐๐๐+ ๐๐๐๐ โ ๐๐
Using the equation:
๐๐ =โ๐๐ ยฑ โ๐๐๐๐๐๐๐๐โ ๐๐๐๐๐๐ Solution: read*, a,b,c s=b**2-4*a*c if (s<0) then print*,'ther is no solution' else x1=(-b+sqrt(S))/(2*a) x2=(-b-sqrt(s))/(2*a) print*,x1,x2 endif end #################################################################################
Problem (10): Write a Fortran program to read a two number (๐๐, ๐๐), and check if (๐๐) is posetive or negative or zero , and compare (๐๐) with (๐๐):
Solution:
read*,a,b if (a>0) then if (a>b) then
6
print*,'(a) is posetive and greater than (b)' elseif (a<b) then
print*,'(a) is posetive and smaller than (b)' else
print*,'(a) is posetive and equal to (b)' endif
elseif (a<0) then if (a>b) then
print*,'(a) is negative and greater than (b)' elseif (a<b) then
print*,'(a) is negative and smaller than (b)' else
print*,'(a) is negative and equal to (b)' endif
else
if (a>b) then
print*,'(a) is zero and greater than (b)' elseif (a<b) then
print*,'(a) is zero and smaller than (b)' else
print*,'(a) is zero and (b) is zero ' endif
endif end
#################################################################################
Problem (11): Write a loop to read (๐๐) real numbers and print their sum after all aditions:
Solution: s=0.0 read*, n summation: do i=1,n read*,i sum=sum+i print*,sum end do summation end #################################################################################
Problem (12): Write a Fortran program to find the maximum and minimum values among ten numbers; [read the the numbers from text data file]:
Solution:
open(5,file='data.txt') read(5,*)x
7 max=x min=x do i=1,9 read(5,*)x if (x>max) max=x if (x<min) min=x enddo
write(*,*) 'maximum no.=',max write(*,*) 'minimum no.=',min end
#################################################################################
Problem (13): Write a Fortran program to find the number of odd and even integers among (15) numbers; [read the the numbers from text data file]:
Solution: open(5,file='data.txt') odd=0 even=0 do i=1,15 read(5,*)x if (x==(int(x/2)*2)) then even=even+1 else odd=odd+1 endif enddo write(*,*)'number of odd=',odd write(*,*)'number of even=',even end #################################################################################
Problem (14): Write a Fortran program to sort (15) numbers, from minimum to maximum; [read the the numbers from text data file]:
Solution: dimension a(15) open (5,file='data.txt') do i=1,15 read(5,*) a(i) enddo do i=1,14 do j=i+1,15 if (a(i)>a( j))then x=a(i)
8 a(i)=a(j) a(j)=x endif enddo enddo do i=1,15 write(*,*) a(i) enddo end #################################################################################
Problem (15): Write a Fortran program to computes the square rootes of 1, 1.5, 2, 2.5, 3, ..., 10 by Newtonโs method: ๐บ๐บ๐ต๐ต๐ต๐ต ๐๐ =๐๐๐๐๏ฟฝ๐๐ +๐๐๐๐๏ฟฝ Solution: do b=1,10,0.5 x=b do xn=0.5*(x+b/x) if (abs (x-xn)<0.00001) exit x=xn enddo print*,'sqrt(',b,')=',x enddo end #################################################################################
Problem (16): Write a Foretran program to show how to write a counting loop with real numbers.
variable ๐ฑ๐ฑ receves values โ๐๐. ๐๐ , โ๐๐. ๐๐๐๐ , โ๐๐. ๐๐ , โ๐๐. ๐๐๐๐ , ๐๐. , ๐๐. ๐๐๐๐ , ๐๐. ๐๐ , ๐๐. ๐๐๐๐ ๐๐๐๐๐๐ ๐๐. ๐๐; [without using do-loops]
Solution:
real , parameter :: lower = -1.0 real , parameter :: upper = 1.0 real , parameter :: step = 0.25 real :: x=lower do if (x>upper) exit print*, x x=x+ step enddo end #################################################################################
9
Problem (17): Write a Fortran program to multiple i and j , where i=1:9 , j=1:9
Solution: integer i, j do i=1,9 do j=1,9 k= i*j print*,k enddo enddo end #################################################################################
Problem (18): Write a program in Fortran 90 to calculate the value of ๐ช๐ช from the equation below: ๐๐ = ๏ฟฝ ๏ฟฝ ๐ฌ๐ฌ โ ๐ฃ๐ฃ ๐๐ ๐ฃ๐ฃ=๐๐ ๐๐ ๐ฌ๐ฌ=๐๐ Solution: program summation s=0.0 do i=1,3 do j=1,5 s=s+i*j enddo enddo
write(*,*)'The result value of S=', s end program summation
#################################################################################
Problem (19): Write a Fortran program to sort the following numbers from biger to smaller [use
Data comand to read the numbers]:
๐ฑ๐ฑ = [๐๐ , ๐๐ , โ๐๐ , ๐๐ , ๐๐ , ๐๐ , ๐๐ , ๐๐ , ๐๐ , ๐๐] Solution: dimension x (10) Parameter (n=10) data (x(i),i=1,n) /5,8,0,2,6,3,-2,4,9,1/ k=1 10 do i=k,n if (x(k)<x(i)) then s=x(k) x(k)=x(i) x(i)=s endif enddo k=k+1
10
If (k<=n) goto 10 print*,(x(i),i=1,n) end
#################################################################################
Problem (20): Write a Fortran program to computes these two quantites from (10) numbers; [read the the numbers from text data file]:
๐ฑ๐ฑ๏ฟฝ =๐ญ๐ญ ๏ฟฝ ๐ฑ๐ฑ๐ฌ๐ฌ๐๐ ๐ญ๐ญ ๐ฌ๐ฌ=๐๐ ๐๐๐๐= ๐๐ ๐ญ๐ญ โ ๐๐ ๏ฟฝ(๐ฑ๐ฑ๐ฌ๐ฌ โ ๐ฑ๐ฑ๏ฟฝ) ๐ญ๐ญ ๐ฌ๐ฌ=๐๐ Solution: dimension x(10) real::xbar=0 std=0 n=10 open(1,file='data.text') do i=1,n read(1,*) x(i) xbar=xbar+x(i) enddo xbar=xbar/n do i=1,n std=std+(x(i)-xbar)**2 enddo std=sqrt(std/(n-1)) write(*,*)'mean=',xbar write(*,*)'std=',std end #################################################################################
Problem (21): Write a Fortran program to calculate the ages average of (10) students in the first stage; [read the the numbers from text data file], where:
๐ญ๐ญ๐๐๐๐ ๐ญ๐ญ๐๐๐๐๐๐๐ญ๐ญ๐๐๐๐ = ๏ฟฝ ๐๐๐ฌ๐ฌ ๐๐๐๐ ๐๐=๐๐ Solution: real,dimension(10)::a open(4,file='data.txt') sum=0.0 do i=1,10 read(4,*) a(i) sum=sum+a(i) enddo
11
average = sum/10
print*,'the age average of student is =',average end
#################################################################################
Problem (22): Write a Fortran program to find the average marks of class (10 students) for computer examination using dimension statement; [read the data from screan]:
Solution:
real,dimension(10)::x real::s
s=0.0 do i=1,10
print*,'supply mark of student no.',i read*, x(i) s=s+x(i) end do print*,'average s core is ', s/10 end #################################################################################
Problem (23): Write a program in Fortran 90 to find the value of ( S ) from sireas bellow:
๐ช๐ช = ๐๐ โ๐๐๐๐๐๐+๐๐๐๐๐๐โ๐๐๐๐๐๐+๐๐๐๐๐๐โ๐๐๐๐๐๐๐๐+๐๐๐๐๐๐๐๐ Solution: s=1 j=0 do i=2,20,2 j=j+1 s=s+(-1)**j/2.**i enddo print*,'the value of S =',s end #################################################################################
Problem (24): Write a Fortran program to calculate (๐ฌ๐ฌ) from following equation:
๐ฌ๐ฌ = ๏ฟฝ๏ฟฝ(๐๐ + ๐๐) ๐๐๐๐ ๐๐=๐๐ ๏ฟฝ ๐๐/๐๐ Solution: p=0.0 do n=1,10 p=p+(n+5)
12 enddo p=sqrt(p) print*,p end #################################################################################
Problem (25): Write a Fortran program to calculat the value of (๐จ๐จ๐จ๐จ) from the following equation, when (๐๐ = ๐๐) and (๐๐ = ๐๐): ๐จ๐จ๐จ๐จ = ๏ฟฝ๏ฟฝ(๐๐ + ๐๐)๐๐ ๐๐๐๐ ๐๐=๐๐ ๏ฟฝ ๐๐/๐๐ Solution: Al=0.0 n=5 m=7 do i=1,12 Al=Al+(m+n)**2 enddo Al=sqrt(Al) print*, Al end #################################################################################
Problem (26): Write a program in Fortran 90 to calculate the resultant matrix ๐ช๐ช(๐บ๐บ, ๐ฑ๐ฑ) from [๐ช๐ช(๐บ๐บ, ๐ฑ๐ฑ) = ๐จ๐จ(๐บ๐บ, ๐ฑ๐ฑ) + ๐ฉ๐ฉ(๐บ๐บ, ๐ฑ๐ฑ)] when: Solution: integer,dimension(3,3):: a,b,c do j=1,3 do i=1,3 read(*,*)a(i,j),b(i,j) enddo enddo do j=1,3 do i=1,3 c(i,j)=a(i,j)+b(i,j) enddo enddo do i=1,3 write(*,*)(c(i,j),j=1,3) enddo
๏ฃบ
๏ฃบ
๏ฃบ
๏ฃป
๏ฃน
๏ฃฏ
๏ฃฏ
๏ฃฏ
๏ฃฐ
๏ฃฎ
=
๏ฃบ
๏ฃบ
๏ฃบ
๏ฃป
๏ฃน
๏ฃฏ
๏ฃฏ
๏ฃฏ
๏ฃฐ
๏ฃฎ
=
90
60
30
80
50
20
70
40
10
)
,
(
,
9
6
3
8
5
2
7
4
1
)
,
(
I
J
B
I
J
A
13
end
#################################################################################
Problem (27): Write a program in Fortran 90 to find the transpose of the following matrix:
๐บ๐บ = ๏ฟฝ
๐๐ ๐๐ ๐๐ ๐๐๐๐
๐๐ ๐๐ ๐๐ ๐๐๐๐
๐๐ ๐๐ ๐๐ ๐๐๐๐
๏ฟฝ
Solution: program transpose_array integer,dimension(3,4):: N integer,dimension(4,3):: M do i=1,3 read(*,*)(N(i,j),j=1,4) enddo do i=1,3 do j=1,4 m(j,i) = N(i,j) enddo enddo do i=1,4 write(*,*)(M(i,j),j=1,3) enddoend Program transpose_array
#################################################################################
Problem (28): Write a program in Fortran 90 to find the value of matrix ๐ฉ๐ฉ when ๐ฒ๐ฒ = ๐๐:
Solution: program B_array integer,dimension(2,2)::A,B read(*,*)K do J=1,2 do I=1,2 read(*,*)A(I,J) B(I,J)=K*A(I,J) enddo enddo
print*,'The result of matrix' do I=1,2
write(*,*)(B(I,J),J=1,2) enddo
end Program B_array
๏ฃบ
๏ฃป
๏ฃน
๏ฃฏ
๏ฃฐ
๏ฃฎ
ร
=
3
6
5
4
K
B
14
#################################################################################
Problem (29): Write a Fortran program to find the result of multiplication of two matrix
๐ช๐ช(๐๐, ๐๐) = ๐จ๐จ(๐๐, ๐๐) โ ๐ฉ๐ฉ(๐๐, ๐๐), where: ๐จ๐จ(๐๐, ๐๐) = ๏ฟฝ๐๐ โ๐๐๐๐ ๐๐ ๐๐ ๐๐ ๏ฟฝ ๐ฉ๐ฉ(๐๐, ๐๐) = ๏ฟฝโ๐๐ ๐๐ ๐๐๐๐ ๐๐ ๐๐๏ฟฝ Solution: integer,dimension(3,2):: A integer,dimension(2,3):: B integer,dimension(3,3):: C
write(*,*)'Input the matrix A(3,2)' do i=1,3
read(*,*) (A(i,j),j=1,2) enddo
write(*,*)'Input the matrix B(2,3)' do i=1,2 read(*,*) (B(i,j),j=1,3) enddo do i=1,3 do j=1,3 C(i,j)=0 do k= 1,2 C(i,j)=C(i,j)+A(i,k)*B(k,j) enddo enddo enddo do I=1,3 print*, (c(i,j),j=1,3) enddo end #################################################################################