Vous êtes sur la page 1sur 7

Elmentsdefortran77

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.

Remarque :luneoulautredecespartiespeutfaireappeldessousprogrammes(fonctions ousousroutines)extrieursauprogrammeprincipal.

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)

programproduit implicitnone realx,y ... end

Casdestableauxouvariablesindices: ilconvientdedfinirlesdimensionsduntableauenmmetempsquesontype. Silonveutdclareruntableaubuneseuledimensioncompos de100nombresrels,on crira: realb(100) Lepremierlmentdutableauestb(1)etledernierb(100). realb(10,20) correspondunematrice(10x20).

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

typedelavariable d'entre R DP R DP R DP R DP R DP R DP R DP R DP I R DP R DP I IouR

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

conversionenentier conversionenrel conversionenDB

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.

Exemple:programcombinaison implicitnone integern,p,fact,factn,factp,factnp realcomb write(*,*)'netp(p<n)?' read(*,*)n,p factn=fact(n)

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

Vous aimerez peut-être aussi