Beruflich Dokumente
Kultur Dokumente
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:
𝟏𝟏𝟏𝟏
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 (𝒎𝒎 = 𝟕𝟕):
𝟏𝟏/𝟐𝟐
𝟏𝟏𝟏𝟏
#################################################################################
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