Vous êtes sur la page 1sur 23

Les commandes de base de LINUX

Les commandes de gestion des rpertoires et des fichiers pwd (affiche le chemin absolu du rpertoire courant) ls (list, affiche les rpertoires et les fichiers du rpertoire actif) ls (affiche seulement les noms) ls toto* (affiche les fichiers commenant par toto) ls -l (affiche le format long t!pes " droits " Nbre de liens " ####) cd (change director!) cp chemin ($ers le rpertoire dont le chemin absolu est donn) cd ## (rpertoire parent) cd % (rpertoire de base) cd - (rpertoire prcedent) cd & (rpertoire racine) cp (copie) cp rapport*#t't sau$egarde cp * dossier (copie mv (mo$e, renomme et dplace un fichier) m$ source destination m$ * dossier (dplace tous les fichiers du rpertoire actif $ers le rpertoire dossier) mkdir (crer un rpertoire) m(dir rpertoire rmdir (effacer un rpertoire) rmdir dossier (supprime un rpertoire $ide) rm (remo$e, fface)))) rm -* (enl+$ement rcursif)))) rm fichier rm -i fichier (interacti$ement, a$ec demande de confirmation) rm -f fichier (a$ec force, sans demande de confirmation) rm -r fichier (a$ec rcursi$it, a$ec les sous rpertoires) rm -rf dossier (supprime le rpertoire et tou son contenu, sans confirmation) Les commandes de recherche grep (recherche les occurences de mots , l-intrieur de fichier) grep motif fichier grep -i motif fichier (sans tenir compte de la casse) grep -c motif fichier (en comptant les occurences) grep -$ motif fichier (in$erse la recherche, en e'cluant le .motif.) grep e'pression &rpertoire&fichier grep /a0m1in &rpertoire&fichier grep .23. *#t't Les commandes d'dition more (.pager. 4ui affiche page par page sans retour en arri+re, .h. affiche l-aide conte'tuelle)

more fichier more fichier5 fichier6 more *#t't cat (concatenate a$ec le code de fin de fichier eof789*L " :) cat fichier-un fichier-deu' ; fichier-un-deu' cat -n fichier ; fichier-numrot (cre un fichier dont les lignes sont numrots) cat -nb fichier (affiche sur la sortie standard les lignes numrot, sauf les lignes $ides) head (affiche les 5< premi+res lignes d-un fichier) head -n66 fichier (affiche les 66 premi+res lignes) vi (l-diteur en mode te'te uni$ersel) emacs (l-diteur =NU >macs multi fonction pour l-dition, les mails, les ne?s, la programmation, la gestion des fichiers,###) xemacs (l-diteur =NU >macs sous X) diff (diffrence entre deu' fichiers, utiles pour chercher les modifications) diff fishier5 fichier6 Les commandes d'impression et de conversion lp (la commande d-impression sur les s!st+mes Uni' @!st+me A) lpr (la commande d-impression sur les s!st+mes B@: et Linu') lpr fichier echo 3C*IN9>* lpc status (affiche l-tat de la file d-attente) lpq (affiche les tra$au' d-impression et leur numro) lprm (supprime un tra$ail d-impression a$ec son numro comme argument) gv (.ghost$ie?. permet de $isualiser des fichiers CD@9 @8*IC9) g$ fichier#ps a2ps (con$ertit les fichiers E@8II en CD@9 @8*IC9) a6ps -F fichier -C fichier-post-script Les commandes de compilation et d'execution f77 compile un programme en fortran GG fGG program#f (la terminaison #f indi4ue 4ue le fichier program#f est crit en fGG ./a.out e'cution Les autres commandes cal (calendar) cal 6<<6 date (affiche la date, le mois, l-heure et l-anne du Hour# Les messages d-erreur et les e-mails sont touHours dats a$ec la date s!st+me) date -s wc (.?ord I count., affiche le nombre de lignes " mots " caract+res) ?ho J ?c -l (affiche uni4uement le nombre de lignes)

spell (programme de correction orthographi4ue) cat rapport#t't J spell ; faute#t't read (lit dans un script shell la ligne saisie , partir de l-entre par dfaut, le cla$ier)

L'diteur vi
vi est un diteur de fichiers qui contiennent des lignes de texte. Il fonctionne en mode cran; le nom vi provient du mot visual. I

Quelques commandes essentielles

Dmarrer l'diteur : vi nom_du_fichier__diter (vous tes en mode commande) Sauvegarder un fichier : :w nom_du_fichier Quitter l'diteur en sauvegardant le fichier: :x Quitter sans sauvegarder : :q!

Commandes de base Pour entrer du texte : Ces commandes vous amnent en mode insertion.

a ajoute du texte la droite du curseur i insre du texte la gauche du curseur o intercale une ligne vide au-dessous du curseur O intercale une ligne vide au-dessus du curseur

En mode insertion : retour insre une fin de ligne Lorsque vous tes en mode insertion taper ECHAP (ou ESC) pour revenir au mode commande

Pour remplacer du texte :

r le caractre tap remplace le caractre point par le curseur R remplace plusieurs caractres [taper ECHAP (ou ESC) pour revenir au mode commande]

Pour dplacer le curseur dans le texte : flches pour se dplacer d'un caractre vers la gauche ou la droite, ou d'une ligne vers le haut ou le bas [ou utiiliser les touches h (gauche), j (bas), k (haut), l (droite)] Par ligne :

0 se positionne au dbut de la ligne $ se positionne la fin de la ligne retour se positionne au premier mot de la ligne suivante

D'un cran : ^f (peser simultanment sur les touches CTRL et f) avance d'un cran ^b (peser simultanment sur les touches CTRL et b) recule d'un cran

Pour aller une ligne en particulier : #G positionne le curseur la ligne # 1G positionne le curseur au debut du fichier G positionne le curseur la dernire ligne du fichier ^g (peser simultanment sur les touches CTRL et g) revle le numro de la ligne courante

:set nu affiche les numros de lignes

Pour enlever, remplacer ou copier une partie du texte : x dtruit le caractre point par le curseur et place dans le tampon #x dtruit # caractres et place dans le tampon dd dtruit la ligne courante et place dans le tampon

#dd dtruit # lignes partir de la ligne courante et place dans le tampon

yy copie la ligne courante dans le tampon #yy copie # lignes conscutives dans le tampon p insre le contenu du tampon la droite du curseur (si 1 ou quelques caractres dans le tampon) p insre le contenu du tampon la ligne suivante (si 1 ou quelques lignes dans le tampon) P insre le contenu du tampon la ligne prcdente

Commandes plus complexes Recherche d'une chane de caractres particulire :

/chane cherche chane en avanant vers la fin du fichier; n trouve la prochaine occurrence de la dernire chane recherche.

Substitution : :s/ceci/cela/options substitue la premire occurrence de ceci par cela dans la ligne courante ; l'option g substitue toutes les occurrences dans la ligne courante ; l'option c demande de confirmer la substitution :3,9s/ceci/cela remplace aux lignes3 9 la premire occurence de ceci par cela. :%s/ceci/cela remplace dans tout le fichier la premire occurence de ceci par cela :%s/ceci/cela/g remplace dans tout le fichier toutes les occurences de ceci par

cela Et d'autres commandes encore !

~ change la casse (majuscules/minuscules) d'une lettre J joint la ligne courante la suivante . repte la dernire commande #commande excute une commande # fois u annule la dernire commande U annule les commandes affectant la ligne courante :3,9d limine les lignes 3 9

notes de cours Fortran 77


notes de cours Fortran 77
1) 2) 3) 4)

