Vous êtes sur la page 1sur 4

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

Fabrication du programme

mission.adb with Rover ; procedure Mission is begin Rover.avancer ; end Mission ;
mission.adb
with Rover ;
procedure
Mission is
begin
Rover.avancer ;
end Mission ;
procedure Mission is begin Rover.avancer ; end Mission ; COMPILATION mission-exe 00111010010011 10010101001110

COMPILATION

mission-exe 00111010010011 10010101001110 01010111001000 01101010111101 11110010101010 10101010101010
mission-exe
00111010010011
10010101001110
01010111001000
01101010111101
11110010101010
10101010101010

1 / 1

3 / 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
Comme ceci

Notion d’identificateur, p. ex. Tourner_A_Gauche

La compilation

2 / 1

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

B 1 , B 2 , ,

B n sont des blocs de code.

Cela s’écrit aussi : B 1 ∈ bloc , etc. Définition du bloc séquence La
Cela s’écrit aussi : B 1 ∈ bloc , etc.
Définition du bloc séquence
La séquence des blocs B 1 ,
, B n s’écrit
B 1 ;
B 2 ;
☞ Le bloc B 1 est exécuté en premier.
☞ Le bloc B 2 ne sera exécuté que lorsque le bloc B 1
sera terminé.
.
.
.
☞ Le bloc séquence est terminé lorsque le dernier
bloc, B n , est terminé.
B n ;

Les jugements de typage

5 / 1

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

R ÈGLE « Séquence » Si pour tout 1 i n , B i ∈
R ÈGLE
« Séquence »
Si pour tout 1 i n , B i ∈ bloc,
alors leur juxtaposition est un bloc :
B 1 ;
.
.
∈ bloc
.
B n ;

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

Exemple de bloc séquence

Exemple : séquence d’actions
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 ?

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 ;

6 / 1

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

Procédures sans argument

9 / 1

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
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 ;
Bar ;

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

end Afficher_Bienvenue ; begin

Afficher_Bienvenue ;

a

") ;

l’INSA

de

" ) ;

Txt.Put_Line ("Toulouse") ;

Afficher_Bienvenue ;

Txt.Put_Line ("Rennes") ;

Afficher_Bienvenue ;

Txt.Put_Line ("Lyon") ; end Mission ;

Appel de procédure avec argument

10 / 1

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 ) ;

Simulation.Rouler_Vers ( Point => e ) ;
Simulation.Rouler_Vers ( Point => e ) ;

ou plus simplement

Simulation.Rouler_Vers ( e ) ;

Simulation.Rouler_Vers (e) ;

On sait que e doit être de type Character, c.-à-d. une règle doit permettre d’obtenir e Character

e doit être de type Character , c.-à-d. une règle doit permettre d’obtenir e ∈ Character

Règles de typage

R ÈGLES « Types de base »
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

Quizz

Quizz

(typique contrôle)

1
1

Integer

 

1.0
1.0

Float

"1"
"1"

String

’1’
’1’

Character

S.Rouler_Vers (’L’)

bloc

S.Rouler_Vers (1) ∈
S.Rouler_Vers (1)

Retour sur Rouler_Vers

On peut donc écrire

Simulation.Rouler_Vers (’L’) ;

Simulation.Rouler_Vers (’L’) ;

car ’L’ ∈ Character ou de manière équivalente
car
’L’
∈ Character
ou de manière équivalente

Simulation.Rouler_Vers (Point => ’L’) ;

Simulation.Rouler_Vers (Point => ’L’) ;
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)

13

/ 1

14

/ 1

 

Quizz 2

Quizz 2

 

150

+ 300

Integer

 
150 + 3.5 ∈
150 + 3.5
 

200

< 900

Boolean

 

900

< 200

Boolean

900.0 < 200.0

Boolean

 
900.0 < 200
900.0 < 200

15

/ 1

16

/ 1