tweak fortran pages

This commit is contained in:
tTh 2023-03-04 12:48:05 +01:00
parent 6c2d6476b8
commit aa3d078e21
4 changed files with 88 additions and 30 deletions

View File

@ -1,13 +1,15 @@
\chapter{Fortran} \label{chap:Fortran} \index{Fortran}
\begin{quote}
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},
\end{quote}
% ========================================
\section{F77}
\section{FORTRAN77}
Dernière version à exiger le format '80 colonnes' des cartes perforées,
cette version est aussi (aux yeux de vieux dinos) la plus pure,
@ -15,6 +17,10 @@ cette version est aussi (aux yeux de vieux dinos) la plus pure,
mythique \textsl{comefrom}\footnote{Keyword: Datamatic}.
Nom officiel : \texttt{ANSI X3.9-1978}.
L'incarnation \texttt{g77}\index{g77} n'existe plus, meis peut être
à-priori émulable en jouant avec les options de \texttt{gfortran}
et un brin de shell.
% ============****************===============
% https://linuxfr.org/users/vmagnin/journaux/taptempo-fortran
@ -33,7 +39,7 @@ 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}
\begin{lstlisting}
$ cat hello.f90
program hello
implicit none
@ -42,7 +48,7 @@ end
$ gfortran -Wall hello.f90 -o hello && ./hello
hello world
$
\end{verbatim}
\end{lstlisting}
% --------------------------------------------------------
%
@ -55,7 +61,7 @@ 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}
\begin{lstlisting}
program rum_me
implicit none
integer :: nbarg, foo
@ -69,18 +75,18 @@ program rum_me
enddo
endif
end
\end{verbatim}
\end{lstlisting}
Si un des arguments doir être vu comme une valeur numérique,
il faut la convertir avant usage. Exemple pour un nombre
flottant~:
il faut convertir la chaine de caractères avant usage.
Exemple pour un nombre flottant~:
\begin{verbatim}
\begin{lstlisting}
character(len=89) :: arg
real :: cx
call getarg(2, string)
read (string, *) cx
\end{verbatim}
\end{lstlisting}
% --------------------------------------------------------
@ -91,7 +97,32 @@ Rank, Size, \textsc{allocatable}, toussa\dots
Amies du C, soyez d'entrée prévenues, en Fortran, l'indice
par défaut du premier élément d'un tableau est \textbf{1},
mais cette valeur peut être modifiée à la déclaration
du tableau.
du tableau. Ce qui permet des \textsl{of-by-anynumber}
du plus bel effet.
% --------------------------------------------------------
% new 29 decembre 2022
\section{Nombres complexes}
Partie imaginaire : \texttt{ipart = aimag(cmplx)}.
% --------------------------------------------------------
% nouveau 4 mars 2023
\section {Les structures}\index{type}
Une « structure », c'est comme une petite boite dans laquelle on peut
mettre des variables de différentes natures.
\begin{lstlisting}
type t_pixrgb
integer :: r, g, b
integer :: alpha = 0
end type
\end{lstlisting}
Nous verrons plus loin l'importance de cette notion.
% --------------------------------------------------------
@ -130,12 +161,39 @@ Il serait bon de voir un exemple du monde réel. Ou juste un
exemple basique. Mais avec des explications. Parce que ce n'est pas
vraiment évident. Mais c'est un concept balaize.
Nous allons donc créer un module qui ne fait quasiment rien, ce qui
limitera le nombre de pannes possibles dans la suite des opérations.
\begin{lstlisting}
module dummy
implicit none
contains
subroutine print_dummy
print *, 'this is the dummy subroutine'
end subroutine
end module
\end{lstlisting}
Rien de bien compliqué~:
Un module peut être vu comme une boite qui contient (\texttt{contains})
des procédures (\texttt{function} ou \texttt{subroutine},
et qui sera utilisé avec ce genre de petit programme~:
\begin{lstlisting}
program t
use dummy
implicit none
print *, '=== programme de test ==='
call print_dummy
end program
\end{lstlisting}
% --------------------------------------------------------
\section{Random et Aléa}
La dernière ligne va vous étonner.
\begin{verbatim}
\begin{lstlisting}
integer, dimension(3) :: tarray
integer :: t3
real :: dummy
@ -146,7 +204,7 @@ La dernière ligne va vous étonner.
! after initializing the random generator engine,
! you MUST use it for initializing the initializer
dummy = rand()
\end{verbatim}
\end{lstlisting}
% --------------------------------------------------------
% new Thu 24 Nov 2022 02:27:05 AM CET
@ -157,13 +215,6 @@ Comme d'habitude avec gcc\footnote{The Gnu Compiler Collection}, les
options sont innombrables. J'ai essayé d'en dégager les plus importantes,
mais ce ne sont probablement pas les seules.
% --------------------------------------------------------
% new 29 decembre 2022
\section{Nombres complexes}
Partie imaginaire : \texttt{ipart = aimag(cmplx)}.
% --------------------------------------------------------
\section{Images}
@ -177,7 +228,9 @@ un peu de \textsc{rtfm}.
Nous allons donc commencer par Plplot, pour envisager ensuite les alternatives.
% --------------------------------------------------------
%
% $ dillo /usr/share/doc/plplot-doc/html/index.html &
%
\subsection{Plplot} \index{plplot} \label{ploplt}
Commençons directement par un EMC\footnote{Exemple Minimal Compilable}
@ -188,15 +241,7 @@ qui gèrent pour vous les valeurs « par défaut ».
Voyez cette exemple comme un \textsl{boilerplate} simple
ou un \textsc{HelloWorld}~:
\begin{verbatim}
program dessine
use plplot
implicit none
call plinit ()
call plenv(-2.1, 2.1, -2.1, 2.1, 0, 0)
call plend
end program
\end{verbatim}
\lstinputlisting{code/fortran/plplotting.f90}
Il ne se passe pas grand chose, sauf la proposition de choisir
le type de sortie.

5
code/fortran/Makefile Normal file
View File

@ -0,0 +1,5 @@
INCS = -I/usr/include/plplot -I/usr/lib/x86_64-linux-gnu/fortran/modules/plplot
plplotting: plplotting.f90 Makefile
gfortran -g $< $(INCS) -lplplotfortran -o $@

View File

@ -0,0 +1,8 @@
program plplotting
use plplot
implicit none
call plinit ()
call plenv(-2.1, 2.1, -2.1, 2.1, 0, 0)
call plend
end program

View File

@ -26,7 +26,7 @@
%------ reglages des 'listings'
\lstset{frame=single} % dessin d'un cadre autour du listing
\lstset{basicstyle=\ttfamily\small}
\lstset{aboveskip=1.2em,belowskip=1.2em}
\lstset{aboveskip=1.0em,belowskip=1.0em}
\setcounter{tocdepth}{1}
\pagestyle{plain}