Académique Documents
Professionnel Documents
Culture Documents
parV.Marry
1.Structuredunprogramme
a Structureverticale. On souhaite crire unprogramme effectuant leproduit dedeux nombres de notre choix. Appelonsceprogrammeproduit.Onappelleproduit.flefichiercontenantleslignesdecode duprogramme.Chaquelignedufichierconstitueuneinstructionduprogramme.Lapremire ligneseraprogramproduit,ladernireseraend.Entrelesdeux,diffrentesparties: En dbut de programme: une partie obligatoire de dclaration des variables utilises par la suite, avec leur type (entier, rel, caractre,). Dans le programme produit,ondoitdfiniraumoinslesdeuxvariablesrelles x et y,dontonveutfairele produit. Unepartielecturedesdonnes(surlcranoudansunfichier).Ici,onsouhaitelire lesvaleursdexetychoisiesparlutilisateur. Lecorpsduprogramme:calculduproduitx*y Unepartieimpressiondesrsultats (surlcranoudansunfichier):leprogramme transmetlersultatlutilisateur.
a Structurehorizontale. Unelignenepeutcontenirquuneseuleinstruction. Uneinstructioncommencelacolonne7etnepeutdpasserlacolonne72. Pour des raisons de clart ou si linstruction est trop longue, on peut continuer linstructionenpassantlaligneetenajoutantuncaractre(&parexemple)encolonne6 delanouvelleligne. LeslignescommenantparCou*danslacolonne1nesontpasexcutes:cesont descommentaires. Lescolonnes1 5contiennent ventuellementune tiquette(unentier)permettant denumroterlalignepouryfairerfrenceailleursdansleprogramme. Conseils : arer (sauter des lignes) et commenter le programme. Choisir des noms de variables parlants. Faire apparatre les diffrentes structures (boucles, conditions) en marquantdesretraitsendbutdeligne.
2 Dclarationdesvariables :typeetprcision.
Linstruction implicit none en dbut de programme oblige le programmateur dclarer
touteslesvariablesquilutiliseparlasuite:celapermetdvitercertaineserreurslorsdela compilation.Dansletableausuivantsontdonnslesdiffrentstypesdevariablesetlafaon de les dclarer dans le programme. La dernire colonne du tableau comporte une srie d'exemplesdelamaniredontonpeutaffectercesvariablesdanslecorpsduprogramme (voir4.a). type entier relde4octets relde8octets chanede6caractres constantelogique nombrecomplexe Exemple : dclaration integeri realx real*8xoudoubleprecisionx character*6mot logicala complexb Exemplesd'affectation i=10 x=1.5E2oux=0.015 x=1.5D2 mot=patate a=.true.oua=.false. b=(2.0,1.0)
3.Lectureetimpression
Instructiondelecture:read( , )
dsignelendroitoonvalire:*sicestlcran,unnumrosicestunfichier. dsignelafaondelire:*pardfautouunformat.
Lecturedansunfichier : Il faut avoir ouvert le fichier au pralable et lui avoir attribu un numro pour que le compilateursacheo allerchercherlinformation.Quandonnaplusbesoindufichier,onle ferme.Sionveutliredanslefichiernommliste,parexemple: open(60,file=liste) read(60,*)gamma close(60)
Cesremarquessontaussivalablespourlimpression,maislinstructiondevient: write( ,) Exemple :programproduit implicitnone realx,y write(*,*)combienvalentxety ? clordinateurattendiciquoncrivelesvaleursdexetylcran read(*,*)x,y ...
4.Ecrituredubloccentral
a. Rglesdaffectations Commentonslasuitedinstructionssuivante: a=2.0 constockelaconstante2.0danslavariableappelea. b=3.0 constockelaconstante3.0danslavariableappeleb. a=b constockelavaleurdebdanslavariablea.bvalant3.0,avautmaintenant c3.0aussi. Autreexemple: a=2.0 b=3.0 a=b+a cnesignifiepasqueb=0maisqueavautmaintenantlavaleurdeb+sonancienne cvaleur2.0,soit5.0 a. Lesfonctionsintrinsques Lordinateurconnatuncertainnombredefonctionstellesqueladdition(+),lasoustraction (),lamultiplication(*),ladivision(/)etlapuissance(2**3=8parexemple).Ilenexistebien dautresencore,ainsiquedesfonctionsdeconversionpouvantchangeruntypedevariable enunautre.Quelquesunesdecesfonctionssontdtaillesdansletableauciaprs. Exemple :integern realx n=2 x=exp(float(n)) cl'exponentielle exp estunefonctiond'unevariablerelle.Ilfautdoncconvertir cnentierenrel(ici2.0)avantd'appliquerlafonctionexp Exercice: Finird'crireleprogramme produit enajoutantetmodifiantleslignesdecode ncessaires.
fonction sin (sinus) cos (cosinus) tan (tangente) asin (arcsinus) ln (logarithmenprien) log (logarithmedcimal) exp (exponentielle) racinecarre valeurabsolue
criturefortran sin dsin cos dcos tan dtan asin dasin alog dlog alog10 dlog10 exp dexp sqrt dsqrt iabs abs dabs int idint float dble
typedelavariablede sortie R DP R DP R DP R DP R DP R DP R DP R DP I R DP I I R DP
Tableau:Fonctionsdesbibliothques (I:integer;R:rel;DP:doubleprcision) a. Lesinstructionsitratives(ouboucles) Il arrive souvent d'avoir faire des oprations rptitives. On utilise alors l'instruction do....enddocontenantunindicedeboucle. Exemple1:onveutcalculern!=1x2x3x.....x(n1)xn.Onpeutcrire: programfactoriel implicitnone integeri,n,fact
write(*,*)'n?' read(*,*)n fact=1 doi=2,n fact=fact*i enddo write(*,*)'n!=',fact end Exemple2:onveutlirelesvaleursd'unematriceA(10x20)danslefichier60. doi=1,10 cbouclesurleslignesi read(60,*)(a(i,j),j=1,20) cbouclesurlescolonnesjcomprisedansuneseuleinstruction enddo a. Lesinstructionsconditionnelles Imaginonsqu'onsouhaitecalculer (1/n2)pourn=1,+ .Ilsuffitd'crireunebouclesurn qui, chaqueitration,ajoutera lavariableSleterme1/n2.Maisonnepeut videmment pasdemander l'ordinateurd'excuterunesommeinfinie.Enrevanche,selonlaprcision aveclaquelleondsireobtenirS,onpeutdciderd'arrterlaboucle laconditionquela diffrenceentredeuxvaleursconscutivesdeSsoitpluspetiteque ,dontlavaleursera d'autantplusfaiblequelaprcisionsouhaiteestgrande. Instructionsfaisantintervenirunecondition: if(condition)then dowhile(condition) instruction1 instruction elseenddo instruction2 endif Sil'instructionestsimple,onpeutparfoiscrireseulement: if(condition)instruction
Oprateurslogiquesetdecomparaison syntaxe signification .LT. < .GT. > .LE. .GE. .NE. .EQ. = .AND. et logique .OR. ou logique
ExemplespourlecalculdeS(lecalculthoriquedonne2/6): S=1.0d0 S1=0.0d0 n=1 dowhile(abs(SS1).gt.1.0d8) ccontinuelaboucletantque|SS1|estsuprieur108 S1=S cmetl'anciennevaleurdeSdansS1 n=n+1 S=S+1/dfloat(n)**2 ccalculelanouvellevaleurdeS enddo Ouencore: S=1.0d0 don=2,100000 S1=S S=S+1/dfloat(n)**2 if(abs(SS1).lt.1.0d8)goto10 csi|SS1|estsuprieur108,sortdelaboucleenallantlalignenumro10 enddo 10continue e.Lessousprogrammes Ilssontdedeuxtypes:desfonctionsoudessousroutines.Ilssonttrsutilesquandonveut excuterplusieursfoislammesquenced'instructions.Parexemple,sionsouhaitecalculer la combinaison Cnp=n!/(p!(np)!), on a besoin d'excuter trois fois le calcul d'un nombre factoriel.Onpeutenvisagerparexempledetransformerleprogrammefactorielcidessusen sousprogramme,qu'onappelleraplusieursfoisauseinduprogrammeditprincipal.On appellera arguments lesvariablestransmisesduprogrammeappelantlesousprogramme verslesousprogrammeetrciproquement. Lessousprogrammesontlammestructurequ'unprogrammeprincipal:ilscomportent unepartiedclarationdevariablesetseterminentparend. Lesfonctions (ou function):ellestransmettentauprogrammeappelantunetunseul rsultat,stockdansunevariableportantlenomdelafonction.
factp=fact(p) factnp=fact(np) comb=float(factn)/(float(factp)*float(factnp)) write(*,*)'combinaison=',comb end functionfact(m) implicitnone integerfact,m,i fact=1 doi=2,m fact=fact*i enddo end Lessousroutines(ousubroutine):ellespeuventtransmettreplusieursrsultats,mais aussiunseuloummeaucun(casd'unesousroutined'impressionparexemple).Onappelle unesousroutinel'aidedel'instructioncallsubroutine.
Exemple:programcombinaison implicitnone integern,p,factn,factp,factnp realcomb write(*,*)'netp(p<n)?' read(*,*)n,p callfact(n,factn) callfact(p,factp) callfact(np,factnp) comb=float(factn)/(float(factp)*float(factnp)) write(*,*)'combinaison=',comb end subroutinefact(m,f) implicitnone integerf,m,i f=1 doi=2,m f=f*i enddo end