Kurdistan Iraqi Region Ministry of Higher Education University of Sulaimani College of Science Physics Department
First step to Computer Programming With FORTRAN 90 First stage Dr. Dlear R. Saber Dr. Omed Gh. Abdullah Mr. Ary A. Abdulrahman Mr. Shaho Osman
2009 - 2010
Problem (1): Write a Fortran program to calculate the value of function 𝒇𝒇(𝒙𝒙); where x= [-5, 0, 5]: (𝐱𝐱 > 0) 𝐭𝐭𝐭𝐭𝐭𝐭−𝟏𝟏 (𝐱𝐱) + 𝐞𝐞𝐱𝐱 (𝐱𝐱 = 𝟎𝟎) 𝐟𝐟(𝐱𝐱) = � 𝟎𝟎 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
�𝐱𝐱𝟐𝟐 + 𝟐𝟐
(𝐱𝐱 < 2)
################################################################################# 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 (𝒚𝒚 = 𝟐𝟐): 𝐳𝐳 = |𝐱𝐱| + (𝐱𝐱 + 𝐲𝐲) � 𝐱𝐱 ≥ 𝟎𝟎 𝐳𝐳 𝐰𝐰 = |𝐱𝐱 − 𝐲𝐲|
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
(𝐱𝐱 + 𝐲𝐲)𝟑𝟑 (𝐱𝐱 + 𝐳𝐳) 𝐱𝐱 � 𝐱𝐱 < 0 𝐰𝐰 = 𝐱𝐱 𝟐𝟐 + 𝟐𝟐𝟐𝟐
𝐳𝐳 =
#################################################################################
2
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
𝐜𝐜𝐜𝐜𝐜𝐜( 𝒙𝒙) = 𝟏𝟏 −
𝒙𝒙𝟐𝟐 𝟐𝟐!
3
+
𝒙𝒙𝟒𝟒 𝟒𝟒!
−
𝒙𝒙𝟔𝟔 𝟔𝟔!
+⋯
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
4
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
5
print*,'(a) is posetive and greater than (b)' elseif (ab) then print*,'(a) is negative and greater than (b)' elseif (ab) then print*,'(a) is zero and greater than (b)' elseif (a
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
6
max=x min=x do i=1,9 read(5,*)x if (x>max) max=x if (xa( j))then x=a(i)
7
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 #################################################################################
8
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)
9
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
𝐚𝐚𝐚𝐚𝐚𝐚 𝐚𝐚𝐚𝐚𝐚𝐚𝐚𝐚𝐚𝐚𝐚𝐚𝐚𝐚 = � 𝐀𝐀𝐀𝐀 𝐈𝐈=𝟏𝟏
10
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)
𝑷𝑷 = ��(𝒏𝒏 + 𝟓𝟓)� 𝒏𝒏=𝟏𝟏
11
𝟏𝟏/𝟐𝟐
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:
1 4 7 A( I , J ) = 2 5 8 , B ( I , J ) = 3 6 9
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 12
10 40 70 20 50 80 30 60 90
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) enddo end Program transpose_array
𝟏𝟏 𝑵𝑵 = �𝟐𝟐 𝟑𝟑
𝟒𝟒 𝟕𝟕 𝟓𝟓 𝟖𝟖 𝟔𝟔 𝟗𝟗
𝟏𝟏𝟏𝟏 𝟏𝟏𝟏𝟏� 𝟏𝟏𝟏𝟏
################################################################################# Problem (28): Write a program in Fortran 90 to find the value of matrix 𝑩𝑩 when 𝑲𝑲 = 𝟓𝟓:
4 5 B = K × 6 3
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
13
################################################################################# 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 #################################################################################
14