Académique Documents
Professionnel Documents
Culture Documents
Linux Vi f77
Linux Vi f77
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
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
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
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
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
/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
~ 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
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
#$ %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#
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
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 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)#
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,
[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 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#
e'emple
GHBIAH>IB. ec(ange <"&+) implicit none
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
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)
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
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#
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)#
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
nint
idnint sngl
Ici aussi, faites attention au' di$isions float(M&K) ne $aut pas float(M)&float(K)
$aleur absolue minimum ma'imum sinus cosinus tangente arccos arcsin arctan
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
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)#
@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,)
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)
-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