\input MIAS

\TP1
%%%%%%%%%%%%%%%%%
\def\affect{\modemath{{\mkern -2mu :\mkern -.3mu = \mkern 6mu}}}
\def\dpt{\modemath{{\mkern -2mu : \mkern 5mu}}}
\def\k {\ \kern 1cm}
%%%%%%%%%%%%%%%%%
\vskip -5mm
%%%%%%%%%%%%%%%%%
Ce sujet tr�s �l�mentaire a pour but de vous faire manipuler des mots. Turbo--Pascal
propose le type {\tt string} qui est tr�s similaire au type {\tt mot} qui
nous int�resse.
\puce La d�claration d'une variable {\tt s \dpt string} �quivaut � celle d'un tableau
\par
\centerline{\tt s \dpt array[0..255] of char.}
\par
La longueur {\tt l = length(s)} de {\tt s} est cod�e par la composante d'indice {\tt 0} : \par
\centerline{\tt l =  ord(s[0])}
\par 
et, pour chaque {\tt n} dans le domaine {\tt [1..l]}, {\tt s[n]} est le {\tt n}--i�me
caract�re de {\tt s}. 
\puce Nous prendrons la d�finition suivante du type {\tt mot} :
\pars
{\parindent 4cm
\tt
\item{type mot =} record\par
{\parindent 6cm
\item{ch \dpt} array[1..Max] of char ;\par
\item{long \dpt} integer\par
}
\item{} end ;\par
}
\pars
o� {\tt Max} est une constante que vous choisirez en fonction de vos besoins.
\parm
{\bf I. Primitives relatives aux mots.}
\pars
Ecrire les primitives suivantes \dpt
\pars
\bib{\tt procedure motvide( var u \dpt mot ) ;}{ 
construire le mot vide, c'est--�--dire, 
sch�matiquement : {\tt u \affect ()},
}
\par
\bib{\tt procedure adjoindre( var u \dpt mot ; x \dpt char ) ;}{
adjoindre le caract�re {\tt x}
� la fin du mot {\tt u} c'est--�--dire \dpt {\tt u \affect ux},
} 
\par
\bib{\tt procedure lire( var u \dpt mot ) ;} {
donner � {\tt u} la valeur correspondant � une cha�ne
de caract�res lue � l'�cran, {\sl cette proc�dure est la seule o� doit intervenir une variable
de type {\tt string}},
}\par
\bib{\tt procedure retirer( var u \dpt mot ) ;} {
retirer le dernier caract�re d'un mot 
c'est--�--dire \dpt si {\tt u = vx} alors {\tt u \affect v}, 
}
\par
\bib{\tt function longueur( u \dpt mot ) \dpt integer ;} {
renvoyer la longueur d'un mot,
}
\par
\bib{\tt function nieme( u \dpt mot ; n \dpt integer ) \dpt char ;} {
renvoyer le {\tt n}--i�me
caract�re du mot {\tt u},}\par
\bib{\tt procedure ecrire( u \dpt mot ) ;} {
�crire � l'�cran la cha�ne de caract�res correspondant
au mot {\tt u}.
}
\parm
{\bf II. Applications.}
\pars
Ecrire des programmes n'utilisant que les primitives que vous venez de d�finir (les
lectures et �critures se feront toutes au clavier et � l'�cran). 
Par exemple : 
\puce Inverser un mot (c'est--�--dire, transformer un mot en son image miroir).
\puce Tester si un mot est un palindrome (c'est--�--dire, tester s'il est �gal � son inverse). 
\puce Concat�ner deux mots.
\puce Comparer deux mots.
\puce Tester si un mot {\tt v} 
est un sous--mot du mot {\tt u} :
si le test est positif, il devra permettre de localiser la premi�re occurrence
de {\tt v} dans {\tt u}.
\puce Tester si un mot est correctement parenth�s�.




\bye