Vous êtes sur la page 1sur 14

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)
𝐟𝐟(𝐱𝐱) = � 𝟎𝟎 (𝐱𝐱 = 𝟎𝟎)
�𝐱𝐱𝟐𝟐 + 𝟐𝟐 (𝐱𝐱 < 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

#################################################################################

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 (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

6
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)

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)<x(i)) then
s=x(k)
x(k)=x(i)
x(i)=s
endif
enddo
k=k+1

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  10 40 70 
A( I , J ) =    20 50 80
 2 5 8 , B ( I , J ) =  
3 6 9
  30 60 90
 
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
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

Vous aimerez peut-être aussi