\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 trs ŽlŽmentaire a pour but de vous faire manipuler des mots. Turbo--Pascalpropose le type {\tt string} qui est trs 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}--imecaractre 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 caractre {\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 caractres 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 caractre 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}--imecaractre du mot {\tt u},}\par\bib{\tt procedure ecrire( u \dpt mot ) ;} {Žcrire ˆ l'Žcran la cha”ne de caractres 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 premire occurrencede {\tt v} dans {\tt u}.\puce Tester si un mot est correctement parenthŽsŽ.\bye