• Aucun résultat trouvé

R´ecursivit´e

Dans le document Licence de physique L3 PHYTEM (Page 38-41)

2.14 FORTRAN77-90-95 : filiation et diff´erences

2.14.5 R´ecursivit´e

a la suite les unes des autres en m´emoire simplement en incr´ementant un pointeur, ce qui revient au mˆeme, si ce n’est que c’est d’un maniement sensiblement plus d´elicat. . .

Les pointeurs sont importants en informatique parce que c’est le point de d´epart de l’allocation dynamique de m´emoire, puisqu’on acc`ede ainsi librement `a toute la m´emoire sans en r´eserver des morceaux `a telle ou telle vari-able.fortran90g`ere l’allocation dynamique de m´emoire autrement, comme on l’a vu, et -opinion qui n’engage que son auteur- de fa¸con nettement plus prudente.

Autant dire que pour l’essentiel du calcul scientifique, la capacit´e `a utiliser des tableaux efficacement est beau-coup plus importante. Toutefois,fortran90introduit les pointeurs avec un certain nombre de garde-fous.

Un pointeur doit ˆetre d´eclar´e avec le type de la variable vers lequel il pointe : un pointeur donn´e ne peut pas avoir pour cible un entier `a un moment et un r´eel un peu plus tard :

! declaration d’un pointeur vers un entier integer, pointer :: a

! declaration d’un pointeur vers un tableau reel real, dimension(:), pointer :: b

Il faut aussi d´eclarer explicitement des variables comme cible (target en anglais) :

integer, target :: n, m

real, dimension(150), target :: x, y

Si l’on veut queapointe versmetbversx, cela donne : a => m

b => x

Quel int´erˆet ? On peut, par exemple, faire pointer un poin-teur vers un morceau de tableau

b => x(100:150)

ce qui permet d’optimiser des transferts de donn´ees d’un morceau de tableau `a un autre : dans certains cas on

´economise ainsi de l’espace m´emoire.

2.14.5 R´ ecursivit´ e.

fortran90 l’autorise. . . c’est parfois commode, rarement efficace, du moins pour le calcul scientifique pur et dur. L’exemple que l’on donne toujours est le calcul de factorielles : la d´efinition den! est,

n! =n(n−1)!

Cela se programme sans difficult´e `a condition de sp´ecifier que la function est r´ecursive :

program factorielle implicit none integer :: n, fact

write(*,’("Entrer un entier : ",$)’) ; read(*,*) n write(*,*)"Factorielle", n," vaut ",fact(n) end

recursive function fact(n) result(f) implicit none

integer, intent(in) :: n integer :: f

if ( n > 1 ) then

f = n*fact(n-1) ! ici la fonction s’appelle

! elle-meme, c’est recursif else

f = 1 endif

end function fact

Cinq minutes de r´eflexion permettent cependant de re´ecrire la fonction :

integer function fact(n) implicit none

integer, intent(in) :: n integer :: f = 1

if ( n > 1 ) then do i = 2, n

f = f*i ! ici, ca n’a rien de recursif enddo

endif fact = f

end function fact

La deuxi`eme version est plus efficace parce que la premi`ere devra stocker tous les r´esultats interm´ediaires en m´emoire de fa¸con parfaitement inutile, ce que la deuxi`eme ne fait

´evidemment pas.

La r´ecursivit´e est une question importante pour les informaticiens dans la mesure o`u elle leur facilite con-sid´erablement la tˆache dans, par exemple, des probl`emes de logique tournant autour de la d´ecidabilit´e (Entschei-dungsproblem quand on veut montrer que l’on a de l’´education. . .). Pour un physicien qui se borne en g´en´eral

`a utiliser des algorithmes standards, cela reste assez marginal.

Apr`es cette premi`ere partie, on constate donc que le langage fortran90 est tr`es riche et que l’on peut faire avec ce langage des choses plutˆot ´elabor´ees. Il n’est bien sˆur pas utile d’apprendre tous les d´etails du langage en quelques semaines, mais il est indispensable d’en avoir une pratique suffisante pour ne pas ˆetre gˆen´e par des d´etails de programmation pendant les s´eances de travaux pratiques, au cours desquelles, tr`es rapidement, on se pr´eoccupera plus de physique que de langage ! Il est recommand´e d’ˆetre capable, assez rapidement, d’´ecrire sans trop h´esiter des programmes comportantconditions, boucles, tableaux, sous-programmes et entr´ees-sorties : le reste viendra avec la pratique, mais,

les bases doivent ˆ etre imp´ erativement apprises et maˆıtris´ ees, car sans cela, on s’expose ` a patauger sans grand profit dans un bourbier de d´ etails informa-tiques sans int´ erˆ et !

Ces remarques ach`event la partie langage de ce cours.

Dans la suite, les exemples seront donn´es enfortran, mais les algorithmes ´etudi´es ne d´ependent ´evidemment pas du langage de programmation choisi.

40 Licence de physique L3 : PHYTEM, Universit´e Pierre et Marie Curie Paris-6 & ENS-Cachan

Chapitre 3

Un prototype de TP

3.1 Introduction.

La physique num´erique requiert sans doute quelques connaissances dont le pr´esent cours a pour but de fournir l’essentiel. Il s’agit toutefois d’une activit´e essentiellement pratique : il faut ´ecrire des programmes qui, non seule-ment marchent, mais aussi r´epondent aux questions pos´ees de sorte que la physique du probl`eme soit trait´ee de fa¸con satisfaisante ; il faut pour cela un minimum d’-exp´erience pour, bien sˆur, maˆıtriser le langage, mais en outre avoir une familiarit´e suffisante avec l’environnement et les m´ethodes afin que ceux-ci deviennent l’aide puis-sante qu’ils doivent ˆetre et non plus la gˆene. . . qu’ils con-stituent sans conteste au d´ebut ! C’est la raison pour laque-lle cet enseignement comporte une part importante de travaux pratiques.

Chacune de ces s´eances de TP est consacr´ee `a un probl`eme de physique qui illustre l’usage que l’on peut faire de telle ou telle m´ethode. Elle est pr´ec´ed´ee d’une s´eance de travaux dirig´es au cours de laquelle on pr´esente le probl`eme, ´eventuellement on montre les limites du cal-cul analytique et on d´ecrit les m´ethodes num´eriques qui seront utilis´ees pour le traiter. Si le probl`eme pr´esente des difficult´es particuli`eres de programmation, celles-ci seront

´egalement abord´ees.

Il est attendu des ´etudiants qu’ils arrivent en s´eance de TP en ayant 1opris connaissance du probl`eme et 2oavec une bonne id´ee de comment le r´esoudre et qu’ils en par-tent en rendant un compte-rendu qui compte pour la note de contrˆole continu.

La question est ´evidemment :que doit-il y avoir dans un compte-rendu de TP ? Comme il s’agit d’un exer-cice un peu particulier, on traite ci-dessous, `a titre d’ex-emple, la question de de la lentille demi-boule `a la mani`ere d’un TP. . .

Dans le document Licence de physique L3 PHYTEM (Page 38-41)