\documentclass[twocolumn,a4paper]{article}
\usepackage{french,tp}
\advance\leftmargin-5mm
\advance\rightmargin-5mm
\advance\textwidth 1cm
\advance\topmargin -1cm
\advance\textheight 1cm

\begin{document}

\begin{header}
\Huge Feuille d'exercices
\bigskip
\end{header}

\subsection*{Expressions}
On utilisera les opérations {\tt +, -, *, /}
et les fonctions {\tt Abs} (valeur absolue)
{\tt Sqr} (carré) et {\tt Sqrt} (racine carrée).

Traduisez les expressions suivantes
en Pascal, en utilisant un nombre
minimal de parenthèses.

\[
2n+1 \over \left(1+\frac1n\right) \left(1-\frac1n\right)
\]
\[
\sqrt{x^2+y^2}
\]
\[
-1\leq x\leq 1
\]
\[
\frac23 + {3y+\frac12
\over (y+1)^2}
\]

\subsection*{Analyse de procédures}
Dire ce que font les procédures ci-dessous.
Attention, la procédure {\tt Mystère3}
ne marche que pour {\tt N} pair.

\begin{verbatim}
PROCEDURE Mystère1(a, b, c : INTEGER);
VAR v : ARRAY[1..5] OF INTEGER;
BEGIN
  b := (a + b + c) MOD 2;
  FOR a := 3 TO 10 DO
    v[a DIV 2] := a;
  a := b DIV v[3];
  c := a MOD v[4];
  WriteLn(a+c);
END;
\end{verbatim}

\small
\begin{verbatim}
CONST N = 10;
PROCEDURE Mystère2(VAR a : ARRAY[0..N-1] OF INTEGER);
VAR x, y : INTEGER;
BEGIN
  y := a[N-1];
  FOR x := 0 TO N-2 DO
    a[N-1-x] := a[N-2-x];
  a[0] := y;
END;
\end{verbatim}

\begin{verbatim}
CONST N = 10;
PROCEDURE Mystère3(VAR a : ARRAY[0..N-1] OF INTEGER);
VAR x, y : INTEGER;
BEGIN
  y := a[0];
  FOR x := 0 TO (N DIV 2 - 2) DO
    a[2*x] := (a[2*x] + a[2*x+2]) DIV 2;
  a[N-2] := (a[N-2] + y) DIV 2;
  y := a[N-1];
  FOR x := 0 TO N-2 DO
    a[N-1-x] := a[N-2-x];
  a[0] := y;
  FOR x := 0 TO (N DIV 2 - 2) DO
    a[2*x] := (a[2*x] + a[2*x+2]) DIV 2;
  a[N-2] := (a[N-2] + y) DIV 2;
END;
\end{verbatim}

\normalsize\newpage
\subsection*{Temps de calcul}
Pour chaque programme ci-dessous, combien
d'affectations sont exécutées.

\begin{verbatim}
PROGRAM Temps1;           PROGRAM Temps2;
VAR i : INTEGER;          VAR i : INTEGER;
BEGIN                     BEGIN
  i := 1;                   i := 1;
  REPEAT                    REPEAT
    i := i + 1;               i := i + 1;
  UNTIL i = 10;             UNTIL i <= 10;
END.                      END.
\end{verbatim}

\begin{verbatim}
PROGRAM Temps3;           PROGRAM Temps4;
VAR i, m : INTEGER;       VAR i, m : INTEGER;
BEGIN                     BEGIN
  m := 0; i := 1;           m := 1; i := 1;
  REPEAT                    WHILE i < 5 DO
    m := m + 2;             BEGIN
    i := i + 1;               m := m + 2;
  UNTIL i > m;                i := i + 1;
END.                        END;
                          END.
\end{verbatim}

\subsection*{Vecteurs}
Nous définissons le type
{\tt Vecteur = ARRAY[1..3] OF REAL}.

\medskip
$\bullet$
Faire une fonction ayant deux arguments {\tt x} et
{\tt y} de type {\tt Vecteur}
dont le résultat est un booléen qui
dit s'ils sont égaux.

\medskip
$\bullet$
$\bullet$
Faire une fonction ayant un argument {\tt x}
de type {\tt Vecteur}
dont le résultat est la norme
de {\tt x}.

\medskip
$\bullet$
$\bullet$
Faire une fonction ayant deux arguments {\tt x} et
{\tt y} de type {\tt Vecteur}
dont le résultat est le produit scalaire
de {\tt x} et {\tt y}.

\medskip
$\bullet$
$\bullet$
Faire une procédure ayant trois arguments {\tt x},
{\tt y} et {\tt z} de type {\tt Vecteur}
qui mette dans {\tt z} la somme de {\tt x} et {\tt y}.

\subsection*{Tableaux d'entiers}
Nous définissons le type
{\tt Tableau = ARRAY[1..10] OF INTEGER}.

$\bullet$
Faire une fonction ayant un arguments {\tt x}
de type {\tt Tableau} dont le résultat
est la somme des éléments de {\tt x}.

\medskip
$\bullet$
Faire une fonction ayant deux arguments {\tt x}
et {\tt n} de types {\tt Tableau} et {\tt INTEGER}
dont le résultat est la somme (partielle)
des {\tt n} premiers éléments de {\tt x}.

\medskip
$\bullet$
$\bullet$
Faire une procédure ayant deux arguments {\tt x}
et {\tt y} de type {\tt Tableau}
qui mette dans {\tt y} les sommes partielles
des éléments de {\tt x}.

On a donc ${\tt y[k]} = \sum_{{\tt i}=1}^{\tt k} {\tt x[i]}$

\medskip
$\bullet$
$\bullet$
$\bullet$
Faire une procédure ayant deux arguments {\tt x}
et {\tt y} de type {\tt Tableau}
qui mette dans {\tt y} les moyennes mobiles
des éléments de {\tt x}.

On a donc {\tt y[k] = (x[k-1]+x[k+1]) DIV 2}.
Pour les extrémités du tableau, on utilise
{\tt x[1]} au lieu de {\tt x[11]} et {\tt x[10]}
au lieu de {\tt x[0]}.

\end{document}
