Anda di halaman 1dari 4

Retour sur le cours précédent

Un programme utilise des acteurs


Algorithmique 1ère année Les actions offertes par l’acteur Foo sont dans foo.ads
Initiation à la programmation - Ada (2/6)
Dans Foo.ads, l’action Avancer est déclarée de cette manière :
procedure Avancer ;
Didier Le Botlan Pour utiliser l’action dans mon programme mission1.adb,
j’écris
INSA
contact.lebotlan@insa-toulouse.fr Foo.Avancer ;

1er semestre 2009–2010


Un fichier Ada contient des commentaires Comme ceci

Notion d’identificateur, p. ex. Tourner_A_Gauche


http://wwwdgeinew.insa-toulouse.fr/~lebotlan/index.html

1/1 2/1

Fabrication du programme La compilation

Un logiciel spécial, appelé compilateur, est chargé de


transformer le programme

mission.adb mission-exe Le compilateur signalera certaines erreurs : erreurs de syntaxe et


00111010010011
with Rover ;
procedure
10010101001110
01010111001000
erreurs de typage (exemples)
Mission is 01101010111101
begin 11110010101010 Ce sont des messages d’erreur
Rover.avancer ; 10101010101010
end Mission ;

Quand tout va bien, il fabrique un programme exécutable (un


logiciel).

COMPILATION
Exemples d’erreurs et de messages d’erreur ?

3/1 4/1
Bloc séquence Exemple de bloc séquence

Exemple : séquence d’actions


B1 , B2 , .., Bn sont des blocs de code.
with Moteur_Diesel ;
Cela s’écrit aussi : ` B1 ∈ bloc , etc. procedure Mission1 is
begin
Moteur_Diesel . Prechauffer ;
Définition du bloc séquence Moteur_Diesel .Demarrer ;
La séquence des blocs B1 , .., Bn s’écrit Moteur_Diesel . Laisser_Tourner ;
Moteur_Diesel . Arreter ;
B1 ; + Le bloc B1 est exécuté en premier. end Mission1 ;
+ Le bloc B2 ne sera exécuté que lorsque le bloc B1
B2 ; sera terminé.
.. Combien de blocs séquence dans le programme ? (et où ?)
. + Le bloc séquence est terminé lorsque le dernier
bloc, Bn , est terminé. Combien de corps de programme ? (et où ?)
Bn ; Combien de temps met le programme à s’exécuter ?
Comment améliorer ce programme ?

5/1 6/1

Les jugements de typage Hello world

Le poly contient une quinzaine de règles de typage :

Écrire un programme qui affiche “Bonjour”.


R ÈGLE ` « Séquence »
Si pour tout 1 6 i 6 n, ` Bi ∈ bloc, with GAda.Text_IO ;
alors leur juxtaposition est un bloc : procedure Welcome is
B1 ; package Txt renames Gada.Text_IO ;
.. begin
` . ∈ bloc
Txt.Put_Line ("Bonjour !") ;
Bn ; end Welcome ;

C’est l’écriture formelle de « Un bloc séquence est un bloc ». + Put_Line affiche le texte demandé et passe à la ligne.
+ 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 8/1
Hello INSAs Hello INSAs

with GAda.Text_IO ;
procedure Mission is
Un programme effectue très souvent des tâches répétitives. package Txt renames Gada.Text_IO ;
procedure Afficher_Bienvenue is
Par exemple, nous souhaitons écrire un programme qui affiche begin
plusieurs messages de bienvenue : Txt.Put_Line ("Bonjour, ") ;
Txt.Put ("Bienvenue a l’INSA de ") ;
Bonjour, end Afficher_Bienvenue ;
Bienvenue a l’INSA de Toulouse begin
Bonjour, Afficher_Bienvenue ;
Bienvenue a l’INSA de Rennes Txt.Put_Line ("Toulouse") ;
Bonjour, Afficher_Bienvenue ;
Bienvenue a l’INSA de Lyon Txt.Put_Line ("Rennes") ;
Afficher_Bienvenue ;
Txt.Put_Line ("Lyon") ;
end Mission ;

9/1 10 / 1

Procédures sans argument Appel de procédure avec argument

Pour DÉFINIR une action (une procédure), il suffit d’inclure le


schéma ci-dessous avant le begin du programme. L’acteur Simulation contient l’action Rouler_Vers :
procedure Rouler_Vers (Point : Character) ;
Définition de procédure sans argument
Pour utiliser cette action, il faut lui fournir un argument, donné entre
procedure Bar is parenthèses :
Définitions éventuelles
begin Simulation.Rouler_Vers ( Point => e ) ;
Corps de la procédure ou plus simplement
B
Simulation.Rouler_Vers (e) ;
end Bar ;

On doit avoir ` B ∈ bloc On sait que e doit être de type Character, c.-à-d. une règle doit
permettre d’obtenir ` e ∈ Character
Pour INVOQUER l’action (la procédure), on écrit Bar ;

11 / 1 12 / 1
Règles de typage Retour sur Rouler_Vers

R ÈGLES ` « Types de base »


` -2000 ∈ Integer On peut donc écrire Simulation.Rouler_Vers (’L’) ;
` 42 ∈ Integer
` 42 ∈ Natural car ` ’L’ ∈ Character
` 42 ∈ Positive ou de manière équivalente Simulation.Rouler_Vers (Point => ’L’) ;
` 42.0 ∈ Float
` True ∈ Boolean
Éviter la confusion avec la déclaration
` False ∈ Boolean
procedure Rouler_Vers (Point : Character) ;
` ’A’ ∈ Character
` ’8’ ∈ Character (Pour invoquer Rouler_Vers, on écrit pas procedure, on écrit pas Character)
` "Moo" ∈ String
` "42" ∈ String

13 / 1 14 / 1

Quizz Quizz 2

Quizz Quizz 2
(typique contrôle)
` 150 + 300 ∈ Integer
` 1 ∈ Integer
` 1.0 ∈ Float ` 150 + 3.5 ∈

` "1" ∈ String ` 200 < 900 ∈ Boolean

` ’1’ ∈ Character ` 900 < 200 ∈ Boolean


` 900.0 < 200.0 ∈ Boolean
` S.Rouler_Vers (’L’) ∈ bloc
` 900.0 < 200 ∈
` S.Rouler_Vers (1) ∈

15 / 1 16 / 1

Anda mungkin juga menyukai