Année universitaire 2002-2003
espace

Licence d'informatique
Module 4 - partie "C / shell"



Travaux pratiques 3 :

  • 1. Erreurs à l'exécution.
  • 2. Présentation du débogueur xxgdb.
  • 3. Exercice 1 : le jeu de la vie.
  • 4. Exercice 2 : tri d'entiers.

  • 1. Erreurs à l'exécution.

    Si un programme est correct syntaxiquement, il se peut néanmoins que le programme exécutable produit ne réalise pas les traitements escomptés, à cause d'erreurs appelées "erreurs à l'exécution", qui peuvent être de deux types différents :

    Ces deux types d'erreurs sont souvent difficiles à détecter. Il existe des outils dont le rôle est d'aider le programmeur à les corriger, et qui s'appellent des "débogueurs" ("debuggers" en anglais).

    2. Présentation du débogueur xxgdb.

    Si l'on désire corriger une erreur à l'exécution dans un programme contenu dans le fichier fichier.c, il est conseillé d'utiliser le débogueur xxgdb, en procédant de la manière suivante :

    Remarque :

    Application :

    3. Exercice 1.

    Sur une matrice n x n, une "situation" est composée de cases noires et de cases blanches. Les cases noires indiquent une "situation de vie", et les cases blanches, une "situation de mort". Pour une case m[i][j], on définit quatre voisins :

    À chaque tour de jeu, on réexamine la situation des cases de la grille selon les règles suivantes :

    cas 1
    Quatre voisins noirs : "mort par étouffement".
    Si la case est blanche, elle reste blanche.
    Si la case est noire, elle devient blanche.
    cas 1
    Trois voisins noirs : aucun changement.
    cas 1
    Deux voisins noirs : "naissance".
    Si la case est noire, elle reste noire.
    Si la case est blanche, elle devient noire.
    cas 1
    Un voisin noir : aucun changement.
    cas 1
    Zéro voisin noir : "mort par isolement".
    Si la case est blanche, elle reste blanche.
    Si la case est noire, elle devient blanche.

    Écrire un programme qui, après avoir lu une configuration initiale dans un fichier, demande à l'utilisateur le nombre d'étapes qu'il veut visualiser, et les affiche une à une à l'écran.

    Le problème peut être simplifié en prenant une matrice
    (n+2)x(n+2) dont les contours sont toujours blancs. En effet, comme les cases blanches n'interviennent pas dans la décision de modification de l'état d'une case, cette bordure rajoutée artificiellement permettra de ne pas faire de traitement particulier pour les cases de bordure ou pour les cases d'angle de la matrice n x n, qui sans cela ne posséderaient que deux ou trois voisins chacune.

    On pourra tester le programme produit sur la configuration initiale suivante :

    Configuration

    Pour cela, à l'aide de l'éditeur de texte asedit, créer un fichier de texte, de nom etape0.txt, contenant 49 caractères B (pour "blanc") ou N (pour "noir"), et ne contenant ni caractère espace ni caractère retour-chariot, dans un ordre qui corresponde à la configuration du dessin ci-dessus, lue ligne par ligne.

    On aura intérêt à utiliser les définitions suivantes :

    Il est demandé de ne pas utiliser de variable globale.

    On écrira les fonctions suivantes :

    > tp03ex01
    Combien d'étapes souhaitez-vous visualiser : 15

    Etape : 0

    B B B B B B N
    B B B B B N N
    B B B B N N N
    B B B N N N N
    B B N N N N N
    B N N N N N N
    N N N N N N N

    Etape : 1

    ...

    Etape : 15

    N N N N N N N
    N N B N B N N
    N B N N N B N
    N N N B N N N
    N B N N B N N
    N N B N N B N
    N N N N N N N
    >

    4. Exercice 2.

    Écrire un programme permettant de lire et de ranger par ordre croissant un ensemble de TAILLE entiers. On utilisera obligatoirement les déclarations suivantes :

    Le tableau entiers contient les entiers, alors que chaque case du tableau pointeurs doit pointer sur la case du tableau entiers de même indice. Une fois initialisé, le tableau entiers ne devra plus être modifié. L'opération de tri sera donc effectuée par l'intermédiaire du tableau pointeurs. On peut utiliser un algorithme de tri quelconque (toutefois, il est conseillé d'utiliser l'algorithme de tri par substitution, qui est particulièrement simple à mettre en oeuvre).

    On écrira les fonctions suivantes :


    Ces pages ont été réalisées par A. Crouzil, J.D. Durou et Ph. Joly.
    Pour tout commentaire, envoyer un mail à crouzil@irit.fr, à durou@irit.fr ou à Philippe.Joly@irit.fr.