Vous êtes sur la page 1sur 2

Retour

Sujet de contrôle de vos anciens.

Algorithmique UV2 Le fichier RFID.ads


Cours 1 package RFID is
Nb_Frequences : constant Integer := 64 ;

Didier Le Botlan Les fréquences sont numérotées de 1 à Nb_Frequences


function Frequence (No_Frequence : Integer ) return Float ;
INSA Indique si un signal est présent sur la fréquence donnée en Hz.
contact.lebotlan@insa-toulouse.fr
function Signal_Present (Freq : Float ) return Boolean ;
2nd semestre 2009–2010 Lit le numéro d’étiquette reçu sur la fréquence donnée en Hz.
function Etiquette_Detectee (Freq : Float ) return Integer ;
end RFID ;

http://wwwdgeinew.insa-toulouse.fr/~lebotlan/index.html
Règle de qualité : identificateurs lisibles et pas trop longs
Règle de qualité : utilisation de constantes
1/9 2/9

1ère question 2ème question


+ Fonction Balayage : repérer un signal (renvoyer zéro si aucun signal)
+ Afficher toutes les fréquences.
1 function Balayage return Integer is
1 with GAda. Text_IO, RFID ; 2 Trouvee, No_Freq : Integer ;
3 procedure Mission1 is 3 begin
4 No_Freq := 1 ;
5 package Txt renames GAda. Text_IO ;
5 Trouvee := 0 ;
7 begin
7 Parcours des fréquences
8 Affichage des fréquences connues
8 La boucle s’arrête dès qu’un signal est repéré
9 Txt . Put_Line ( "Bonjour, voici les frequences connues : " ) ;
9 while (No_Freq <= RFID.NB_Frequences) and (Trouvee = 0) loop
10 for No_Freq in 1..RFID.NB_Frequences loop
10 i f RFID. Signal_Present (RFID.Frequence(No_Freq) ) then
12 Txt . Put_Line ( "Frequence numero " & 11 Trouvee := RFID. Etiqu_Detectee(RFID.Frequence(No_Freq) ) ;
13 Integer ’Image(No_Freq) & " = " & 12 end i f ;
14 Float ’Image(RFID.Frequence(No_Freq) ) & "Hz" ) ; 13 No_Freq := No_Freq + 1 ;
15 end loop ; 14 end loop ;
16 end Mission1 ;
16 return Trouvee ;
17 end Balayage ;

3/9 4/9
3ème question 3ème question

+ Tester en boucle

1 with GAda. Text_IO, RFID, Mobile ;


Le fichier RFID.ads 3 procedure Mission1 is
package Mobile is ..
4 .
function No_SIM return Integer ; 5 Etiquette : Integer ;
procedure Transmettre_Serveur( Etiquette : Integer ; Sim : Integer ) ; 6 begin
procedure Pause(Secondes : Integer ) ; 8 Détection en boucle des étiquettes dans le voisinage
9 while True loop
Indique la distance en mètres à laquelle se trouve une étiquette
10 Etiquette := Balayage ;
function Distance_Etiquette ( Etiquette : Integer ) return Float ;
11 i f Etiquette /= 0 then
end Mobile ; 12 Mobile . Transmettre_Serveur ( Etiquette , Mobile .No_Sim) ;
13 end i f ;
14 Mobile .Pause (3) ;
15 end loop ;
17 end Mission1 ;

5/9 6/9

Mission 2 Mission 3

+ Trouver l’étiquette la plus proche


+ Si l’étiquette est perdue, envoie un email à son propriétaire
1 function Plus_Proche return Integer is
2 No_Plus_Proche : Integer ;
1 procedure Traiter_Etiquette ( Etiquette : Integer ; Sim: Integer ) is 3 No_Etiq : Integer ;
2 XY : Serv .Des_Coords ; 4 Dist_Plus_Proche : Float := Float ’ Last ;
3 begin 5 begin
4 i f Serv .Perdue( Etiquette ) then 6 No_Plus_Proche := 0 ;
5 XY := Serv.Coordonnees (Serv. Station_Connectee (Sim) ) ; 8 for No_Freq in 1..RFID.Nb_Frequences loop
6 Serv . Email (Serv .Adresse( Etiquette ) , 9 i f RFID. Signal_Present (RFID.Frequence(No_Freq) ) then
10 No_Etiq := RFID. Etiquette_Detectee (RFID.Frequence(No_Freq) ) ;
7 "Votre etiquette est trouvee. " &
8 "http://maps.google.fr/?ll=" & 12 i f M. Distance_Etiquette (No_Etiq) < Dist_Plus_Proche then
9 Serv .Image(XY. longitude ) & "," & 13 No_Plus_Proche := No_Etiq ;
14 Dist_Plus_Proche := M. Distance_Etiquette (No_Etiq) ;
10 Serv .Image(XY. latitude ) & "&t=h&z=20" ) ;
15 end i f ;
11 end i f ;
17 end i f ;
12 end Traiter_Etiquette ;
18 end loop ;
20 return No_Plus_Proche ;
21 end Plus_Proche ;

7/9 8/9

Vous aimerez peut-être aussi