ta!le des mati"res

Introduction La gestion de l'ordinateur Bases du fortran 77 Le squencement des instructions F#5) t!pe logical F#6) l-instruction conditionnelle (if) F#K) les boucles F#F) le saut (goto) 5) Les sous-programmes et fonctions ) Les ta!leau" 7) #clarations particuli$res % constantes& initialisation ') Les c(a)nes de caract$res *) Les c(angements de t+pe et fonctions intrins$ques L#5) mlanges de t!pes L#6) con$ersion e'plicite L#K) fonctions intrins+4ues 1,) -aria!les communes 11) .ntres& sorties et formats 55#5) ou$erture et fermeture du flu' 55#6) lecture - criture 55#K) dclaration du format 12) /ue n'ai-0e pas dit 1

Les 9C et 9: 6<<F&6<<M (suHet et correction) sont ici

#$ %ntroduction
$oir &pat&internet&techinfo

structure de l-ordinateur (8CU, mmoire, interfaces, bus) les caractristi4ues du 8CU, les diffrentes $itesses dans un C8, les caches# les priphri4ues le langage machine (petit e'emple), les M gnrations de langages

2$ La gestion de l'ordinateur

BID@, D@, :D@ les dis4ues et leur gestion (0E9, rpertoires, adressage absolu et relatif) les 0iles @!stems (0E956, 5N, K6, Uni', N0@###) sous Uni' arborescence classi4ue, montage&dmontage, m2dir, rmdir, cd, ls, rm la compilation, l-dition de liens# >n prati4ue (23rite prog4f 5 & gcc prog4f -o prog & prog)# @i $ous chercheO un compilateur, He $ous conseille le meilleur =NU =GG (???#gnu#org)# Il est disponible dans toutes les distributions Linu', pour Pindo?s H-en ai fait une copie ici#

&$ 'ases du fortran 77

le format de la ligne ( 86KFM"GQL#####G68888 ) en colonne 5, un 8 (ou *) indi4ue 4ue la ligne est un commentaire (ne sera pas prise en compte par le compilateur)# Les colonnes 5 , M peu$ent contenir un label (numro de ligne par e'emple)# @-il ! a un caract+re en colonne N (un " par e'emple), cette ligne est la continuation de la sui$ante# Les colonnes G , G6 contiennent les instructions# E partir de la colonne GK, plus rien n-est lu# Les compilateurs actuels (dont gGG) acceptent un commentaire en fin de ligne il commence par ) (et $a Hus4u, la fin de la ligne)# 8-est mRme conseill en premier caract+re d-une ligne de commentaire (au lieu de 8) pour la compatibilit a$ec 0L< et plus# les identificateurs (noms des obHets) utiliseO les caract+res (E-S,<-L), ni espace ni accent ni - (rser$ , la soustraction)# Le premier doit Rtre une lettre, pas un chiffre# Le compilateur transforme toutes les minuscules en maHuscules (sauf si entre apostrophes - )# N caract+res ma'i (K5 ma'i en gnral, mais il $aut mieu' 4u-il n-! en ait pas deu' a$ec les mRmes N premiers)# Les identificateurs sont spares par un ou plusieurs espaces, 4ue l-on peut omettre si le caract+re sui$ant n-est pas (E-S,<-L)# les t!pes de $ariables de base integer (en gnral Hus4u-, "ou- 5<L), real (en gnral a$ec G chiffres significatifs), dou!le precision (en gnral a$ec 5M chiffres significatifs)# *emar4ue on peut (4uand on sait e'actement ce 4u-on fait) imposer le nombre d-octets des $ariables integer *6 et *F, real *F et *Q)# Il e'iste aussi les c(aracter& logical et comple" ($oir plus loin) les oprateurs arit(mtiques, par priorit dcroissante (5) - unaire, (6) ** puissance, (K) * et &, (F) " et -# >n cas de calcul entre deu' entiers, le rsultat est entier# :+s 4u-il ! a au moins un rel, le rsultat est rel# :+s 4u-il ! a un double prcision, le rsultat est double prcision# les constantes 5 (entier ), 5<<#< ou 5>6 (rel), 5:< (double prcision) petit programme (premprog#f)

program calcul ent6te implicit none pour plus de scurit& nous refusons integer n! les dclarations implicites real pu&pt print 7&'com!ien de pi$ces 1' crire 8 l'cran read 7&n! lire au cla9ier print 7&'pri" unitaire 1' read 7&pu pt:pu7n! affectation% le calcul est effectu puis print 7&'cela fera '&pt&' en tout' le rsultat est stoc2 dans pt stop end program calcul cl;ture

le rsultat est (en rouge, tap par l-utilisateur du programme)


com!ien de pi$ces 1 5 pri" unitaire 1 1425 cela fera 425 en tout

structure du programme

entRte (program nom au choi') dclarations (implicites et e'plicites) les $ariables non dclares commenant par (I-N) sont considres enti+res, les autres relles# Eccepter les dclarations implicites est sou$ent source d-erreurs difficiles , localiser (un erreur de frappe cre une autre $ariable au lieu d-un message d-erreur), He $ous conseille de touHours commencer par .implicit none. instructions print affiche , l-cran, read lit au cla$ier# L-affectation se note $ariable 7 e'pression, ou contenant 7 contenu, ou oT 7 combien# Le programme calcule d-abord combien $aut l-e'pression , droite du 7, puis stoc(e le rsultat dans la $ariable nomme , gauche du 7# .stop. arrRte le programme, il est optionnel en derni+re instruction du programme# clUture du programme (end est suffisant, mais pour plus de clart on le compl+te par le nom du programme)#

($ Le squencement des instructions


(.#$ t)pe logical
Ebordons d-abord le t!pe .logical., ses $aleurs #9*U># #0EL@>#, les oprateurs associs (comparaisons #L9# , #=9#, #L>#, #=>#, #>V#, #N>#W boolens #EN:# #D*# #ND9#)# >'emple test : <"4ge43)4and4<"4lt41,) ' dans /K,5</#

(.2$ l'instruction conditionnelle *if$


forme standard (archaX4ue)
I0 (e'pression logi4ue) instruction uni4ue

si l-on $eut rendre conditionnelle l-e'cution de plusieurs lignes, fGG permet


I0 (e'pression logi4ue) 9Y>N une ou plusieurs instructions >N:I0

@i l-on a plusieurs condition >X8LU@IA>@ on peut mRme


I0 (e'pression5) 9Y>N une ou plusieurs instructions >L@>I0 (e'pression6) 9Y>N une ou plusieurs instructions >L@>I0 (e'pressionK) 9Y>N une ou plusieurs instructions >L@> une ou plusieurs instructions >N:I0

Le dernier >L@> (obligatoirement sans e'pression logi4ue) est optionnel# >ncore plus comple'e, parmi les instructions conditionnelles on peut utiliser des if 444 endif# Dn nomme cela des if im!riqus# Un endif correspond touHours

au dernier if 4ui n-en tait pas pour$u# e'emple (il man4ue l-entRte, les dclarations, la saisie des coefficients et surtout un test)
delta:!7!-47a7c if <delta4=>4,) t(en "1:<-!-sqrt<delta))?<27a) "2:<-!@sqrt<delta))?<27a) print 7&'2 racines% '&"1&' et '&"2 elseif<delta4./4,) t(en ":-!?<27a) print 7&'1 racine dou!le% '&" else print 7&'aucune racine relle' endif

($oir seconddeg#f) *emar4ue sur la di$ision il faut 9DUZDU*@ $rifier 4ue le dnominateur est non nul (le cl+bre domaine de dfinition cher , tous $os profs de maths depuis le coll+ge)#

(.&$ les !oucles


forme standard (archaX4ue)
:D label indice7$al#initiale, $al#finale, incrment une ou plusieurs instructions label 8DN9INU>

Le label est un entier dans 1<,LLLLL1 (doit rentrer dans les M premiers caract+res de la ligne)# L-incrment est optionnel (5 par dfaut)# La boucle sera effectue a$ec l-indice (4ue $ous aureO dclar a$ant en integer) allant de -9al4initiale- , -9al4finale- compris, par pas de -incrment' # Il ne faut ZE[EI@ tenter de modifier l-indice, $al#initiale, $al#finale ou incrment en cours de boucle# >n sortie de boucle, l-indice ne $aut pas ncessairement la $aleur finale, a dpend des compilateurs# e'emple
1, do 1, i:1&1, print 7&i&'$ coucou' continue

4ui donne
1$ coucou 2$ coucou 3$ coucou 4$ coucou 5$ coucou $ coucou 7$ coucou '$ coucou *$ coucou 1,$ coucou

>n fait, le continue ne peut fermer 4ue la derni+re boucle ou$erte (mais on peut imbri4uer des boucles)# Le label n-apporte rien (4ue peut-Rtre la clart)# e'emple
#A 1, --------do 2, -------continue do 3, -------continue ----continue

boucles imbri4ues D\

che$auchement impossible

2, 3, 1,

0ortranGG propose donc une criture sans label


:D indice7$al#initiale, $al#finale, incrment une ou plusieurs instructions >N::D

[ais ces boucles ne peu$ent se faire 4ue si leur nombre est fi' d-a$ance# 8-est pour4uoi la plupart des compilateurs acceptent d-autres boucles, mais elles ne sont pas standardises dans fortran GG# 8elle 4ui me semble la plus fr4uente (et accepte par les normes sui$antes) est
:D ?hile (condition logi4ue) une ou plusieurs instructions >N::D

e'emple
#A 3(ile<"4gt41) ":"?2 .B##A

si ' est infrieur , 5 a$ant de commencer la boucle, aucune di$ision par 6 n-est effectue# :eu' instructions spcifi4ues au' boucles ont t raHoutes dans =GG .CI> (sortir immdiatement de la boucle) et DEDL. (passer directement , la prochaine itration)# Eutres critures de boucles e'istantes, sui$ant les compilateurs (mais He ne $ous les conseille pas)
?hile (condition) do instructions enddo do instructions ?hile(condition) do instructions

until (condition)

(.($ le saut *goto$


=D9D label -----label 8DN9INU>

Le label doit Rtre uni4ue dans un programme, il peut se situer au dessus ou au dessous du =D9D# L-instruction en face du label n-est pas ncessairement un continue, ce peut Rtre n-importe 4uelle autre instruction (4ui sera e'cute lors du saut)# Les goto sont crateurs de nombreu' probl+mes, (dans les programmes comple'es ou buggs, uni4uement) c-est pour4uoi les programmeurs e'priments essa!ent de s-en passer# Clusieurs =D9D diffrents peu$ent sauter au mRme label# Dn peut sortir par =D9D de n-importe oT, mais on ne peut pas pointer $ers l-intrieur d un bloc d-instructions (I0, :D, @ubroutine) e'emple
1 do 1, i:de!&fin ----=A>A 5% ici un goto 1, passe au proc(ain i& goto 1 recommence 8 de!4 ----continue ----continue ---=A>A 5% d'ici& ce =A>A est impossi!le4 Fais =A>A 1 le serait

5 1,

Une criture fr4uente est le I0 (condition) =D9D label, ser$ant par e'emple pour crer des boucles .tant 4ue. 4ui soient compatibles a$ec tout compilateur#

+$ Les sous,programmes et fonctions


Un sous-programme est le regroupement sous un mRme nom d-un groupe d-instructions (et de $ariables, dites locales)# Le programme et les sousprogrammes partagent des $ariables $ia ce 4ue l-on appelle les param+tres (et , la rigueur le 8D[[DN, $oir plus loin) :claration d-un sous-programme
@UB*DU9IN> nom (liste d-arguments formels) dclarations locales (! compris arguments formels) instructions (dont *>9U*N pour 4uitter la subroutine, optionnel en derni+re instruction) >N: @UB*DU9IN> nom

appel d-un sous-programme


8ELL nom (liste d-arguments rels)

e'emple
GHBIAH>IB. ec(ange <"&+) implicit none

real "&+&tampon tampon:" ":+ +:tampon I.>HIB .B# GHBIAH>IB. ec(ange

autre part
real a&! a:1, !:15 DJLL ec(ange <a&!)

Les arguments rels doi$ent Rtre e'actement du mRme t!pe 4ue les arguments formels, aussi nombreu' et dans le mRme ordre (mRme pas de transformation automati4ue d-entier en rel)# Les arguments sont dits .passs par adresse., ce 4ui signifie 4ue toute modification , l-argument formel est rpercute , l-argument rel (H-en parle parce 4ue dans d-autres langages c-est diffrent)# Une fonction, 4uand , elle, a un rsultat# >lle est appele dans une e'pression
t!pe 0UN89IDN nom (liste d-arguments formels) dclarations locales (! compris arguments formels) instructions (dont *>9U*N pour 4uitter la fonction, prcd d-une affectation au nom de la fonction) >N: 0UN89IDN nom

e'emple
real function puiss<"&n) implicit none real "&p integer i&n p:"K do i:2&n p:p7" enddo puiss:p return end function puiss

appel
real L&puiss L:243 print 7& 'calcul% '& puiss<L&1,)@1

*emar4ue ici O reste , 6#K, car dans la fonction ' est inchang# @i l-on a$ait modifi ' dans la fonction, on aurait obtenu ce 4ue l-on appelle un .effet de bord.# >'emple de sous-programme , effet de bord
real function factorielle<n) integer res&n res:1 do 3(ile <n4=>41) res:res7n

n:n-1 enddo factorielle:res return end function factorielle

8ette fonction calcule bien les factorielles, mais ces instructions


integer n!&factorielle n!:5 print 7& factorielle<n!)&' est la factorielle de '& n!

donneront ce rsultat
12, est la factorielle de 1

8-est asseO dplorable, nb ne $aut plus M ) 8onclusion ne modifieO un argument formel 4ue si c-est ncessaire# :ans le programme appelant la fonction, son t!pe doit Rtre dclar# :ans l-e'emple de la factorielle si $ous l-oublieO (et a$eO oubli .implicit none.), il la considrera real, ce 4ui donnera des rsultats aberrants )

-$ Les ta!leaux
Dn peut regrouper sous un seul nom plusieurs $ariables simples, c-est un tableau unidimensionnel ou $ecteur# Dn les dclare ainsi
t!pe nom (indice dbut indice fin)

La plupart du temps, on omet l-indice dbut (4ui sera 5), l-indice fin sera alors aussi le nombre de composantes# Il e'iste dans ce cas une seconde mthode pour dclarer le tableau
t!pe nom dimension nom(nombre)

e'emple
real 9ecteur<3)

ou
real 9ecteur dimension 9ecteur<3)

Dn utilise les composantes d-un tableau dans toute e'pression par


nom(indice)

e'emple
":<9ecteur<i)-9ecteur<1))?9ecteur<i@1)

Ettention, c-est au programmeur de $rifier 4u-il utilise touHours des indices dans les limites dclares ) La dimension de tous les tableau' doit Rtre connue du compilateur, pour 4u-il puisse grer la mmoire utilise par le programme,

a$ant mRme 4ue la premi+re instruction n-ait t e'cute # La dimension doit donc Rtre une constante, elle ne peut pas Rtre une $ariable 4ue $ous demanderieO , l-utilisateur par un read# Car contre rien ne $ous empRche de dclarer une dimension asseO importante, et n-utiliser 4u-une partie du tableau, $ariable , cha4ue utilisation du programme, mais touHours infrieure , la dimension dclare# Dn ne peut, dans un programme, 4ue traiter les composantes d-un tableau, pas son intgralit (par e'emple, pour copier un tableau il faut, dans une boucle, copier toutes ses composantes)# Car contre on peut passer un tableau en argument d-un sous-programme ou fonction# e'emple
real "<5) print 7& 'mo+enne% '&mo+<"&5) --------real function mo+<"&n!) real "<7)&som integer n!&i som:"<1) do i:2&n! som:som@n!<i) enddo mo+:som?n! end function mo+

:ans la dclaration, la dimension du tableau n-a besoin d-Rtre donne 4ue dans l-entit 4ui rser$e la place ncessaire en mmoire, pas pour ceu' 4ui reoi$ent le tableau en argument, 4ui mRme si on leur donne la dimension ne s-en ser$ent pas# 8-est pour4uoi il $aut mieu' indi4uer * (certains programmeurs dimensionnent , 5 les tableau' reus en arguments, mais c-est peu clair)# Une autre solution est de la passer en argument (ou mRme une dimension infrieure , la dimension relle, mais pas plus grande), dans la fonction ci-dessus on dclarerait real x(nb)# Aous pou$eO $oir ici un programme de base sur les tableau' (tab-sp#f) Cour reprsenter une matrice, on utilise un tableau bidimensionnel# La dclaration est
t!pe nom (deb lig fin lig , deb col fin col)

l-appel est
nom(indice ligne, indice colonne)

:ans la prati4ue, le compilateur range en mmoire toute la premi+re ligne de la matrice, puis la seconde, la troisi+me### [ais tant 4ue $ous n-Rtes pas spcialistes, il $aut mieu' l-ignorer# *appeleO-$ous 4u-en gnral le premier indice est la ligne, le second la colonne (licol)# Dn peut tendre , des dimensions suprieures, mais en se limitant , la G+ dimension# >'emple
integer rubi(s(K,K,K)

Ettention, en cas de passage en arguments de tableau' multidimensionnels, toutes les dimensions doi$ent Rtre dclares e'actement, sauf la derni+re 4ui peut Rtre * (en gnral on les donne toutes)# [ais la solution idale est de passer les dimensions en arguments (obligatoirement la dimension e'acte, sauf pour la derni+re 4ui peut Rtre infrieure si c-est $raiment utile)# e'emple
program matrice integer ma"lig&ma"col parameter<ma"lig:5&ma"col:3) real m<ma"lig&ma"col) integer il&ic do il:1&ma"lig do ic:1&ma"col m<il&ic):il@<ic?1,4,) enddo enddo call affmat<m&ma"lig&ma"col) end su!routine affmat<mat&diml&dimc) implicit none integer diml&dimc real mat<diml&dimc) integer il&ic do il:1&diml print 7&<'F<'&il&ic&'):'&m<il&ic)&ic:1&dimc) enddo end

