# Partie 3 (6H environ) : Conception de l'algorithme

## Objectifs du TP

- Découpage de l'image en caractères (Décomposition d'un problème complexe en tâches simples)

## Acteurs utilisés

- L'acteur Caracteres
- L'acteur JPG
- L'acteur Gada.Graphics
- L'acteur Gada.Plus

## Cahier des charges

    ``````````````````````````````````````````````````````````````````````````````
    ``````````````````````````````````````````````````````````````````````````
    ```````````````````````````````````````````````````````````````````````
    ``````````````````````````````````      `````````      ````
    ````````````````````````````          ;q9Hgex``
    ```````````````` ``` `               ~B@@@@BBl
    ````````````  `                     _cB@@BR5%l``
    ````````                            -8PX*/~~J6^
    ``````                               ~?b~^c^`~
    ` ``                                  ^^x~```
                                          _~/^``''
                                      `_xuDyL+_!jk\.`
                                    :8B@@BD5%K/aS%OsSs\
                                 `xA@@@@@@B%r]d98Q%%%g%x
                               `vQ@@@@@@@@N@8D@D86%%9D%0~
                             `jQN@@Df~D@@@@NWBNDD6ggD@8ss'
                            \DB@@N7`  3@@@BN%5955O%6PB@K]s
                            ]BN@$^   `$B@DQP%95s23%s^]@Dss`
                            JDBBQ`   _DBB%V~~%%5%X%j ~ND5k`
                            `9BBNs  -D@#\^'{,/5%%skC` ]NDOx
                             /BB@DLuQ@@BQ#gAsx95%%Xs_ `9B6C^
                              ]DP~,jB@@@@@@@BB@BA%s%^  ^DD%c`
                                 `~N@@@@@@BNDDBQ@W%s^   ]DEsx
                                  ^B@@@@@@@@@DDD@D8R_   `Q8s0~
                                  -N@@@@@@@@@@@@@D9Di    ~/Z'`
                                  _B@@@@@@@@@@@@@B884      ~s'`
                                  ~N@@@@@@@@@@@@@BM8M       '+
                                  ^N@@@@@@@@@@@@@BDQQ`      ^
                                   $@@@@@@@@@@@@@BDQQ`      -
                                   3@@@@@@@@$@@@@@DDQ'      ``
                                   3@@@@@@@BJ@@@@@BQD^      ``
                                   4@@@@@@@Q~@@@@@BDD'       ,
                                   ]@@@@@@@E 4@@@@@DD'       ,
                                   )@@@@@@@[ J@@@@@ND~       '
                                   ~@@@@@@@l `B@@@@@B~       '
                                   `D@@@@@@~ )@@@@@@@'       '
                                    *B@@@@@' #@@@@@@@'       '
                                     ,V@@@@$/B@@@@@@7        !
                                     ~#@@@@@@?B@@@Br         \
                                     a@@@@@@D~D@@N\`         ~`
                              `,_';xcHDD@@@@r{@@@@@De!`      ,`
                              !w%$59g%FFff?*`~7VPP4DD8W51x.  '^
                                 ``'`               ^!/*=~`

