UNIVERSITE BLAISE PASCAL JANVIER 2001
U.F.R. Sciences Exactes et Naturelles
 
D.E.U.G. MIAS-MASS - S1 - Examen Terminal d'Informatique


Documents et calculateurs interdits,                                                                           DUREE : 2 heures
L'emploi des instructions EXIT, HALT et GOTO n'est pas autorisé.

EXERCICE : On donne le programme suivant :

program PassageDeParametres;

  Var X, Y : integer;
  procedure P(N : integer; var M : integer);
    begin
    N:=N-1; M:=M-1;
    end;
begin
    X:=10; Y:=10;
    P(X,Y);
    writeln('X=',X:1,', Y=',Y:1);
end.
1.) Quel est le résultat de l'exécution de ce programme ? Pourquoi ?
2.) Créer une fonction qui fait la même chose que la procédure P, et réécrire le programme principal en conséquence..

3.) Plus généralement, quelle(s) différence(s) y a-t-il, en Pascal, entre une "function" et une "procedure".
 

PROBLEME

Première partie :

  On suppose défini un type CHAINE par la déclaration : TYPE CHAINE = string[255] ;

et on donne la fonction suivante :
FUNCTION Agreable(S : CHAINE) : boolean ;
Var test : boolean ;
    i : integer ;
Begin
test:=true ;
for i:=1 to (length(S) div 2) do
  if (S[i]<'a') or (S[i]>'z') or (S[i]<>S[length(S)-i+1])
    then test:=false
    else writeln(i:3,' , ',S[i],' : OK') ;
Agreable:=test ;
End ;
1.1.) Donner l'affichage et le retour de cette fonction pour les chaînes S suivantes :
'aha', 'ahaha' , 'houhou' , puis 'ohe' .
T.S.V.P.

  Une chaîne de caractères de type CHAINE sera dite agréable si la fonction Agreable retourne true pour cette chaîne.
1.2.) Ecrire un sous-programme CREER qui construit une chaîne agréable, de longueur M donnée, par concaténation de caractères. On choisira aléatoirement parmi les lettres minuscules le plus grand nombre possible de caractères.
N.B. : la fonction CHR permet d'obtenir un caractère à partir de son code ASCII. Par exemple, CHR(97) retourne 'a', CHR(122) retourne 'z'.

Deuxième partie :

Remarque : en cas de difficultés à écrire un des sous-programmes suivants, il est conseillé de se limiter à l'écriture de l'en-tête de ce sous-programme avec ses paramètres, puis de passer à la question suivante.

  On représente une grille de mots croisés, sans cases noires, de N lignes (N<=Nmax) et M colonnes (M<=Mmax) par un tableau à deux indices.

2.1.) Définir le type correspondant à une telle grille.

On utilisera ce type pour la suite de l'exercice.

2.2.) Ecrire un sous-programme SAISIR qui saisit N chaînes de caractères et les intègre dans une grille, après avoir vérifié que leur longueur est bien M.

2.3) Ecrire un sous-programme MODIFIER qui permet de modifier le caractère d'une case de la grille.

2.4) Ecrire une procédure AFFICHER qui affiche une grille selon le format ci-dessous.
            N=2 et M=10 :

         1  2  3  4  5  6  7  8  9  10

      1  a  b  c  d  e  f  g  h  i  j
      2  b  c  d  e  f  g  h  i  j  k
2.5) Ecrire une fonction AGRILLABLE qui teste si toutes les lignes et colonnes d'une grille sont agréables. On dit alors que la grille elle-même est agréable.
2.6.) Ecrire un sous-programme CONSTRUIRE qui construit une grille agréable, à partir d'un maximum de chaînes de M caractères obtenues aléatoirement par le sous-programme CREER (défini dans la question 1.2).

2.7.) Construire, à l'aide des sous-programmes précédents, un programme qui :

- saisit les valeurs de N et M et le contenu d'une grille ;

- affiche cette grille ;
- vérifie si elle est agréable ;
- si ce n'est pas le cas, au choix de l'utilisateur :
        - soit fait modifier cette grille par l'utilisateur jusqu'à la rendre agréable
        - soit remplace cette grille par une grille agréable construite aléatoirement ;
- affiche la grille obtenue ;
- reprend au début du programme si on le souhaite.