\documentclass[twocolumn,a4paper]{article}
\usepackage{french,tp}
\advance\topmargin -1cm
\advance\textheight 1cm

\begin{document}

\begin{header}
\Huge Quatrième TP
\bigskip
\end{header}

\subsection*{Les déclarations {\tt CONST} et {\tt TYPE}}
Le mot réservé {\tt CONST} sert à associer à
un identificateur une valeur, qui est habituellement
un paramètre du programme. Cela permet de n'avoir
à modifier cette valeur qu'à un seul endroit lorsqu'on
décide de la changer.

Le mot réservé {\tt TYPE} sert à associer à
un identificateur un type de variable qu'on
utilise souvent. Cela permet d'économiser de
la place et de faciliter la lecteure du
programme.

On les utilise ainsi :
\\ {\tt CONST} {\em Nom} {\tt =} {\em Valeur} {\tt ;}
...            {\em Nom} {\tt =} {\em Valeur} {\tt ;}
\\ {\tt TYPE } {\em Nom} {\tt =} {\em Valeur} {\tt ;}
...            {\em Nom} {\tt =} {\em Valeur} {\tt ;}

\subsection*{Tableaux à une coordonnée}
\subsubsection*{Noyau commun}
On se propose de modifier le programme
ci-dessous
pour tester différentes manipulation
des tableaux.
\begin{verbatim}
PROGRAM Tableaux;
CONST Dim = 10;
TYPE  Tableau = ARRAY[1..Dim] OF INTEGER;
VAR a : Tableau;
    i : INTEGER;
    { Autres variables éventuelles }
BEGIN
  Randomize;
  FOR i := 1 TO Dim DO    { Remplissage  }
    a[i] := Random(100);  { du tableau a }
  FOR i := 1 TO Dim DO
    Write(a[i],' ');      { Affichage    }
  WriteLn;                { du tableau a }

  { Les rajouts sont ici }
END.
\end{verbatim}

\subsubsection*{Inversion de l'ordre}
$\bullet$
Un programme qui
remplit un second tableau {\tt b} avec les
éléments de {\tt a} en ordre inverse,
puis qui affiche le tableau {\tt b}.

$\bullet$
$\bullet$
Un programme qui modifie le tableau
{\tt a} en mettant ces éléments en
ordre inverse.
Faire attention à la parité du
nombre {\tt Dim}.

$\bullet$
$\bullet$
{\em (optionnel)}
Adapter ceci pour faire un programme
qui calcule la chaîne "miroir"
d'une chaîne de caractères.

\subsubsection*{Tri par ordre croissant}
$\bullet$
Un programme qui affiche la valeur
et la position dans le tableau du plus grand
élément de {\tt a}.
S'il y a plusieurs maxima, n'importe
lequel convient.

$\bullet$
$\bullet$
Un programme qui échange le plus grand
élément de {\tt a} avec le dernier
élément de {\tt a}.

$\bullet$
$\bullet$
$\bullet$
{\em (optionnel)}
Un programme qui s'inspire du précédent
pour trier le tableau {\tt a} par ordre
croissant.

\subsection*{Tableaux à deux coordonnées}
\subsubsection*{Noyau commun}
$\bullet$
Comprendre comment fonctionne le programme ci-dessous
\begin{verbatim}
PROGRAM MatricesCarrees;
CONST Dim = 5;
TYPE  Matrice = ARRAY[1..Dim,1..Dim] OF INTEGER;
VAR a : Matrice;
    i,j : INTEGER;
BEGIN
  Randomize;
  FOR i := 1 TO Dim DO
   FOR j := 1 TO Dim DO
    a[i,j] := Random(21) - 10;
  FOR i := 1 TO Dim DO
  BEGIN
   FOR j := 1 TO Dim DO
    Write(a[i,j],' ');
   WriteLn;
  END;
END.
\end{verbatim}

\subsubsection*{Opérations simples}
$\bullet$
Un programme qui calcule dans une
seconde matrice {\tt b} la transposée
de {\tt a}.

$\bullet$
Remplacer {\tt a} par sa transposée.

$\bullet$
$\bullet$
Faire un programme qui calcule la
transposée d'une matrice $5\times8$
(il faut donc définir un autre
type pour stocker ces matrices
rectangulaires).

\subsubsection*{Matrices symétriques}
$\bullet$
$\bullet$
Un programme qui remplace {\tt a}
par la somme de {\tt a} et de sa
transposée.

$\bullet$
$\bullet$
Un programme qui teste si la
matrice {\tt a} est symétrique.

$\bullet$
$\bullet$
Le compléter avec un
programme qui teste si {\tt a}
est antisymétrique.

\subsubsection*{Spirale numérique}
$\bullet$
$\bullet$
$\bullet$
Le problème consiste à construire
dans un tableau carré de dimension
impaire une spirale de la forme ci-dessous.

\begin{center}
\divide\unitlength 2
\begin{picture}(308,107)
\special{psfile=spirale.eps vscale=50 hscale=50}
\end{picture}
\end{center}

On peut décomposer l'algorithme en
deux étapes :
\begin{itemize}
\item parcours de l'ensemble des cadres
repérés par leurs coins supérieurs gauche (fig. 2).
\item pour chaque cadre, définition de
quatre sous-parcours (fig. 3).
\end{itemize}
Faire attention à la dimension du tableau.
Réfléchir (sur papier) avant de programmer.

\end{document}
