Objectifs

  • Concevoir un algorithme complet, composé de plusieurs étapes.
  • Choisir les structures de données adéquates à la résolution d'un problème.

Prérequis

Mission 3

Rappel du problème : il s'agit de transformer une image en ensemble de caractères.

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.  '^                    
                             ``'`               ^!/*=~`                        
                                                                      

  • Vous devrez fournir 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. Procedure TransformationLe principe consiste à analyser l'image de départ morceau par morceau (un morceau a la même taille qu'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 détaillées

  • (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 les 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.
                                       ``                                 
                                    `~+:::+!-`                            
                                    '!!!!!!+::+-`                         
                            ',,--,''``-!!!!!!!+::~`                       
                          ~::+++!!!!!!-''-~!!!!!+::~                      
                          -!!!!!!!!!!!!!!~,,--~!!!+(+`                    
                             ```',--~~~!!!!!!!!!!!!:(:'                   
                              '-!!!!!!!!!!!!!!!!!!!!:(:~,`                
                           '-!!!!!!!!!!!!!!!!!!!!!!!!++:((+-`             
                         '~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+:((!,           
                       ,~~~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+:(:-         
                     '~~~~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+::,       
                    ,~~~~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+:!`     
                  `-~~~~~!!!!!!!!!!!!!!!!!-',~!!!!!!!!!!!!!!!!!!!!!++'    
                 `~~~~~~!!!!!!!!!!!!!!!!!'    '-!!!!!!!!!!!!!!!!!~,``!,   
                 -~~~~~~!!!!!!!!!!!!!!!!,        '-~!!!!!!!!!!~,`    `+,  
                -~~~~~~~!!!!!!!!!!!!!!!!!~,'        `,-!!!~-'        '~+  
               '~~~~~~~~!!!!!!!!!!!!!!!!!!!,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?(+!-,`                 
    
  • Pour tester vos algorithmes, vous pourrez utilisez cet oiseau colérique.
  • 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 ?)

Acteurs utilisés

Bilan

  • Vous avez simplifié un problème complexe en le découpant en sous-problèmes élémentaires. C'est le fondement de l'algorithmique.
  • Chaque sous-problème donne lieu à une fonction ou procédure — qui a l'avantage de pouvoir être testée séparément.
  • Ces sous-programmes, qui fonctionnent séparément, sont ensuite assemblés pour résoudre le problème initial.