\ifx\documentclass\undefined
\documentstyle[fr,programs,keywords]{article}
\else
\documentclass{article}
\usepackage{CheckForDef}
\usepackage{fr}
\usepackage{programs}
\usepackage{keywords}
\fi

\def\p#1{{\bf{}#1}}

\def\wideoutput{%
\setlength{\topmargin}{-1.54cm}%
\setlength{\headsep}{0cm}%
\setlength{\textwidth}{17.5cm}%
\setlength{\textheight}{25.5cm}%
\setlength{\oddsidemargin}{-1cm}%
\setlength{\evensidemargin}{-1cm}}
\wideoutput

\InBodyLeftNumberLine

\ProgKeywords

\begin{document}

Dans le programme suivant, quel est le type de \p{A}?
celui de~\p{B}?
\p{A} et~\p{B} ont-ils m\^eme type?
Les instructions des
lignes~\ref{progFORTTYPAGEinstruction1}--\ref{progFORTTYPAGEinstruction3}
sont-elles correctes? 
Pourquoi?

\input{prog1.tex}

La variable \p{A} est d'un type anonyme tableau \`a une
dimension de \p{COULEURS}.
Il en est de m\^eme pour \p{B}.
Bien que la description des deux types soit identique, ils sont
diff\'erents.

L'instruction de la ligne~\ref{progFORTTYPAGEinstruction1} est
correcte (affectation d'une valeur de type \p{COULEURS} dans une
variable du m\^eme type). 
Les instructions des lignes~\ref{progFORTTYPAGEinstruction2}
et~\ref{progFORTTYPAGEinstruction3} sont ill\'egales (les types
sont diff\'erents).
Par contre, si l'on avait \'ecrit le programme comme suit

\NewKeyword{\BEGIN}{this is the beginning}[ceci est le d\'ebut]
\FUAlgoKeywords

\input{prog2.tex}

\noindent%
il n'y aurait pas eu d'erreur.
Dans ce cas, en effet, \p{A} et \p{B} appartiennent au m\^eme
sous-type initial, et un contr\^ole sera mis en place pour
v\'erifier les bornes des intervalles \`a l'ex\'ecution.

\bigskip

Un exercice de num\'erotation:

\NewKeyword{\END}{this IS the real end}
\AlgoKeywords

\input{prog3.tex}    

\end{document}