UNIVERSITE HASSAN II DE جامعة الحسن الثاني بالدار
CASABLANCA Faculté des البيضاء
Sciences Aïn Chock
كلية العلوم عين الشق
TD/TP N°1 Rappels sur le langage Fortran
Exercice 1: (ordre de priorité des calculs, les fonctions internes, ouverture des fichiers,
les différents types d’objets et les boucles)
Ecrire un programme fortran qui calcul la valeur suivante de y :
2
1 x 1
y e x tg
x2 1 x 1
pour x=0.3835
1- Introduire la valeur de x dans le programme.
2- Lire la valeur de x sur l’écran.
3- Lire la valeur de x à partir d’un fichier et écrire le résultat y dans un autre fichier.
4- Ecrire le résultat obtenu avec 5 chiffres après la virgule
5- Refaire les calculs en double précision.
6- Exécuter le programme pour −6 ≤ 𝑥 ≤ 6 avec ∆𝑥 = 0.1
Exercice 2: (Les différentes structures conditionnelles)
Calculer la valeur de y pour une valeur donnée de x
ex si 6 x 0
y si x0
1
si 0 x6
x
Exécuter le programme pour les valeurs suivantes de x : -0.3561, 0, et 2.5618
Exercice 3 : (Branchement conditionnel externe et interne dans une boucle)
Ecrire un programme qui permet de calculer la somme suivante :
100
1 n
σ=∑ (2)
n=0
Calculer σ pour n# 5
Introduisez un test d’arrêt des calculs lorsque 𝜎 ≤ 1.99
UNIVERSITE HASSAN II DE جامعة الحسن الثاني بالدار
CASABLANCA Faculté des البيضاء
Sciences Aïn Chock
كلية العلوم عين الشق
Exercice 4 : (Les tableaux et les matrices)
Ecrire un programme qui permet de calculer le produit scalaire et le produit vectoriel des deux
vecteurs suivants :
⃗
⃗ = 2.75𝑖 − 0.125𝑗 + √2𝑘
𝑉
𝑤 ⃗
⃗⃗ = 0.15𝑖 − 1.3𝑗 + ln(3)𝑘
Ecrire un programme qui calcul la somme des deux matrices suivantes, la matrice transposée et la
trace de la matrice somme:
0.75 −2.1 3
𝐴 = 2.3 1.5 5.2
−1 3 0.25
1.15 −1.3 2
𝐵 = 1.25 1.5 0.55
−2.5 2.1 0.75
UNIVERSITE HASSAN II DE جامعة الحسن الثاني بالدار
CASABLANCA Faculté des البيضاء
Sciences Aïn Chock
كلية العلوم عين الشق
Corrigé du TD/TP N°1
Exercice 1 :
Program rappels
! Rappels sur le langage fortran
Implicit none ; double precision x,y,p
Open(1,file=’don.dat’) ; open(2,file=’res.dat’)
Do 10 x=-5,5,0.1
Y=(1.d0/dsqrt(x**2+1.d0))-(dexp(-2.d0*pi/x))+dtan((x-1.d0)/(x-1.d0))
Write(2,150)x,y
10 continue
150 format(2(215.5,2x))
End
Exercice 2 :
Program calcul ; implicit none ; real x,y,pi ; pi=4.0*atan(1.0)
Read(*,*)x
If(x>=-5.and.x<=0)then; y=exp(x); else if(x==0)then; y=pi; else if(x<=5)then; y=1./sqrt(x); end if
Write(*,*)x,y
Stop; end
Exercice 3:
Program exercice3; implicit none; real sigma; integer n
Sigma=0.
Do 10 n=0,100
! if(n==5)goto 10
If(sigma>=1.99)goto 50
Sigma=sigma+(1./2.)**n
10 continue
50 write(*,*)n,sigma
End
Exercice 4:
1ére partie:
Program calcul
real v(n),w(3),vectoriel(3),scalaire
open(1,file=’d_vect.dat’); open(2,file=’r_vect.dat’)
Read(1,*)(v(i),i=1,3);read(1,*)(w(i),i=1,3)
! calcul du produit scalaire
UNIVERSITE HASSAN II DE جامعة الحسن الثاني بالدار
CASABLANCA Faculté des البيضاء
Sciences Aïn Chock
كلية العلوم عين الشق
Scalaire=0.; do 10 i=1,3 ; scalaire=scalaire+v(i)*w(i)
10 continue
write(2,*)’prod scalaire=’, scalaire
! calcul du produit vectoriel
vectoriel(1)=v(2)*w(3)-v(3)-w(2);vectoriel(2)= -(v(1)*w(3)-v(3)*w(1));vectoriel(3)=v(1)*w(2)-v(2)-w(1)
write(2,400)(vectoriel(i),i=1,3)
format(3(f10.2,2x))
end
2éme partie:
program calcul
!ce effectue des opérations sur deux matrices:
real A(3,3),B(3,3),C(3,3),d(3,3)
open(1,file='don_matrice.dat'); open(2,file='res_matrice.dat')
!lecture des deux matrices
read(1,*)((a(i,j),j=1,3),i=1,3)
read(1,*)((b(i,j),j=1,3),i=1,3)
!calcul de la somme des deux matrices:
call somme(a,b,3,3,c);write(2,*)'La matrice somme';write(2,400)((c(i,j),j=1,3),i=1,3)
!calcul de la transposée de C:
call transpos(c,3,3,d);write(2,*)'transposée de la matrice C';write(2,400)((d(i,j),j=1,3),i=1,3)
!calcul de la trace de C:
call trace(c,3,tr);write(2,*)'la trace de C est:';write(2,*)'tr=',tr
400 format(3(f10.2,2x))
end
subroutine somme(a,b,m,n,c)
real a(m,n),b(m,n),c(m,n)
do 120 i=1,m
do 120 j=1,n
C(i,j)=a(i,j)+b(i,j)
120 continue
return
end
subroutine transpos(c,m,n,d)
real c(m,n),d(n,m)
do 150 i=1,m
do 150 j=1,n
d(i,j)=c(j,i)
150 continue
Return
end
UNIVERSITE HASSAN II DE جامعة الحسن الثاني بالدار
CASABLANCA Faculté des البيضاء
Sciences Aïn Chock
كلية العلوم عين الشق
subroutine trace(a,n,tr)
real a(n,n),tr
tr=0.
do 180 i=1,n
do 180 j=1,n
if(j==i)then
tr=tr+a(i,j)
end if
180 continue
return
end