7$ .clarations particuli"res initialisation

constantes/

Dn peut dclarer une constante, c-est , dire une $aleur fi'e par le programmeur, 4ui ne pourra pas changer lors de l-e'cution du programme# Dn s-en sert principalement pour dclarer les tailles de tableau (ce 4ui permettra par la suite de la changer plus facilement) e'emples
real t9a parameter <t9a:1*4 ) integer largeur&(auteur parameter <largeur:5&(auteur:2) real ta!le<largeur&(auteur) do i:1&largeur ----etc ------call su!routine<ta!le& largeur& (auteur) ----etc -------

Il est galement possible d-initialiser des $ariables# 8-est , dire fi'er une $aleur initiale , une $ariable, mais cette $aleur pourra changer au cours du programme# Dn utilise pour cela la dclaration :E9E
:E9E liste de $ariables & liste de $aleurs initiales &

e'emple
real "&+ data "&+ ? ,4, & ,45 ?

on peut remplacer une suite de $aleurs identi4ues par .nombre*$aleur.# Dn peut galement initialiser des tableau'
real t<2&5) data t ? 57,4,& 14,& 47,4, ?

[Rme si un data se trou$e dans une subroutine, l-initialisation ne sera effectue 4u-une fois, au dbut de l-e'cution du programme#

0$ Les cha1nes de caract"res


Dn peut stoc(er des caract+res dans une .cha]ne., 4ui est en fait un tableau de caract+res# Dn le dclare par 8YE*E89>**dim ND[# 8omme tout tableau, la dimension est importante et doit Rtre dfinie lors de l-criture du programme# @i l-on n-utilise pas la totalit de la dimension dclare, le compilateur compl+te a$ec des espaces (4u-il raHoute en fin de cha]ne)# Une constante cha]ne de caract+res est dlimite par des apostrophes (-)# Cour inclure une apostrophe dans une cha]ne, il faut la doubler (--)# && est l-oprateur ce concatnation il permet de .coller. deu' cha]nes pour n-en former 4u-une# Dn peut e'traire une partie d-une cha]ne nom(dbut fin)# e'emples
c(aracter71, "&+ c(aracter72, L ":'!on0our' "<4% ):'soi' +:'c''est moi' +<7%7):+<5%5) L:"??+

ce 4ui donne dans O .bonsoir c-est toi. Dn peut crer des tableau' de cha]nes# Car e'emple character*5< t't(6<) Dn peut aussi comparer des chaines# Car #>V# et #N># mais aussi , l-aide des fonctions L=>, L=9, LL> ou LL9# Car e'emple, L=>(c5,c6) est #9*U># si a5 est suprieur ou gal , c6 (dans l-ordre alphabti4ue)# Il e'iste d-autres fonctions spcifi4ues au' cha]nes de caract+res ichar(i) donne le caract+re dont le code E@8II est l-entier i, char(c) donne le numro de code du caract+re c# Cour trou$er la position de la sous-cha]ne sc dans la cha]ne plus longue lc inde'(lc,sc)#

2$ Les changements de t)pe et fonctions intrins"ques


2.#$ mlanges de t)pes
9outes les $ariables sont stoc(es en mmoire sous forme d-une suite de < et de 5# [ais cha4ue t!pe de $ariable est cod diffremment# Cour info, les entiers sont en binaire sign, les rels sont en $irgule flottante K6 bits et les double prcision en NF bits# Une mRme $aleur sera donc code par une suite de < et de 5 diffrente sui$ant 4u-elle est dans une $ariable enti+re, relle ou double prcision# Le compilateur ne sait faire des oprations arithmti4ues (" * & **) 4ue sur des $aleurs codes de la mRme mani+re# @i $ous lui demandeO un calcul entre deu' $ariables de t!pe diffrent, le compilateur doit a$ant tout en con$ertir une pour 4u-elles soient de mRme t!pe# Il sait con$ertir automati4uement un entier en rel et un rel en double prcision (mais c-est tout)# :onc, sui$ant le t!pe des deu' oprandes, le rsultat de l-opration sera integer integer real dou!le prcision integer real double prcision real real real double prcision dou!le prcision double prcision double prcision double prcision

La con$ersion n-est faite 4ue lors4ue c-est ncessaire# :ans la plupart des cas, c-est la meilleure solution car la plus rapide# Il n-! a 4ue dans le cas de la di$ision 4ue le rsultat est diffrent sui$ant les cas# >n effet, la di$ision de deu' entiers donne un entier (et un reste, mais il est ignor)# Car e'emple, si ' et !76 sont rels, i7M et H7K sont des entiers, alors '7!"i&H met K dans ' la di$ision est prioritaire , l-addition, donc on l-effectue en premier# Les deu' oprandes i et H sont de mRme t!pe donc M&K donne 5 (reste 6)W ! et 5 sont de t!pe diffrent donc 5 est con$erti en 5#<, et additionn , ! pour donner K#< 4ui est stoc( dans '# :e mRme, l-affectation ($ariable7calcul) calcule d-abord l-e'pression , droite du signe 7, ce n-est 4u-apr+s 4u-il regarde le t!pe de la $ariable de$ant rece$oir le rsultat pour faire, s-il le faut, une con$ersion# Aous pou$eO donc crire '7i mais pas i7'# e'emple
dou!le precision "&+&L ":5?3 +:54,?34, L:5#,?3#, print 1,&"&+&L

1,

format <f1'415)

affichera
14,,,,,,,,,,,,,,, 14 2 *3,237 14 7

E99>N9IDN la con$ersion n-est automati4ue 4ue dans ces cas# >n particulier, elle n-est pas effectue entre les arguments rels et formels d-un sousprogramme ou fonction

2.2$ conversion explicite


Aous pou$eO par contre indi4uer au compilateur 4uelles con$ersions il doit effectuer# Cour cela, on utilise les fonctions sui$antes argument rsultat integer (partie enti+re) integer (entier le plus proche) real dou!le prcision float (ou real) dfloat dble integer real dou!le prcision idint

ifi' (ou int)

nint

idnint sngl

Ici aussi, faites attention au' di$isions float(M&K) ne $aut pas float(M)&float(K)

2.&$ fonctions intrins"ques


>n plus des fonctions de con$ersion, 0ortran propose di$erses fonctions, 4u-il est inutile de dclarer puis4ue dH, connues# 9outes les fonctions ci-dessous retournent une $aleur de mRme t!pe 4ue leur argument# integer racine carre e'ponentielle log nprien log base 5< real s4rt e'p alog alog5< dou!le prcision ds4rt de'p dlog dlog5<

$aleur absolue minimum ma'imum sinus cosinus tangente arccos arcsin arctan

iabs min< ma'<

abs amin5 ama'5 sin cos tan acos asin atab

dabs dmin5 dma'5 dsin dcos dtan dacos dasin datab

#3$ 4aria!les communes


Cour 4ue diffrents sous-programmes puissent changer des donnes, la solution la plus $idente est de les passer en arguments# [ais 4uand un certain nombre de donnes doi$ent Rtre utilises dans toutes les parties d-un programme, on choisira plutUt le common# Il consiste , donner un nom , une liste (ordonne) de $ariables , partager#
common&nom&$ariable5,$ariable6,###

Le common sera dclar dans cha4ue entit de programme (sous-programme, fonction) 4ui doit accder au' $ariables communes# Le nom dfinit le common# Les $ariables communes par contre sont dfinies par leur ordre, et pourraient a$oir des noms diffrents dans toutes les entits (mais He $ous le dconseille fortement), et doi$ent ! Rtre dclares# Il peut ! a$oir plusieurs common diffrents, mais une $ariable ne peut appartenir 4u-, un seul common# >'emple dans un programme d-anal!se de l-$olution de la temprature, toutes les entits doi$ent conna]tre les diffrentes tempratures (et leur nombre)
real ma"i<) common?temp?n!&t integer n!&i real t<1,,)&m m:t<1) #A 1,, i:2&n! if<t<i)4gt4m)m:t<i) 1,, continue ma"i:m return end c program main

common?temp?n!&t integer n! real t<1,,) ---- etc ---end

