TD DE FORTRAN
Exercice 1 : Ecrire un programme qui permet de saisir 10 nombres positifs au clavier et qui
calcule et affiche leur moyenne
Program Exercice_1
Implicit none
integer compteur
real somme,moyenne,nombre
somme=0
do compteur=1,10
read(*,*) nombre
do while(nombre.lt.0)
read(*,*) nombre
enddo
somme=somme+nombre
enddo
moyenne=somme/(compteur-1)
write(*,*) 'La somme des',compteur-1,'nombres saisis est',somme, 'et leur moyenne est',moyenne
end
Exercice 2 :Même question en supposant que l’on ne sait pas combien de nombres devront être
saisis
Program Exercice_2
Implicit none
Integer compteur
Real nombre,somme,moyenne
somme=0
nombre=0
compteur=1
do while(nombre.ge.0)
somme=somme+nombre
Exer
read(*,*) nombre
compteur=compteur+1
enddo
moyenne=somme/(compteur-2)
End
Exercice 3 : Ecrire un programme qui permet de saisir une série de nombres entiers positifs et
qui après saisie ,affiche les valeurs du plus grand et du plus petit
Program Exercice_3
Implicit none
!Ce programme vous permet de saisir des nombres entiers positifs,et après saisie
!Affiche les valeurs du plus petit et du grand saisis,tapez un nombre negatif pour arrêter la saisie
integer compteur,nombre,petit,grand
compteur=1
grand=0
read(*,*) nombre
petit=nombre
do while(nombre.ge.0)
if(nombre.le.petit) then
petit=nombre
endif
compteur=compteur+1
read(*,*) nombre
if(nombre.ge.grand) then
grand=nombre
endif
enddo
Exer
write(*,*) 'Le plus grand des',compteur-1,'nombres saisis est',grand, 'et le plus petit',petit
end
Exercice 4 :Ecrire un programme qui permet de saisir une série de nombres entiers
positifs puis qui propose indefiniment en boucle à l’utilisateur ,par l’intermediaire d’une sorte de
menu à choix multiple,d’afficher la valeur minimale,la valeur maximale,la somme ou la moyenne des
nombres entrés ou encore quitter le programme.
program exercice_4
implicit none
integer nombre,choix,cpt,mini,maxi,somme
real moyenne
!Initialisation
nombre=0
somme=0
moyenne=0
choix=0
cpt=1
read(*,*)nombre
if (nombre.ge.0)then
mini=nombre
maxi=nombre
somme=nombre
endif
do while(nombre.ge.0)
Exer
cpt=cpt+1
read(*,*) nombre
if (nombre.ge.0) then
somme=somme+nombre
moyenne=real(somme)/cpt
mini=amin0(mini,nombre)
maxi=amax0(maxi,nombre)
else
write(*,*)'Fin de la saisie'
endif
enddo
write(*,*)'Saisir:'
do while((choix.ge.0).and.(choix.le.4))
read(*,*)choix
if (choix.eq.1) then
elseif(choix.eq.2) then
elseif(choix.eq.3) then
elseif(choix.eq.4) then
endif
enddo
Exer
end
Exercice 5 : En utilisant les instructions DO/IF écrire un programme pour calculer la somme et
la moyenne des nombres pairs ,de 1 à 100 mais excluant les nombres entre 22 et 78.
Program Exercice_5
Implicit none
integer cpt1,cpt2,compteur,nbre1,nbre2,som1,som2,somme
real moyenne
som1=0
som2=0
cpt1=1
cpt2=13
do nbre1=0,22,2
cpt1=cpt1+1
som1=som1+nbre1
enddo
do nbre2=78,100,2
cpt2=cpt2+1
som2=som2+nbre2
enddo
cpt2=cpt2-14
compteur=cpt1+cpt2
somme=som1+som2
moyenne=somme/compteur
write(*,*) 'La somme des',compteur,'nombres pairs saisis est',somme,'et leur moyenne est',moyenne
end
Exer
Variante
Program Exercice_5
Implicit none
Integer i,som,cpt
Real moy
Som=0
Cpt=1
Do i=0,100,2
If((i.le.22).or.(i.ge.78)) then
Cpt=cpt+1
Som=som+i
Moy=som/(cpt-1)
Endif
Enddo
Write(*,*) ‘La somme des’,cpt,’nombres saisis est :’,som,’et leur moyenne est’,moy
End
Exercice 6 : Ecrire un programme pour écrire les nombres des jours dans le mois,de 1(Janvier) à
(Décembre) de la facon suivante :
1 31
2 28
. ..
12 31
Program Exercice2
integer i
do i=1,12
if(i.eq.1) then
write(*,*)i,' 31'
Exer
elseif(i.eq.2) then
write(*,*)i,' 28'
elseif(i.eq.3) then
write(*,*)i,' 31'
elseif(i.eq.4) then
write(*,*)i,' 30'
elseif(i.eq.5) then
write(*,*)i,' 31'
elseif(i.eq.6) then
write(*,*)i,' 30'
elseif(i.eq.7) then
write(*,*)i,' 31'
elseif(i.eq.8) then
write(*,*)i,' 31'
elseif(i.eq.9) then
write(*,*)i,' 30'
elseif(i.eq.10) then
write(*,*)i,' 31'
elseif(i.eq.11) then
write(*,*)i,' 30'
elseif(i.eq.12) then
write(*,*)i,' 31'
endif
enddo
End
Exercice 7 :Ecrire un programme qui calcule la somme et la moyenne des nombres aux
carrés,de 1 à 10 séparant les pairs et les impaires (c.a.d 12+32+….,et 22+42+…),de la facon suivante
Somme Moyenne
program Exercice_7
Exer
real moy1,moy2
integer i,som1,som2
som1=0
som2=0
do i=2,10,2
som1=som1+i**2
moy1=real(som1)/5
enddo
do i=1,9,2
som2=som2+i**2
moy2=real(som2)/5
enddo
write(*,*) 'Pairs',som1,moy1
write(*,*)'Impairs',som2,moy2
End
Program Exercice_8
real a,b,c,delta,x1,x2
read(*,*) a
read(*,*) b
read(*,*) c
delta=b**2-4*a*c
x1=(-b-sqrt(delta))/(2*a)
x2=(-b+sqrt(delta))/(2*a)
if(delta.eq.0) then
elseif(delta.gt.0)then
Exer
else
endif
End
DANS Z
Program Exercice_8
real a,b,c,delta,x1,x2
complex sigma,r1,r2
read(*,*) a
do while(a.eq.0e0)
read(*,*) a
enddo
read(*,*) b
read(*,*) c
delta=b**2-4*a*c
if(delta.eq.0e0) then
x1=-b/(2*a)
elseif(delta.gt.0e0)then
x1=(-b-sqrt(delta))/(2*a)
x2=(-b+sqrt(delta))/(2*a)
else
sigma=delta
r1=(-b+csqrt(sigma))/(2*a)
r2=(-b-csqrt(sigma))/(2*a)
endif
End
Program multiplication
integer cpt,a,b,j,i,k
read(*,*) a
do while(a.eq.0)
read(*,*) a
enddo
do cpt=1,12
b=a*cpt
enddo
End
Implicit none
integer n,j
real resultat
resultat=1
read(*,*) n
do while(n.lt.0)
write(*,*) 'La factorielle d''un nombre negatif n''existe pas,veuillez taper un entier positif'
read(*,*) n
enddo
if(n.eq.0) then
Exer
write(*,*)n,'!=1'
else
do j=1,n
resultat=resultat*j
enddo
endif
write(*,*)n,'!=',resultat
end
Exercice 11 :On considère deux matrices 3X3 notées A et B, les coefficients de chacune de ces
deux matrices sont notées Aij et Bij. Ecrire le programme qui permet de calculer puis afficher la
matrice C=A*B
Program Produit_matriciel
Implicit none
integer dim,i,j,k
parameter(dim=3)
integer A(dim,dim),B(dim,dim),C(dim,dim)
write(*,*) 'Ce programme vous permet de saisir deux matrices,calcule et affiche leur produit'
do i=1,dim
do j=1,dim
write(*,'(a1,i1,i1,a1,$)')'A',i,j,'='
read(*,*) A(i,j)
enddo
enddo
do i=1,dim
write(*,*)(A(i,j),' ',j=1,dim)
enddo
do i=1,dim
do j=1,dim
write(*,'(a1,i1,i1,a1,$)')'B',i,j,'='
read(*,*) B(i,j)
enddo
Exer
enddo
do i=1,dim
write(*,*)(B(i,j),' ',j=1,dim)
enddo
do i=1,dim
do j=1,dim
C(i,j)=0
do k=1,dim
C(i,j)=C(i,j)+A(i,k)*B(k,j)
enddo
enddo
enddo
write(*,'(a5)')'AXB=C'
do i=1,dim
enddo
PROJET
PROGRAM Runge_Kutta
IMPLICIT none
REAL t,y,tpas,xini,xfin,j,k,l
read(*,*) xini,xfin
read(*,*) tpas
write(*,*)'donner y initiale'
read(*,*) y
k=xini-tpas
l=xfin-tpas
DO j = k,l,tpas
Exer
t=j+tpas
call rung(t,y,tpas)
ENDDO
END
SUBROUTINE rung(t,y,tpas)
IMPLICIT none
REAL kutta,h,t,tpas,y
REAL k1,k2,k3,k4
h=tpas/2.0
k1 = tpas*kutta(t, y)
k2 = tpas*kutta(t+h, y+k1/2.0)
k3 = tpas*kutta(t+h, y+k2/2.0)
k4 = tpas*kutta(t+tpas, y+k3)
y=y+(k1+(2.*(k2+k3))+k4)/6.0
RETURN
END
IMPLICIT none
REAL X,Y
kutta=X*Y
RETURN
ENDEnd
Program tri
Implicit none
integer dim,i,tmp,j
parameter(dim=10)
Exer
integer tab(dim)
write(*,*) 'Ce programme vous permet de saisir 10 valeurs et de les classer par ordre croissant'
read(*,*) (tab(i),i=1,dim)
write(*,*)'Votre tableau'
write(*,'(10i6)') (tab(i),i=1,dim)
do i=1,dim-1
do j=i+1,dim
if(tab(j).lt.tab(i)) then
tmp=tab(i)
tab(i)=tab(j)
tab(j)=tmp
endif
enddo
enddo
write(*,'(10i6)') (tab(i),i=1,dim)
end