# TP Ada S2

## Exercices préparatoires

### Pour le premier TP (semaine du 16 janvier)

Faites le maximum de ces deux exercices avant la première séance de TP. Vous les terminerez pendant le TP, avec l'aide des encadrants. Le TP ne dure qu'1H15.

- Exercice de tracés avec des caractères
- Exercice de manipulation de type article

### Solutions aux exercices préparatoires

- mission1.adb
- mission2.adb

Pour les très très curieux, voici la réponse au deuxième sujet en langage OCaml (étudié en 4ème année IR) : mission2.ml

### Pour le premier cours (le 23 janvier)

- Examinez l'acteur presidents.ads
- Effectuez les questions suivantes, ou bien sur papier, ou bien sur ordinateur, en enregistrant alors ces deux fichiers dans votre répertoire de travail (clic-droit, enregistrer sous...) : presidents.ads et presidents.adb
- Écrire une procédure `Afficher` qui affiche la liste de tous les présidents, avec leurs dates de mandat et leur parti politique (de manière lisible).
- Écrire une fonction `Plus_Long` qui reçoit en argument un caractère représentant un parti politique, et qui renvoie le numéro du président (issu de ce parti), qui a eu le mandat le plus long.
- Définir un type article `T_Resultat` qui contient un booléen nommé "existe" et un entier "numero".
- Écrire une fonction `Mandat_Interrompu` qui reçoit en argument un caractère représentant un parti politique, et qui renvoie un `T_Resultat` contenant le numéro du premier président (issu de ce parti) n'ayant pas terminé son mandat. L'attribut "existe" du résultat est à faux si aucun n'a été trouvé, et à vrai si un a été trouvé.
- Facultatif : écrire une procédure qui affiche les présidents ayant effectué au moins deux mandats non consécutifs (ce qui signifie qu'ils apparaissent deux fois dans la liste.

## Sujets du projet de TP

#### Objectif

L'objectif des quatre prochains TPs est d'écrire un programme qui transforme une image en ascii-art (comme le logo ci-dessous).

                                `````,''',,,,,,'``
                     ``,,,-.^~^^^''`````  ```'-^~~\xxx:!'..``
              '~!/\//~~^^^''``````````               `'^^~+=*??x:+',
             `xx^,''````````````````                           ``\?/`
             `x/''````````````'```                ``             'x\`
             ,/~```````````'x/~+r'`           `_;+\/\,           'x\,
             '!-````````1~!~,!j;,,~~~!!!!!!!~~!;xeMgx//~V         ~~^
            `~~`'r+!!~+![ xyADN@B$gaucx;;xcs2A99556%%%5_]'=~~~~+' '^^`
            '~'v\'0XXC''^~aDBMMRRWMMMW@@NDDMHH55555%%X%k_!,cscx,^L ''^
           ,~-`4 3%%%%s!sdB@F^'~~~~_'uNDDQ8E(~(((LL/$kk0}r)ssswx`] `,,,
          `^^``] ]%9998DB@W?'x!```~r`?DW855%i~r```~L^Vsssssswss\ ]  `^^'
         `^^```^t^{5MDBD#C^ +r~~~~+'`?8555%%i,+~~~~+*;!Ywwwssk*'x'   ''~`
        ,x!`````'\\:/!~^`,-^^~~~~///;?56%%%X(~~/xxxx`4*+:/!~~\=+'     \x~`
       `(s'```     ;f~,-~~~~~//xx//++?%%%%Xs}xx?Ysss\'t``j7!~'~!x`     *s!
       xs^``    `:r_'/~~~~~//~^;!!r!`?96g%ss(^\Yss?x\'`/*`_'_^~~`J,    `ss'
      .s/`     !*_/ssssss??~!+'   -r`u@@@@@$i~tr~^+xsssx'xssssssx'l     ^sx'
      (s`     )~.sssssssss'x~     -r`u@@@@@$i~r '~+r!~+Ysssssss?-j-      ?s~
     _sx      4 ?sssssssss\^L`    -r`u@@@@@$i~r     '~++;~~+=+~;*`       ~sx`
     ~s'      't_\sssssssssx^!!!!!!^'uBNBNN6i'!~~~~~~!!^`^~~~~~`         -s(,
     |s^        /v~~?ssssssssssss?xx///~~~~^^^^^^^^'''`,~\+.             `ss^
     |s,      `xr~'` `'+*sssss??xx///~~~~^^^^^^^,,,,,^~~~~,_/x,          `ss^
     !s.      ]`,~~/\,`Ys|:/~~~~~~~~~~~~~^^^^^,,,,,^~~~///xx\.~v_      ``'sY^
     's!      s ~/xx?Y?'~*'`'~~~~~+'`x%%%%5%i';!_'^~~///xxxx??x,/c`  ````^s(^
     `s?      ,*''xYssssx._\r`    -r`x%g599Ei~r ,/v`\xxxxx???Yss-~7``````xsr`
      ~s!       ,\;'ssxx/~~,`~+/, -r`?9598MEi~r  `] /xx???Ysss/_v~``````_s?^
       ?s.        ]`\x/~~~^^^,'`^!+!`?988QD6i~L!+~_/x???Yss?~~v\```````'(s~`
       `?s,        /i_-^^^^^,,.~~/!!~?WQDDB6(,.'/xx????sx~~i/^````````'cs\'
        `*7.         ^~~!!+~'-^\xx??x?DDBN@$kxxxx??x/~~;rr^``````````_js\'
          ~?\`             `~~~!!;/'^nN@@@@$Y~~~\:;!+!'`````````````/s?~`
           '\x.                   \r`u@@@@@$i-[''`   `````````````!?s\-
             '^~,               `v~`\#@@@@@B%\~v'  ````````````_/??\^
                `''``           -L`v@@@@@@@@@$i~r```````````_!xs*~'
                   `'^^,`       'l`~~^^~~~~+*7|\~```````_!xs?x~'`
                      ``^~~,,`  `s!!~~~'''~!!+!u^```_!xs?x~'`
                          `'^~~.,`        ``````.!xs?x~'`
                              `'~\/',`  ````.!x?x/~'`
                                  `-~xx+^!x?x/^'`
                                      `^~~^``

### Solutions aux TPs

Les solutions sont données au fur et à mesure de l'avancement des différents groupes.

- Partie 1 : mission1.adb
- Partie 2 : mission2.adb
- Partie 2, filtre de Sobel : mission2b.adb

#### Les sujets

- Partie 1 (2H environ) : Manipulation de caractères
- Partie 2 (3H environ) : Manipulation d'image
- Partie 3 (6H environ) : Conception de l'algorithme

#### Les acteurs utilisés

- Gada.Text_IO
- Gada.Graphics
- Gada.Plus
- caracteres.ads
- jpg.ads

#### TP du premier semestre

TP Ada S1 - TPs du premier semestre

## Exercices complémentaires

- Exercices de base sur les tableaux
- Exercice sur les types articles, types énumérés et tableaux
- Exercice sur les matrices et structures imbriquées
- Exercices sur les structures imbriquées
- Exercice sur TOUT

## Contrôles des années précédentes

## Sujet du contrôle de TP 2009

## Sujet du contrôle de TP 2010

## Compétences et validation de l'UF

L'UF Étude des Systèmes est évaluée globalement par compétences. Toutefois, la progression en TI est évaluée par des contrôles notés qui sont ensuite transformés en niveau.

### Partie Algorithmique

Comme au premier semestre, les compétences d'algo sont classées dans trois macro-compétences, de difficulté croissante :

- Bases de programmation (le minimum vital à acquérir).
  - Les programmes sont cohérents et compilent sans erreur.
  - Invoquer une procédure ou fonction recevant une structure de données en argument, afficher une structure de données.
  - Manipuler les types énumérés
  - Respecter les conventions de présentation (indentation, espacements, commentaires, nommage des variables).
- Éléments d'algorithmique (l'objet principal du cours).
  - Appliquer toutes les règles de construction d'un programme (typage, 1er et 2ème semestre)
  - Prévoir le résultat d'un programme (sémantique, 1er et 2ème semestre)
  - Exploiter les informations contenues dans une structure de données complexe.
  - Essentiel : les algorithmes classiques (min, max, moyenne, algorithme de recherche) appliqués à une structure complexe.
- Algorithmique fine (pour obtenir le niveau maîtrisé).
  - Pour le niveau maîtrisé : conception d'algorithme évolué nécessitant une décomposition en sous-problèmes.

Ces compétences seront évaluées partiellement lors du contrôle Moodle, puis plus complètement lors du contrôle de TP fin mars. Un échec au contrôle Moodle peut être rattrapé par une bonne prestation lors du contrôle de TP.
Toutes les compétences n'ont pas le même poids. Par exemple, afficher une structure de données est a priori plus important que le respect des conventions de présentation. Un correcteur examinera votre contrôle pour estimer si chaque macro-compétence est acquise.

### Validation de l'UF

Le jury d'UF procédera comme ceci :

- Si la première compétence (bases de programmation) n'est pas acquise, l'UF ne sera pas validée.
- Si les bases sont acquises, mais pas la macro-compétence Éléments d'algorithmique, le niveau d'algo sera partiellement acquis, et le jury prendra alors sa décision en considérant l'ensemble des résultats de l'UF : TI et algo.
- Si les bases et les éléments d'algorithmique sont acquis, ainsi que TI, l'UF sera acquise.
- La macro-compétence Algorithmique fine, en plus de la validation des deux autres macro-compétences, permet d'obtenir le niveau maîtrisé et pourra jouer favorablement en cas de résultat discutable en TI.

Ne tablez pas sur une compensation automatique d'un niveau partiellement acquis dans une matière par un niveau maîtrisé dans l'autre matière. Tout dépendra des points faibles et points forts observés chez chacun.

### Session 2, redoublement

- En session 2, vous repassez la ou les parties qui n'a pas été acquises en session 1 (algo ou TI).
- En cas de redoublement, vous repassez intégralement les UFs qui ne sont pas acquises.

### Si l'UF maths-algo est en dette

Pour les étudiants qui n'ont pas validé l'UF maths-algo à cause de lacunes en algo, et qui obtiennent un bon résultat en algo au semestre 2, je propose toujours une compensation au moment du jury de fin d'année (en juillet). Ceci ne concerne pas les étudiants qui redoublent, pour lesquels il est préférable de consolider toutes les matières en dette.