Les $ariables des diffrents common peu$ent Rtre initialises (si ncessaire) dans une entit nomme bloc data 4ui ne peut comporter 4ue des common, des dclarations et des data
!loc2 data common?temp?n!&t integer n! real t<1,,) data n! ?,? end !loc2 data

Ne metteO 4u-un seul bloc( data dans un programme ) Cour $iter de recopier partout les mRmes common, on peut utiliser l-instruction
IN8LU:> -nomd5fichier-

Le fichier dsign est inclus , cet endroit# Ettention, cette possibilit n-est pas disponible partout, mais sous gGG elle l-est (comme d-ailleurs toules les directi$es ^ du 8)#

##$ 5ntres/ sorties et formats


##.#$ ouverture et fermeture du flux
Le programme peut lire (resp# crire) des donnes depuis (resp# $ers) l-e'trieur par l-intermdiaire d-une .unit logi4ue.# Une unit logi4ue (un flu') correspond , une interface de l-ordinateur 4ui transmet un flot de donnes entre la carte m+re et un de ses priphri4ues# 8e sont principalement les fichiers sur dis4ue, le cla$ier et l-cran, mais peut aussi Rtre un lecteur de bandes, un port *@6K6, la carte son,### , condition 4ue le s!st+me d-e'ploitation ! donne acc+s (dans &de$ sous Uni')# La premi+re chose , faire a$ant d-utiliser un flu' est de l-ou$rir# 8-est une sorte de .demande de rser$ation. faite , l-D@, 4ui peut la refuser (si il est dH, ou$ert par un autre programme, si il n-e'iste pas, si $ous n-a$eO pas les bons droits d-acc+s,###)# 8ha4ue flu' ou$ert est associ , un .numro d-unit logi4ue. 4ui est un entier positif (en gnral entre L et LL), 4ui nous ser$ira , dsigner le flu' dans la suite du programme# :ans le cas d-un fichier, l-ou$erture se fait par l-instruction DC>N
open(UNI97numro,0IL>7-nom du fichier-,@9E9U@7-tat-,>**7label,ID@9E97$ariable enti+re)

@i le numro est donn en premier, il n-est pas ncessaire de le prcder par UNI97# 8-est le programmeur 4ui fi'e le numro, il doit Rtre uni4ue dans le programme et ne peut Rtre $ariable (mais un parameter est

possible)# Le nom du fichier peut Rtre donn directement entre apostrophes, ou Rtre une $ariable cha]ne (c-est galement le cas pour d-autres arguments mais moins courant)# Le statut est optionnel, il $aut soit N>P si le fichier doit obligatoirement ne pas e'ister a$ant (pour ne pas l-craser), soit DL: s-il doit e'ister a$ant (pour la lecture par e'emple), soit @8*E98Y si le programme doit le crer le temps du programme et le dtruire , la fin, soit UN\NDPN (ou ne rien mettre) s-il doit l-ou$rir, apr+s l-a$oir cr si ncessaire# ECC>N: permet de se placer , la fin du fichier (pour raHouter du te'te , la suite)# >n cas de refus d-ou$erture, la $ariable dsigne par ID@9E9 reoit un code d-erreur (< si o(), et le programme saute directement au label dsign par >** (s-il sont omis, le programme s-arrRte en cas d-erreur)# Dn peut aussi utiliser le fichier en acc+s direct (E88>@@7-:I*>89-) en imposant la taille des enregistrements (*>8L7entier), 4ui seront soit directement crits en binaire dans le fichier (0D*[7-UN0D*[E9>:-) soit traduits en E@8II (0D*[7-0D*[E9>:-)#

