TD de Fortran - Copie [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

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 2

31 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