Vous êtes sur la page 1sur 14

Exer

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

write(*,*) 'Entrer la valeur numero',compteur

read(*,*) nombre

do while(nombre.lt.0)

write(*,*) 'Tapez une valeur positive'

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

write(*,*) 'Tapez la valeur numero',compteur

read(*,*) nombre

compteur=compteur+1

enddo

moyenne=somme/(compteur-2)

write(*,*) 'La somme des',compteur-2,'nombres saisis est',somme,'et la moyenne est',moyenne

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

write(*,*) 'Tapez la valeur numero',compteur

read(*,*) nombre

petit=nombre

do while(nombre.ge.0)

if(nombre.le.petit) then

petit=nombre

endif

compteur=compteur+1

write(*,*) 'Tapez la valeur numero',compteur

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

!Saisie des valeurs au clavier

write(*,*)'CE PRAGRAMME VOUS DONNE LA VALEUR MINI,MAXI,LA SOMME,LA MOYENNE DE LA


SERIE SAISIE'

write(*,*)'Saisissez une serie de nombres entier positifs'

write(*,*)'Entrer un entier négatif pour arrêter la saisie'

write(*,*) 'Entrez la valeur numero',cpt

read(*,*)nombre

if (nombre.ge.0)then

mini=nombre

maxi=nombre

somme=nombre

endif

do while(nombre.ge.0)
Exer

cpt=cpt+1

write(*,*) 'Entrez la valeur numero',cpt

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

!Affichage des resultats

write(*,*)'Saisir:'

write(*,*)'(1):pour la valeur minimale de la serie'

write(*,*)'(2):pour la valeur maximale de la serie'

write(*,*)'(3):pour la somme de la serie'

write(*,*)'(4):pour la moyenne de la serie'

write(*,*)'Autre valeur pour quitter le programme'

do while((choix.ge.0).and.(choix.le.4))

read(*,*)choix

if (choix.eq.1) then

write(*,*)'La valeur minimale de la serie est:',mini

elseif(choix.eq.2) then

write(*,*)'La valeur maximale de la serie est:',maxi

elseif(choix.eq.3) then

write(*,*)'La somme de la serie est:',somme

elseif(choix.eq.4) then

write(*,*)'la moyenne de la serie est:',moyenne

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

write(*,*) 'Saisissez les nombres pairs allant de 0 à 22'

do nbre1=0,22,2

write(*,*) 'Valeur numero',cpt1,':',nbre1

cpt1=cpt1+1

som1=som1+nbre1

enddo

do nbre2=78,100,2

write(*,*) 'Valeur numero',cpt2,':',nbre2

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

Write(*,*) ‘Valeur numéro’,cpt

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 :

Mois nombre des jours

1 31
2 28

. ..

12 31

Program Exercice2

integer i

write(*,*) 'Mois Nombre de jours'

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

Pairs ……… ………….

Impairs ……… …………..

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(*,*) ' Somme Moyenne'

write(*,*) 'Pairs',som1,moy1

write(*,*)'Impairs',som2,moy2

End

Exercice 8 :Ecrire un programme de traitement complet du pôlynome de second dégré.


DANS R

Program Exercice_8

real a,b,c,delta,x1,x2

write(*,*)'Ce programme resoud dans R l''équation du second dégré de la forme ax2+bx+c=0'

write(*,*)'Entrez respectivement les valeurs de a,b et c'

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

write(*,*) 'Racines doubles',x2

elseif(delta.gt.0)then
Exer

write(*,*) 'Deux racines reelles',x1,'et',x2

else

write(*,*) 'Pas de solutions dans R'

endif

End

DANS Z

Program Exercice_8

real a,b,c,delta,x1,x2

complex sigma,r1,r2

write(*,*)'Ce programme resoud dans Z l''équation du second dégré de la forme ax2+bx+c=0'

write(*,*)'Entrez respectivement les valeurs de a,b et c'

read(*,*) a

do while(a.eq.0e0)

write(*,'(a,$)')'Tapez une valeur non nulle'

read(*,*) a

enddo

read(*,*) b

read(*,*) c

delta=b**2-4*a*c

if(delta.eq.0e0) then

x1=-b/(2*a)

write(*,*) 'Racines doubles',x1

elseif(delta.gt.0e0)then

x1=(-b-sqrt(delta))/(2*a)

x2=(-b+sqrt(delta))/(2*a)

write(*,*) 'Deux racines reelles',x1,'et',x2

else

sigma=delta

r1=(-b+csqrt(sigma))/(2*a)

r2=(-b-csqrt(sigma))/(2*a)

write(*,*) 'Deux racines complexes conjuguees',r1,'et',r2


Exer

endif

End

Exercice 9 : Ecrire un programme qui demande à l’utilisateur un nombre et affiche sa table de


multiplication

Program multiplication

integer cpt,a,b,j,i,k

write(*,*) 'Tapez le nombre dont vous voulez obtenir la table de multiplication'

read(*,*) a

do while(a.eq.0)

write(*,*) 'tapez un nombre non nul'

read(*,*) a

enddo

write(*,*) 'La table de multiplication se presente comme suit'

do cpt=1,12

b=a*cpt

write(*,'(i2,a2,i3,a1,i4)') a,' X',cpt,'=',b

enddo

End

Exercice 10 : Programme permettant de calculer la factorielle d’un nombre saisi et de l’afficher


Program factorielle

Implicit none

integer n,j

real resultat

resultat=1

write(*,*)'Ce programme vous demande un nombre et affiche sa factorielle,tapez un entier positif'

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

write(*,*) 'Matrice A'

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

write(*,*) 'Matrice B'

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

write(*,*) (C(i,j),' ',j=1,dim)

enddo

PROJET

PROGRAM Runge_Kutta

IMPLICIT none

REAL t,y,tpas,xini,xfin,j,k,l

write(*,*) 'donner x initiale et x finale'

read(*,*) xini,xfin

write(*,*) 'donner le pas'

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)

WRITE (*,*) t,y

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

REAL FUNCTION kutta(X, Y)

IMPLICIT none

REAL X,Y

kutta=X*Y

RETURN

ENDEnd

Exercice 12: On considère un tableau unidimensionnel de N nombres entiers saisis dans un


ordre quelconque. On se propose de trier les éléments du tableau dans l’ordre croissant en utilisant
l’algorithme suivant : On balaye le tableau du début à la fin et on compare chaque élément avec son
suivant, si l’élément suivant est plus petit, on permute ces deux éléments .En répétant ce balayage
un certain nombre de fois, le tableau sera trié .Ecrire le programme en prenant N=10

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(*,*)'Votre tableau trié'

write(*,'(10i6)') (tab(i),i=1,dim)

end

Vous aimerez peut-être aussi