« Programmation Ada/FAQ/Le Langage Ada » : différence entre les versions

Contenu supprimé Contenu ajouté
m Révocation des modifications de 193.49.83.101 (discussion) vers la dernière version de DavidL
m Formatage, ajout de code
Ligne 36 :
== Comment obtenir le code ASCII d'un caractère ? ==
 
Dans ce cas également, des attributs sur le type <ttcode>Character</ttcode> existent :
Pos, qui sert à obtenir la position d'une valeur dans le type énuméré qui le définit, et Val qui effectue l'opération inverse.
L'Exemple 3 illustre l'utilisation de ces attributs.
Ligne 91 :
== Pourquoi après un Ada.Text_IO.Get_Line le curseur ne se trouve-t-il pas en début de la ligne suivante ? ==
 
Si l'utilisateur rentre le nombre de caractères maximum fixé par le second paramètre de <ttcode>Get_Line</ttcode>, la saisie s'arrêtera à ce moment là et aucun retour chariot ne sera pris en compte.
Une solution consiste à utiliser <ttcode>Ada.Text_IO.Set_Col (Ada.Text_IO.Standard_Input, 1)</ttcode> avant une nouvelle entrée ou une nouvelle sortie.
 
== Pourquoi Get ou Get_Line après un Get n'attendent rien et se comportent comme si j'avais tapé uniquement sur la touche entrée ? ==
 
La version de <ttcode>Get</ttcode> permettant de saisir un type scalaire ne consomme que les caractères nécessaires.
Le caractère entrée correspondant au retour chariot est alors conservé dans le tampon de saisie.
L'utilisation de <ttcode>Get</ttcode> ou <ttcode>Get_Line</ttcode> consommera alors ce caractère.
 
Notons que ce comportement, qui peut paraître au premier abord peu intuitif, introduit une symétrie entre <ttcode>Put</ttcode> et <ttcode>Get</ttcode>, entre Put_Line et <ttcode>Get_Line</ttcode> et entre <ttcode>New_Line</ttcode> et <ttcode>Skip_Line</ttcode>.
 
== Quel est le caractère de fin de chaîne ? ==
Ligne 110 :
== Comment récupérer la ligne de commande ? ==
 
En utilisant le paquetage standard <ttcode>Ada.Command_Line</ttcode>, qui offre notamment les fonctions <ttcode>Argument_Count</ttcode> et <ttcode>Argument</ttcode>.
 
== Comment effacer l'écran ? ==
Ligne 123 :
== Comment effacer l'écran sous Windows ? ==
 
Il est possible d'utiliser le paquetage <ttcode>NT_Console</ttcode>.
 
== Comment libérer un pointeur ? ==
 
Il faut instancier la procédure générique <ttcode>Ada.Unchecked_Deallocation</ttcode>.
L'instance fournit une procédure permettant de libérer un pointeur du type voulu, comme illustré dans l'Exemple 6.
 
Ligne 154 :
En règle générale, seuls les compilateurs ciblant la machine virtuelle Java en fournissent un.
Si un compilateur Ada cible la machine virtuelle .NET, il est probable qu'il utilisera le ramasse-miettes sous-jacent.
Cependant, le paquetage <ttcode>Ada.Finalisation</ttcode> permet de contrôler la déallocation profonde d'un objet qui sort du contexte dans lequel il est défini.
 
== Comment créer une chaîne de caractères de taille inconnue à priori ? ==
Ligne 173 :
== Est-il possible de gérer des chaînes de caractères de taille variable ? ==
 
Il existe un type standard <ttcode>Ada.Strings.Unbounded.Unbounded_String</ttcode> qui permet de créer des chaînes de caractères de taille variable.
Lorsque l'on connaît la taille maximale de la chaîne, le type standard <ttcode>Ada.Strings.Bounded.Bounded_String</ttcode> est généralement plus efficace.
 
== Existe-t-il un équivalent en Ada de la fonction realloc() du C, qui permet de changer la taille allouée pour une zone mémoire ? ==
 
Non.
Toutefois, la possibilité d'utiliser une valeur initiale pour la primitive <ttcode>new</ttcode> permet de remplacer facilement cette fonction, comme illustré dans l'Exemple 8.
 
Exemple 8. Ajouter un caractère à une chaîne
Ligne 201 :
== Comment convertir une chaîne de caractères en minuscules ? ==
 
Il faut utiliser la fonction <ttcode>To_Lower</ttcode> du paquetage <ttcode>Ada.Characters.Handling</ttcode>.
 
== Comment faire des opérations bit à bit ? ==
 
En Ada, les opérations bit à bit se font sur les types modulaires.
Les opérations <ttcode>and</ttcode>, <ttcode>not</ttcode>, <ttcode>or</ttcode> et <ttcode>xor</ttcode> sont définies.
Le paquetage standard <ttcode>Interfaces</ttcode> définit des opérations de décalage supplémentaires.
 
== Est-il possible d'obtenir des tranches de tableaux multi-dimensionnels ? ==
Ligne 215 :
== Comment attendre un temps donné ? ==
 
Il faut utiliser l'instruction <ttcode>delay</ttcode> suivie d'un nombre de secondes en virgule fixe (type <ttcode>Duration</ttcode>), comme illustré dans l'Exemple 9.
 
Exemple 9. Attendre deux secondes et demie
Ligne 225 :
 
Ada propose plusieurs paquetages de gestion de nombres aléatoires.
Le plus simple, pour obtenir un élément parmi une énumération, est d'utiliser <ttcode>Ada.Numerics.Discrete_Random</ttcode>, un paquetage générique qu'il faut instancier avec un type représentant l'ensemble tel qu'illustré dans l'Exemple 10.
Pour un tirage aléatoire sur un nombre réel, il est possible d'utiliser le paquetage <ttcode>Ada.Numerics.Float_Random</ttcode> qui permet d'obtenir une variable aléatoire uniforme entre 0 et 1.
 
Exemple 10. Tirer un nombre entre 0 et 36
Ligne 247 :
== Où se trouvent les fonctions mathématiques ? ==
 
Les fonctions mathématiques élémentaires (comme la racine carrée) se trouvent dans le paquetage <ttcode>Ada.Numerics.Elementary_Functions</ttcode>.
Les fonctions présentes dans ce paquetage permettent de travailler sur le type de base <ttcode>Float</ttcode>.
 
Pour utiliser de telles fonctions avec un autre type de nombres flottants, il faut utiliser une instanciation du paquetage générique <ttcode>Ada.Numerics.Generic_Elementary_Functions</ttcode>.
 
== Comment augmenter la taille de la pile d'une tâche ? ==
 
La directive de compilation <ttcode>Storage_Size</ttcode> permet de donner la taille, en unités de stockage (octets en pratique), de la pile d'une tâche ou d'un type de tâche, comme illustré dans l'Exemple 11.
 
Exemple 11. Choisir la taille de la pile d'une tâche