Il ! a deu' units 4ui sont automati4uement ou$ertes au dbut du programme M pour le cla$ier et N pour l-cran# Lors4ue $ous a$eO fini d-utiliser un flu', il faut le refermer, en particulier pour en donner acc+s au' autres# 9out flu' non encore ferm le sera automati4uement , la fin du programme# Cour cela, on utilise l-instruction
close(unit7numro,ID@9E97$ariable, >**7label)

e'emple
open<1,&MIL.:'resultats4t"t') ---- etc ---close<1,)

##.2$ lecture , criture


Cendant 4u-il est ou$ert, on crit dans un flu' par
?rite (unit,format) liste de $ariables

et l-on lit dans un flu' par


read (unit,format) liste de $ariables

8es deu' critures acceptent un format plus complet


(UNI97unit, 0[97format, ID@9E97$ariable, >**7label, >N:7label)

Les options sont identi4ues , l-open, plus >N: 4ui donne le label oT doit sauter le programme 4uand on est arri$ , la fin du fichier (prati4ue 4uand on n-en conna]t pas la longueur)# >n cas d-criture , l-cran, l-unit est N, mais on peut l-appeler *# Dn peut mRme utiliser
print format, liste de $ariables

Cour la lecture au cla$ier, l-unit est M, mais on peut l-appeler *# Dn peut galement utiliser
read format, liste de $ariables

