CS 315 TP4
Algorithme de justification
o un fichier just.c contenant une fonction int* Justify( int Size,
int NbWords, const int* Lengths )
o Size est la largeur du paragraphe à justifier, NbWords le nombre
de mots dans le paragraphe, et Lengths la longueur de chacun
de ces mots
o la fonction retourne un tableau d'entiers, de longueur variable,
contenant les indices des mots terminant chaque ligne du
paragraphe. Il est donc au minimum de taille 1, et son dernier
élément vaut forcément NbWords-1
o la fonction ne doit PAS modifier les entrées
o vous pouvez vous servir du fichier main.c afin d'entrer le
texte et afficher le résultat.
Ce TP d’algorithmique va nous permettre d’implémenter un algorithme de mise en
page, notamment ce qui concerne la justification d’un paragraphe. Le principe est le suivant :
on a un texte sous forme de mots et on veut mettre le mot sous forme « justifié ».
Pour cela : on essaie de serrer le texte pour que tout rentre sur une ligne et sinon soit
on envoie le mot sur la ligne suivante soit on le coupe en deux.
Nous commencerons par envisager seulement la possibilité d’envoyer le mot sur la
ligne suivante en espaçant la ligne.
On considère chaque cas (chaque ligne) au fur et a mesure du paragraphe, on traite le
problème localement, nous allons donc implémenter un algorithme de type : glouton.
L’idée de l’algorithme est :
Imaginons un texte de mots m1 à mN, avec des longueurs l1 à lN. On veut organiser en
colonne de taille C et en ligne (de longueur maxi c).
Tout d’abord on détermine la taille d’une ligne de mots mi à mj :
Taille ( i, j) = somme de longueur des mots + nb espaces
= somme des longueurs lk( pour k de i à j) +( j – i)
Algorithme de base glouton
On considère que S est l’indice du mot qui termine la ligne
Y est la ligne actuelle
N est l’indice du mot à la fin du paragraphe