113 lines
3.2 KiB
TeX
113 lines
3.2 KiB
TeX
\chapter{Fortran} \label{chap:Fortran} \index{Fortran}
|
|
|
|
Fortran (\textsc{FORmula TRANslator}) est, avec le Cobol\index{Cobol},
|
|
un des premiers langages évolués. Il a été conçu après la seconde
|
|
guerre mondiale, en 1954, par
|
|
John Warner Backus, ingénieur en radiophonie chez IBM\index{IBM},
|
|
|
|
% ========================================
|
|
|
|
\section{F77}
|
|
|
|
Dernière version à exiger le format '80 colonnes' des cartes perforées,
|
|
cette version est aussi (aux yeux de vieux dinos) la plus pure,
|
|
à cause d'instructions comme le \textsl{computed goto} ou le
|
|
mythique \textsl{comefrom}. Nom officiel : \texttt{ANSI X3.9-1978}.
|
|
|
|
% ============****************===============
|
|
|
|
% https://linuxfr.org/users/vmagnin/journaux/taptempo-fortran
|
|
|
|
\section{Gfortan} \index{gfortran}
|
|
|
|
Puis ce langage du passé a subi une évolution lente vers quelque
|
|
chose de bien plus moderne : le Fortran 90.
|
|
Les dinos vont devoir s'adapter. Et utiliser \texttt{gfortran},
|
|
un élément de la Gnu Compiler Collection\index{gcc}.
|
|
|
|
Comme pour tous les langages de programmation,
|
|
il est obligatoire d'avoir l'exemple canonique, donc le voilà.
|
|
Il faut l'enregister dans un fichier nommé \texttt{hello.f90}
|
|
pour que le compilateur puisse admettre que c'est écrit
|
|
en \textsl{free form format}.
|
|
|
|
\begin{verbatim}
|
|
$ cat hello.f90
|
|
program hello
|
|
implicit none
|
|
print *, "hello world"
|
|
end
|
|
$ gfortran -Wall hello.f90 -o hello && ./hello
|
|
hello world
|
|
$
|
|
\end{verbatim}
|
|
|
|
% --------------------------------------------------------
|
|
\section{Args \& Env}
|
|
|
|
Un fort beau programme, mais il est un peu fermé au monde extérieur.
|
|
Quand on lance un programme, il peut recevoir des instructions
|
|
par (mais pas que) deux canaux : les arguments de la ligne de commande
|
|
et les variables d'environnement.
|
|
|
|
\begin{verbatim}
|
|
program rum_me
|
|
implicit none
|
|
integer :: nbarg, foo
|
|
character(len=32) :: arg
|
|
|
|
nbarg = IARGC()
|
|
if (nbarg .GT. 0) then
|
|
do foo=1, nbarg
|
|
call GETARG(foo, arg)
|
|
print *, foo," ", arg
|
|
enddo
|
|
endif
|
|
end
|
|
\end{verbatim}
|
|
|
|
Si un des arguments doir être vu comme une valeur numérique,
|
|
il faut la convertir avant usage.
|
|
|
|
\begin{verbatim}
|
|
character(len=89) :: arg
|
|
real :: cx
|
|
call getarg(2, string) ; read (string, *) cx
|
|
\end{verbatim}
|
|
|
|
|
|
% --------------------------------------------------------
|
|
|
|
\subsection{Tableaux}
|
|
|
|
Rank, Size, \textsc{allocatable}, toussa\dots
|
|
|
|
% --------------------------------------------------------
|
|
|
|
\subsection{Fichiers}
|
|
|
|
Pour qui vient du C et de la philosophie Unix, la gestion
|
|
des fichiers en Fortran est assez déroutante%
|
|
\footnote{Par contre, pour un dino des \textsl{big irons}\dots}.
|
|
Il semble qu'il y ait deux concepts orthogonaux.
|
|
|
|
Open, Read, Write, Inquire, toussa\dots
|
|
|
|
% --------------------------------------------------------
|
|
|
|
\subsection{Modules}
|
|
|
|
Une notion essentielle, à mon avis, pour écrire des programmes
|
|
au-delà de 104 lignes. Oui, j'avoue, j'ai bien changé depuis
|
|
l'époque où je confectionnait des procédures \textsl{monobloc}
|
|
de 1337 lignes, avec une bonne centaine de \texttt{GOTO} dedans.
|
|
|
|
|
|
% --------------------------------------------------------
|
|
|
|
\subsection{Images ?}
|
|
|
|
Plplot semble être un bon choix pour commencer.
|
|
|
|
% ========================================
|