Julien Sopena

TP 10 – Les fichiers de caractères

Exercice 1: Sous-programmes

Dans cet exercice, on considère des fichiers composés de caractères '1' et '0'. Ces fichiers comportent un nombre quelconque de lignes mais toutes ces lignes sont de même taille. Ils formes donc des images rectangulaires. On pourra par exemple considérer le fichier image1.txt contenant les lignes suivantes :

00000000000000000000000000000000000000000
00100000111111000100001000000111111000000
00000011111111100000100000111111011110000
00001111000111000000000011111111111111100
00011100000111000100001111110000000001110
00111000000111000000011110000000000001010
01110000000111100000111100000000000011110
01100000000111000010011110000010000111100
01000100000111000000001000000000001111000
00000000000111000000000000000000111100000
00000000000111100000000100000001111000000
00100010001111000000000000000011100000000
00000000000111000010000000001111000010000
00000000000111000000000000111100000000000
00010000000111000000000011110000010000110
00000000001101100000011111111111111111110
00000000001111100001111111111111111111110
00000000000000000000000000000000000000000

Question 1.1 )

Pour pouvoir travailler sur les images contenues dans ces fichiers, on souhaite les transformer en tableau de boolean. Définissez un type t_image qui regroupera, avec ce tableau, son nombre de colonnes et son nombre de lignes.

Correction (cliquer ici)

Question 1.2 )

Écrire un sous programme lireImage qui permette de transférer le contenu d'un fichier image dans une variable de type t_image.

Correction (cliquer ici)

Question 1.3 )

Écrire un sous-programme afficheImage affiche pour afficher une telle image à l'écran. Les '1' correspondront à l'écriture d'un 'X' et les '0' seront traduits par un espace.

Correction (cliquer ici)

Question 1.4 )

Écrire un sous-programme ecrireImage qui enregistre une image de type t_image dans un fichier dont le nom est passé en argument.

Correction (cliquer ici)

Question 1.5 )

Écrire un sous-programme negatif qui transforme une image en son négatif, c'est à dire qui remplace chaque '1' par un '0' et vice versa.

Correction (cliquer ici)

Question 1.6 )

Écrire un sous programme erosion qui ne conserve à '1' que les points dont les 8 voisins étaient à '1' avant cette transformation. Attention cette transformation (comme les suivantes) nécessite l'emploi d'un tableau intermédiaire.

Correction (cliquer ici)

Question 1.7 )

Écrire un sous programme dilatation qui remplace chaque '0' par un '1' dès lors qu'au moins un de ses 8 voisins est à '1'.

Correction (cliquer ici)

Question 1.8 )

Écrire un sous programme supprimerBruit qui supprime les points isolés, c'est-à-dire qui remplace un '1' par un '0' lorsque ce '1' est entouré de 8 '0' et qui remplace un '0' par un '1' quand le '0' est entouré de 8 '1'.

Correction (cliquer ici)

Question 1.9 )

Écrire un sous programme ouverture qui ne conserve dans l'image que les '1' appartenant à tous les groupes de 4 '1' en carré, tous les autres points sont à '0'.

Correction (cliquer ici)

Question 1.10 )

Écrire un programme qui teste les sous-programmes et les déclarations précédents. Ce programme pourra avoir l'interface suivante :
Menu :
  q->quitter
    l->lire
    s->sauver
    a->afficher
    n->negatif
    e->erosion
    d->dilatation
    b->bruit
    o->ouverture:

Correction (cliquer ici)

Designed by OWSD.org. Valid CSS & XHTML
Ce site et l'ensemble de son contenu est mis à disposition sous un contrat Creative Commons.
Creative Commons License