Département d'Informatique
IUP1 GMI 2002/2003
Algorithmique & Programmation
Contrôle Terminal
Mercredi 29 janvier
(durée : 3h, aucun document autorisé)










Mots croisés



On considére des grilles de mots croisés de dimensions N×M (avec 1<=N<=MAX_DIM et 1<=M<=MAX_DIMMAX_DIM est une constante supérieure à 11).

Voici ci-dessous un exemple de grille de mots croisés de dimensions 11 × 11. Dans la suite, cette grille est nommée G et est utilisée pour illustrer les fonctions à définir.




  1. Chaque case est repérée par son numéro de ligne et son numéro de colonne. Les lignes et colonnes sont numérotées à partir de 1. Une case, soit contient une lettre, soit est une case noire.

    1. (12 pts) Définir la constante MAX_DIM et le type grille de mots croisés. On représentera une grille par une structure dont l'un des champs est un tableau à 2 dimensions. On utilisera le caractère '#' pour représenter une case noire.

      Définir les opérations suivantes associées au type grille :
      • hauteur qui retourne le nombre de lignes d'une grille.
      • largeur qui retourne le nombre de colonnes d'une grille.
      • contenu_case qui retourne le contenu d'une case d'une grille
        étant donnés son numéro de ligne et son numéro de colonne.

    2. (9 pts) Ecrire une fonction nb_cases_noires_en_ligne qui, étant donnés une grille et un numéro de ligne, retourne le nombre de cases noires sur la ligne.

      Exemples :
      Avec la grille G et 1 comme numéro de ligne, le résultat de la fonction est 0.
      Avec la grille G et 2 comme numéro de ligne, le résultat de la fonction est 2.


    3. (19 pts) Ecrire une fonction affiche_nb_lettres_en_ligne qui, étant donnés une grille et un numéro de ligne, affiche le nombre de lettres entre chaque case noire sur la ligne.

      Exemples :
      Avec la grille G et 6 comme numéro de ligne, la fonction affiche :
      2 5 2.
      Avec la grille G et 10 comme numéro de ligne, la fonction affiche :
      1 7 1.

      Indication : Modifier la fonction précédente en introduisant une nouvelle variable pour mémoriser le numéro de colonne de la première lettre d'un groupe de lettres. Ne pas oublier le dernier groupe de lettres.




  2. Dans une grille de mots croisés, les mots ont obligatoirement au moins 2 lettres.
    Une lettre isolée n'est pas un mot de la grille.

    1. (6 pts) Ecrire une fonction affiche_nb_lettres_de_mot_en_ligne qui, étant donnés une grille et un numéro de ligne, affiche le nombre de lettres de chacun des mots placés horizontalement sur la ligne.

      Exemples :
      Avec la grille G et 6 comme numéro de ligne, la fonction affiche :
      2 5 2.
      Avec la grille G et 10 comme numéro de ligne, la fonction affiche :
      7.

      Indication : Modifier la fonction précédente.

    2. (6 pts) Ecrire une fonction nb_mots_en_ligne qui, étant donnés une grille et un numéro de ligne, retourne le nombre de mots placés horizontalement sur la ligne.

      Exemples :
      Avec la grille G et 6 comme numéro de ligne, le résultat est 3.
      Avec la grille G et 10 comme numéro de ligne, le résultat est 1.

      Indication : Modifier la fonction précédente en introduisant un compteur.

    3. (9 pts) Ecrire une fonction affiche_mots_en_ligne qui, étant donnés une grille et un numéro de ligne, affiche les mots placés horizontalement sur la ligne.

      Exemples :
      Avec la grille G et 3 comme numéro de ligne, la fonction affiche :
      TERRE RAVIS
      Avec la grille G et 2 comme numéro de ligne, la fonction affiche :
      ORIFICE.

      Indication : Modifier la fonction en (a) en introduisant un nouveau compteur pour parcourir les lettres d'un mot.

    4. (11 pts) Ecrire une fonction solution_grille qui affiche la solution d'une grille de mots croisés c'est-à-dire la liste des mots d'une grille de mots croisés de la façon suivante :

       Horizontalement :
       ASSIMILERAI
       ORIFICE 
       TERRE RAVIS
       EXTENUERENT
       ...
       Verticalement :
       ATTENDRISSE
       EXAMINE
       SORTI VERSO
       IRREFLEXION
       ...
      
      Indication : Expliquer comment écrire la fonction affiche_mots_en_colonne.



  3. Dans la suite, on représentera un mot (sans définir de nouveau type) par une chaine de caractères dont la longueur ne dépasse pas MAX_DIM.



    1. (13 pts) Ecrire une fonction nieme_mot_en_colonne qui, étant donnés une grille, un numéro de colonne et un entier n, extrait le nième mot placé verticalement sur la colonne, ou bien rend la chaine vide (""), si le nombre de mots sur la colonne est strictement inférieur à n.

      Exemple :
      Avec la grille G, 6 comme numéro de colonne et l'entier 2, le résultat est
      "USUEL"
      car
      "USUEL" est le 2ième mot placé verticalement sur la colonne numéro 6.

      Indication : Modifier la fonction affiche_mots_en_colonne.

    2. (15 pts) Ecrire une fonction est_vertical qui détermine si un mot donné est placé verticalement dans une grille. On utilisera la fonction prédéfinie strcmp qui compare 2 chaines de caractères et retourne 0 si elles sont égales.

      Exemple :
      Le mot
      "OTITE" est placé verticalement dans la grille G.



This document was translated from LATEX by HEVEA.