Algorithmique 1ère année Initiation à la programmation - Ada (2/6) Didier Le Bo
Algorithmique 1ère année Initiation à la programmation - Ada (2/6) Didier Le Botlan INSA contact.lebotlan@insa-toulouse.fr 1er semestre 2009–2010 http://wwwdgeinew.insa-toulouse.fr/~lebotlan/index.html 1 / 1 Retour sur le cours précédent Un programme utilise des acteurs Les actions offertes par l’acteur Foo sont dans foo.ads Dans Foo.ads, l’action Avancer est déclarée de cette manière : procedure Avancer ; Pour utiliser l’action dans mon programme mission1.adb, j’écris Foo.Avancer ; Un fichier Ada contient des commentaires Comme ceci Notion d’identificateur, p. ex. Tourner_A_Gauche 2 / 1 Fabrication du programme mission.adb with Rover ; procedure Mission is begin Rover.avancer ; end Mission ; mission-exe 00111010010011 10010101001110 01010111001000 01101010111101 11110010101010 10101010101010 COMPILATION 3 / 1 La compilation Un logiciel spécial, appelé compilateur, est chargé de transformer le programme Le compilateur signalera certaines erreurs : erreurs de syntaxe et erreurs de typage (exemples) Ce sont des messages d’erreur Quand tout va bien, il fabrique un programme exécutable (un logiciel). Exemples d’erreurs et de messages d’erreur ? 4 / 1 Bloc séquence B1, B2, .., Bn sont des blocs de code. Cela s’écrit aussi : ⊢B1 ∈bloc , etc. Définition du bloc séquence La séquence des blocs B1, .., Bn s’écrit B1 ; B2 ; . . . Bn ; Le bloc B1 est exécuté en premier. Le bloc B2 ne sera exécuté que lorsque le bloc B1 sera terminé. Le bloc séquence est terminé lorsque le dernier bloc, Bn, est terminé. 5 / 1 Exemple de bloc séquence Exemple : séquence d’actions with Moteur_Diesel ; procedure Mission1 is begin Moteur_Diesel.Prechauffer ; Moteur_Diesel.Demarrer ; Moteur_Diesel.Laisser_Tourner ; Moteur_Diesel. Arreter ; end Mission1 ; Combien de blocs séquence dans le programme ? (et où ?) Combien de corps de programme ? (et où ?) Combien de temps met le programme à s’exécuter ? Comment améliorer ce programme ? 6 / 1 Les jugements de typage Le poly contient une quinzaine de règles de typage : RÈGLE ⊢ « Séquence » Si pour tout 1 ⩽i ⩽n, ⊢Bi ∈bloc, alors leur juxtaposition est un bloc : ⊢ B1 ; . . . Bn ; ∈bloc C’est l’écriture formelle de « Un bloc séquence est un bloc ». Ces règles SONT les règles respectées par le compilateur. 95% des erreurs de compilation sont dûes à une règle bafouée. 7 / 1 Hello world Écrire un programme qui affiche “Bonjour”. with GAda.Text_IO ; procedure Welcome is package Txt renames Gada.Text_IO ; begin Txt.Put_Line ("Bonjour !") ; end Welcome ; Put_Line affiche le texte demandé et passe à la ligne. 8 / 1 Hello INSAs Un programme effectue très souvent des tâches répétitives. Par exemple, nous souhaitons écrire un programme qui affiche plusieurs messages de bienvenue : Bonjour, Bienvenue a l’INSA de Toulouse Bonjour, Bienvenue a l’INSA de Rennes Bonjour, Bienvenue a l’INSA de Lyon 9 / 1 Hello INSAs with GAda.Text_IO ; procedure Mission is package Txt renames Gada.Text_IO ; procedure Afficher_Bienvenue is begin Txt.Put_Line ("Bonjour, ") ; Txt.Put ("Bienvenue a l’INSA de ") ; end Afficher_Bienvenue ; begin Afficher_Bienvenue ; Txt.Put_Line ("Toulouse") ; Afficher_Bienvenue ; Txt.Put_Line ("Rennes") ; Afficher_Bienvenue ; Txt.Put_Line ("Lyon") ; end Mission ; 10 / 1 Procédures sans argument Pour DÉFINIR une action (une procédure), il suffit d’inclure le schéma ci-dessous avant le begin du programme. Définition de procédure sans argument procedure Bar is Définitions éventuelles begin Corps de la procédure B end Bar ; On doit avoir ⊢B ∈bloc Pour INVOQUER l’action (la procédure), on écrit Bar ; 11 / 1 Appel de procédure avec argument L’acteur Simulation contient l’action Rouler_Vers : procedure Rouler_Vers (Point : Character) ; Pour utiliser cette action, il faut lui fournir un argument, donné entre parenthèses : Simulation.Rouler_Vers ( Point => e ) ; ou plus simplement Simulation.Rouler_Vers (e) ; On sait que e doit être de type Character, c.-à-d. une règle doit permettre d’obtenir ⊢e ∈Character 12 / 1 Règles de typage RÈGLES ⊢ « Types de base » ⊢ -2000 ∈Integer ⊢ 42 ∈Integer ⊢ 42 ∈Natural ⊢ 42 ∈Positive ⊢ 42.0 ∈Float ⊢ True ∈Boolean ⊢ False ∈Boolean ⊢ ’A’ ∈Character ⊢ ’8’ ∈Character ⊢ "Moo" ∈String ⊢ "42" ∈String 13 / 1 Retour sur Rouler_Vers On peut donc écrire Simulation.Rouler_Vers (’L ’) ; car ⊢ ’L ’ ∈Character ou de manière équivalente Simulation.Rouler_Vers (Point => ’L ’) ; Éviter la confusion avec la déclaration procedure Rouler_Vers (Point : Character) ; (Pour invoquer Rouler_Vers, on écrit pas procedure, on écrit pas Character) 14 / 1 Quizz Quizz (typique contrôle) ⊢ 1 ∈ Integer ⊢ 1.0 ∈ Float ⊢ "1" ∈ String ⊢ ’1’ ∈ Character ⊢ S.Rouler_Vers (’L ’) ∈bloc ⊢ S.Rouler_Vers (1) ∈ 15 / 1 Quizz 2 Quizz 2 ⊢ 150 + 300 ∈ Integer ⊢ 150 + 3.5 ∈ ⊢ 200 < 900 ∈ Boolean ⊢ 900 < 200 ∈ Boolean ⊢ 900.0 < 200.0 ∈ Boolean ⊢ 900.0 < 200 ∈ 16 / 1 uploads/Litterature/ insa-toulouse-1a-algorithme-ada-cours-1-2.pdf
Documents similaires
-
22
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Mar 11, 2022
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 0.1854MB