\documentclass[twocolumn,a4paper]{article}
\usepackage{french,tp}
\begin{document}

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

\begin{center}
\sc Notions étudiées
\end{center}
Notions de {\em langage}, {\em syntaxe}, {\em compilateur}. \\
Il faut savoir distinguer:
les {\em mots r\'eserv\'es}, les {\em instructions}, 
les {\em commentaires}, les {\em expressions}, 
les {\em variables}, les {\em identificateurs}, les {\em types},
les {\em proc\'edures}, les {\em fonctions}, les {\em arguments}. 
\subsection*{Structure d'un programme simple}
Trois zones :
$\bullet$
Descriptif (nom du programme). Mot cl\'e {\tt PROGRAM}.

$\bullet$
Bloc de d\'eclaration. Mot cl\'e {\tt VAR}.

$\bullet$
Bloc principal d'instructions.
Mots clés {\tt BEGIN} et {\tt END}.
Ne pas oublier le point final.


\subsection*{Contenu des blocs}
$\bullet$
Dans un bloc d'instructions,
les {\em instructions}
 sont s\'epar\'ees par des {\tt ;} et sont ex\'ecut\'ees
successivement.

Une instruction, c'est soit une unique instruction,
soit une s\'equence d'instructions \`a l'int\'erieur
d'un {\tt BEGIN} {\tt END}.

$\bullet$
Dans le bloc de déclarations, après le mot clé {\tt VAR},
les {\em déclarations} de variables sont de la forme 
\\
{\em IdentificateurDeVariable} {\tt :} {\em Type}; \\
{\em Identificateur1, Identificateur2} {\tt :} {\em Type};

$\bullet$
Les {\em commentaires} sont entre accolades {\tt \{ \}}. 

\subsection*{Identificateurs, expressions et affectation}
$\bullet$
Le PASCAL ne distingue pas les majuscules et les minuscules.
Les {\em identificateurs} commencent par une lettre et
ne contiennent que des lettres (soulign\'e {\tt \_} compris) ou des chiffres (en particulier,
pas d'espace). Ce ne peut pas \^etre un {\em mot r\'eserv\'e}.
\\
Les identificateurs peuvent désigner le programme,
une variable, une fonction ou une procédure.

$\bullet$
Une {\em expression} est une construction qui a une valeur (typ\'ee).
Exemple: cha\^{\i}nes de caract\`eres, somme de deux nombres, variable.
On peut construire de nouvelles expressions \`a l'aide
des parenth\`eses, des op\'erateurs, des fonctions.

$\bullet$
Une {\em affectation} est de la forme 
\begin{center}
{\em IdentificateurDeVariable} {\tt :=} {\em Expression}
\end{center}

\subsection*{Procédures et fonctions}
$\bullet$
Un appel de {\em proc\'edure} ou de {\em fonction} est de la forme:
\\
{\em IdentificateurDeFonction} {\tt (} {\em Argument} {\tt )}
\\
{\em IdentificateurDeFonction} {\tt (} {\em Arg1}{\tt,} {\em Arg2}
{\tt,} {\em Arg3} {\tt )}
\\
La différence est qu'une {\em fonction} a une valeur :
c'est une expression. {\tt Abs()} est une fonction.
Tandis qu'une {\em procédure} est une instruction.
{\tt WriteLn()} est une procédure.

$\bullet$
Un {\em argument} est soit une variable, soit une expression:
cela d\'epend de la fonction ou de la proc\'edure.
(comparer {\tt readln} et {\tt writeln}).

\subsection*{Types}
$\bullet$
Les entiers: {\tt INTEGER}, {\tt LONGINT} et {\tt SHORTINT}.
Ce ne sont pas de vrais entiers.
Op\'erations possibles: {\tt +}, {\tt -}, {\tt *}, {\tt DIV}, {\tt MOD},
{\tt Abs()}.

$\bullet$
Les r\'eels: {\tt REAL}. Ce ne sont pas de vrais r\'eels.
Op\'erations possibles: {\tt +}, {\tt -}, {\tt *}, {\tt /},
{\tt Abs()}.

$\bullet$
Les caract\`eres: {\tt CHAR}. Il y en a exactement 256.
Syntaxe:
\begin{center}
'{\em Caract\`ere}'
\end{center}

$\bullet$
Les cha\^{\i}nes de caract\`eres: {\tt STRING}.
\begin{center}
'{\em Cha\^{\i}neDeCaract\`eres}'
\end{center}

$\bullet$
Les bool\'eens: {\tt BOOLEAN}.
Ils n'ont que deux valeurs possibles: {\tt True} et {\tt False}.
Op\'erations logiques: {\tt NOT}, {\tt AND}, {\tt OR}, {\tt XOR}.
Cela correspond \`a l'{\em alg\`ebre bool\'eenne}.

\subsection*{Structures}

$\bullet$
Branchement conditionnel.
Syntaxe:
\begin{flushleft}
{\tt IF} {\em ExpressionBool\'eenne} \\
{\tt THEN} {\em Instruction} {\tt ;}
\end{flushleft}
\begin{flushleft}
{\tt IF} {\em ExpressionBool\'eenne} \\
{\tt THEN} {\em Instruction} \\
{\tt ELSE} {\em Instruction} {\tt;} \\
\end{flushleft}

Remarquer la diff\'erence de syntaxe entre {\tt IF THEN}
et {\tt IF THEN ELSE}.

$\bullet$
Itération
\begin{center}
{\tt FOR} {\em Identificateur} {\tt := } {\em ExprEnti\`ere}
{\tt TO} {\em ExprEnti\`ere} {\tt DO} \\
{\em Instruction} {\tt ;}
\end{center}

\subsection*{Exercices}

$\bullet$
\'Ecrire un programme qui demande un nombre
et l'affecte à une variable,
calcule la valeur absolue de ce nombre
et l'affecte à la même variable,
puis l'affiche.

$\bullet$
\'Ecrire un programme qui teste si deux nombres
(demandés à l'utilisateur) sont égaux.

$\bullet$
Même chose avec trois nombres.

$\bullet$
\'Ecrire un programme qui demande deux nombres,
et affiche le quotient (entier) de ces deux nombres,
en traitant s\'epar\'ement le cas o\`u le deuxi\`eme nombre est nul.

$\bullet$
\'Ecrire un programme qui affiche tous les nombres de 1 \`a 100.

$\bullet$
\'Ecrire un programme qui affiche tous les nombres pairs de 1 \`a 100.

$\bullet$
\'Ecrire un programme qui affiche tous les nombres de 1 \`a 100,
pour lesquels le reste de la division euclidienne par 5 est exactement 1.

$\bullet$
\'Ecrire un programme qui calcule la somme des $1/i$ pour $i=1...10000$.

\end{document}