- Écrire une procédure `Transformation` qui prend en argument un nom d'image (String) et qui affiche (avec Gada.Text_IO.Put) l'image transformée en caractères. Regardez les illustrations de cette page et des autres pages, ce sont des exemples de ce que doit produire cette procédure.
- Le principe consiste à analyser l'image de départ morceau par morceau (un morceau a la taille d'un caractère), et de chercher le caractère qui ressemble le plus à chaque morceau d'image. La ressemblance se jauge uniquement entre la luminosité moyenne du morceau d'image et celle du caractère (la forme du caractère n'est pas utilisée).

## Consignes

- (Ce travail peut être effectué en binôme) Avant de sombrer dans l'écriture de code Ada, lâchez votre clavier et prenez de quoi écrire. Remémorez-vous le travail demandé aux deux TPs précédents. Les acteurs utilisés pendant ces TPs vous seront utiles. Décomposez le problème compliqué ci-dessus en tâches plus simples.
  - Identifiez les nouvelles fonctions dont vous aurez besoin.
  - Ne commencez pas la programmation tant que votre encadrant n'a pas validé votre découpage en fonctions !
- L'écriture du programme Ada est individuelle (mais vous pouvez encore discuter avec votre binôme).
- Avant chaque procédure ou fonction que vous créez, ajoutez une phrase en commentaire qui indique ce qu'elle fait. Ajoutez un deuxième commentaire qui indique brièvement comment elle le fait.
  Ces commentaires doivent aider à la lecture du code, ils doivent être le plus perspicaces possibles. Inutile de répéter le code Ada (par exemple « J'utilise un if »). Un exemple de commentaire utile (mais hors-sujet) : « La recherche de l'email se fait en parcourant tout le tableau et en comparant le pseudo de chaque case avec le pseudo recherché. »
- N'oubliez pas que chaque procédure ou fonction doit être accompagnée d'une procédure de test, conçue par vous, qui permet de convaincre votre encadrant que celle-ci fonctionne correctement.
- Pour tester vos algorithmes, vous pourrez utilisez cet oiseau colérique.

                                         ``
                                      `~+:::+!-`
                                      '!!!!!!+::+-`
                              ',,--,''``-!!!!!!!+::~`
                            ~::+++!!!!!!-''-~!!!!!+::~
                            -!!!!!!!!!!!!!!~,,--~!!!+(+`
                               ```',--~~~!!!!!!!!!!!!:(:'
                                '-!!!!!!!!!!!!!!!!!!!!:(:~,`
                             '-!!!!!!!!!!!!!!!!!!!!!!!!++:((+-`
                           '~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+:((!,
                         ,~~~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+:(:-
                       '~~~~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+::,
                      ,~~~~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+:!`
                    `-~~~~~!!!!!!!!!!!!!!!!!-',~!!!!!!!!!!!!!!!!!!!!!++'
                   `~~~~~~!!!!!!!!!!!!!!!!!'    '-!!!!!!!!!!!!!!!!!~,``!,
                   -~~~~~~!!!!!!!!!!!!!!!!,        '-~!!!!!!!!!!~,`    `+,
                  -~~~~~~~!!!!!!!!!!!!!!!!!~,'        `,-!!!~-'        '~+
                 '~~~~~~~~!!!!!!!!!!!!!!!!!!!,1$%f:~'     `     `-+-`~!!!+'
                 -~~~~~~~~!!!!!!!!!!~!!!!!!~-!@@@@Bf(1U1?! -`~3D@@@B'-~!!!-
                 ~~~~~~~~~!!!!!!!!~~~~~!!!~~--@@@@U-'!B@@U`#!+#0f??(,,~~!!-
                `~~~~~~~~~!!!!!!!!~~~~~!!!~~~'!17??(??(?:+(++-`-~~~~~~~~!!-
                 ~~~~~~~~~~~~~~!!!~~~~~~!~~~~~-~~~~--!711111117+-,-~~~~~!!'
                 -~~~~~~~~~~~~~~!!~~~~~!!!~~~~~~~,-?11111111111117!'-~~!!!
                 `~~~~~~~~~~~~~!!!!!!!!!++::(((!`+11111111111111111f!'!!!'
                  '~~~~~~~~~~~!!!!+(7f10%%%%%%0~~(((:++:(?77f11111111?`!,
                   `-~~~~~~~~~~(f0%0%%%%%%%%%%0(~$Uf?:~!+::+!!!++~+?f1~`
                     '~~~~~~:f0%%%%%%%%%%%%%%%%%f!'!7fffffff77(~-~!~--,
                       '-~(00%%%%%%%%%%%%%%%%%%%%00f+~~(7f7+~!?0:!!~'
                         `-:f0%0%%%%%%%%%%%%%%%%%%%%%%1(~-~?00%07,`
                             `-!(f0%%0%%%%%%%%%%%%%%%%%%%%%1?+-`
                                   `,~!+(??7ffffff77?(+!-,`

- Une fois que votre programme marche, voici une question pour l'améliorer significativement : quel est le caractère le plus lumineux ? (Pourquoi se pose-t-on cette question ?)