La liste de $ariables contient des $ariables ou e'pressions spares par des $irules, mais on peut galement utiliser une .boucle implicite.
(e'pression contenant un indice, indice7dbut,fin,pas)

Car dfaut, le pas $aut 5# e'emples


read 7&a&! 3rite <7&7) 'a 9aut'&a&'et ! 9aut'&! 3rite < &1,,) a&!&< t<i)&i:1&1,)&c print 7& < <i@370 & i:1&3)&' -'&0:,&4)

la derni+re ligne affichera


123-45 - 7 ' * - 1, 11 12 - 13 14 15 -

##.&$ dclaration du format


Le format peut-Rtre soit * (format libre le compilateur choisit le format d-affichage 4ui lui para]t le plus adapt), soit un label (format impos au label donn, le programmeur dclare le format d-affichage), soit une $ariable cha]ne de caract+res (format calcul le format est cr par le programme, et peut donc $arier sui$ant les calculs prcdents)# La dclaration du format impos (4ui doit Rtre dans la mRme entit de programme) est de la forme
label 0D*[E9(liste de composants)

Les composants du format sont


-te'te entre apostrophes- le te'te est crit tel 4uel In entier sur n caract+res (a$ec espaces de$ant si le nombre est plus petit) En cha]ne sur n caract+res (a$ec raHout d-espaces en fin si ncssaire) 0n#p rel sur f caract+res dont p apr+s la $irgule (0M#6 donne 56#FM) >n#p rel en notation scientifi4ue dont p pour la partie dcimale (l-e'posant en prend F, ne pas oublier le # et peut-Rtre le signe -) (>L#6 donne -6#FM>"<L) =n#p rel en 0n#p si possible, >n#p s-il est trop grand :n#p idem >n#p mais pour un rel double prcision X un espace (ou ignorer un caract+re, dans le cas d-un read) & un retour , la ligne (ou ignorer la fin de la ligne dans un read)

