# TP Ada - Mission 3

## Préparation

- Terminer entièrement la mission 2 (même si cela vous prend toute la séance).
- Faites une copie de votre programme mission2c.adb que vous nommez mission3.adb

## Mission

### Objectifs pédagogiques du TP

- Utilisation des variables
- Utilisation des types article
- Conception d'algorithmes classiques (min, max, moyenne)

### Cahier des charges

Rendre visite à divers aéroports européens et repérer en permanence l'aeroport le plus proche.

#### Démarche

Nous allons écrire une procédure qui permet de naviguer vers un aéroport choisi. Pour cela, nous avons besoin d'une fonction qui calcule le cap à suivre et d'une fonction qui calcule la distance à parcourir.

Ensuite, nous sécuriserons le trajet en repérant en permanence l'aéroport de secours le plus proche.

Voici l'ensemble des procédures et fonctions à réaliser pour cette mission :

## Partie 1 : navigation vers les aéroports.

- Regardez l'acteur `Cartographie`.
- Écrivez une procédure `Info_Aeroport` qui reçoit en argument le code d'un aéroport (String) et qui affiche ses coordonnées et son nom complet.
  Écrivez ensuite une procédure sans argument `Tester_Carto` qui affiche les coordonnées et le nom des aéroports suivants : LFBO, EGLL, LFPG. Vous devez obtenir des noms connus et des coordonnées raisonnables pour l'Europe (longitude entre -5° et 5°, latitude entre 40° et 60°).

  Pour les fonctions et procédures suivantes, commencez par écrire l'algorithme sur papier.
  Écrivez une procédure de test à chaque fois.

  Pour le calcul de distance, nous supposerons (un peu abusivement) que 1 degré de longitude ou de latitude représente 111km600.
- Écrire une fonction `Distance` qui prend deux arguments de type `T_Coords` et qui renvoie un réel représentant la distance en km entre les deux points. Pythagore est votre ami.
  - La fonction racine carrée est dans l'acteur `Cartographie`
  - Pour tester votre fonction, affichez la distance entre Blagnac (LFBO) et Heathrow (EGLL). Le résultat doit être environ 900km.
- Écrire une fonction `Cap_Cible` qui prend en argument le code d'un aéroport et qui calcule, pour l'avion, le cap vers cet aéroport.
  - Par chance, la partie difficile du calcul est faite par la fonction `Cap_Vecteur` de l'acteur `Cartographie`.
  - Testez en affichant le cap vers Heathrow (depuis le point de départ, Toulouse). Vous devez trouver environ 347°.
- Écrire une procédure `Naviguer_Vers` qui prend en argument le code d'un aéroport, et fait voler l'avion en sa direction.
  - L'avion est supposé déjà en vol.
  - N'oubliez pas d'ajuster le cap régulièrement pendant le trajet.
  - Votre procédure doit se terminer lorsque l'avion est à proximité de l'aéroport (moins de 100km).
- Écrivez maintenant votre parcours complet en visitant quelques aéroports de votre choix, mais sans atterrir (en voici la liste).

## Partie 2 : repérer l'aéroport le plus proche.

- Complétez la procédure `Naviguer_Vers` afin de repérer à tout moment l'aéroport le plus proche de l'avion, en plaçant un marqueur dessus (voir dans l'acteur `Cartographie`).

  N'hésitez pas à créer une nouvelle procédure ou fonction si besoin. En binôme, concevez l'algorithme sur papier puis expliquez-le à votre encadrant.

- Modifiez votre programme pour que le marqueur soit sur l'aéroport hors de France le plus proche (le code du pays est sur deux lettres, voir l'acteur `Cartographie`).
- Enfin, faites que la procédure `Naviguer_Vers` affiche avant de se terminer quelle a été la moyenne de la distance à l'aéroport le plus proche (hors de France) (bien sûr, l'aéroport le plus proche hors de France n'est pas toujours le même pendant le trajet). Vous devriez trouver des valeurs entre 250km et 370km pour un voyage ne s'aventurant pas trop à l'est.

Ici encore, en binôme, écrivez l'algorithme sur papier puis expliquez-le à votre encadrant.

## Bilan

À l'issue de cette mission, vous devez être capables de :

- Utiliser correctement un type article, en particulier dans une fonction.
- Écrire l'algorithme de calcul du min, max, ou de la moyenne d'un ensemble de valeurs, et le traduire en Ada.