Un composant prcd d-un entier n est rpt n fois# Cour rpter plusieurs composants, il faut les mettre entre parenth+ses K(MX,6I5) K fois (M espaces et 6 entiers d-un chiffre)# >'emples

1, 11

3rite <7&1,) n!&mo+ format <'la mo+enne des '&I2&'tempratures est de '&M541&' degrs') 3rite <7&11) <<mat<i&0)&i:1&4)&0:1&4) format <'la matrice est'&4<?&'N'& 4M542&'N')

8ha4ue read ou ?rite correspond , une ligne# @i l-on donne une liste de plusieurs $ariables dans un read, il faudra absolument entrer toutes les $aleurs (entre espaces ou $irgules) a$ant la touche >ntre# [ais certains compilateurs (=GG par e'emple) consid+rent 4u-un caract+re -3- en fin de format demande de ne pas retourner , la ligne# remar4ue on peut galement crire ou lire dans une $ariable cha]ne de caract+res, il suffit de remplacer le numro d-unit par le nom de la cha]ne# :e mRme, le format peut Rtre une cha]ne#
c(aracter74, fmt integer i&n!c(if data i ?123? & n!c(if ?4? 3rite<fmt&1,) n!c(if format<' ''7''&I'&I1&'&''7''') 3rite <7&7) 'pour 9rification MF> 9aut%'&fmt 3rite <7&fmt) i

1,

ceci affichera
pour 9rification MF> 9aut%< '7'&I4&'7') 7 1237

#2$ 6ue n'ai,7e pas dit 8


Clein de choses# >n particulier, il e'iste un t!pe et des fonctions intrins+4ues spcialement conus pour le traitement des nombres comple'es le t!pe comple'#

Vous aimerez peut-être aussi