insa toulouse 1a algorithme ada cours 2-1
TRANSCRIPT
-
8/9/2019 INSA Toulouse 1A Algorithme ADA Cours 2-1
1/2
Algorithmique UV2
Cours 1
Didier Le Botlan
INSA
2nd semestre 20092010
http://wwwdgeinew.insa-toulouse.fr/~lebotlan/index.html
1 / 9
Retour
Sujet de contrle de vos anciens.
Le fichierRFID.ads
package RFID is
Nb_Frequences : constant Integer := 64 ;
Les frquences sont numrotes de 1 Nb_Frequences
function Frequence ( No_Frequence : Int eger ) return Float ;Indique si un signal est prsent sur la frquence donne en Hz.
function Signal_Present (Freq : Float) return Boolean ;
Lit le numro dtiquette reu sur la frquence donne en Hz.
function Etiquette_Detectee (Freq : Float) return Integer ;
end RFID ;
Rgle de qualit : identificateurs lisibles et pas trop longs
Rgle de qualit : utilisation de constantes
2 / 9
1re question
Afficher toutes les frquences.
1 with GAda.Text_IO, RFID ;
3 procedure Mission1 is
5 package Txt renames GAda.Text_IO ;
7 begin
8 Affichage des frquences connues
9 Txt. Put_Line ("Bonjour, voici les frequences connues : ") ;10 for No_Freq in 1. . RFID.NB_Frequences loop
12 Txt. Put_Line ("Frequence numero " &13 Inte ger Image(No_Freq) & " = " &14 Floa t Image(RFID.Frequence(No_Freq)) & "Hz") ;15 end loop ;
16 end Mission1 ;
3 / 9
2me question
Fonction Balayage : reprer un signal (renvoyer zro si aucun signal)
1 function Balayage return Integer is
2 Trouvee, No_Freq : Intege r ;
3 begin
4 No_Freq := 1 ;
5 Trouvee := 0 ;
7 Parcours des frquences
8 La boucle sarrte ds quun signal est repr9 while (No_Freq
-
8/9/2019 INSA Toulouse 1A Algorithme ADA Cours 2-1
2/2
3me question
Le fichierRFID.ads
package Mobile is
function No_SIM return Integer ;
procedure Transmettre_Serveur( Etiquette : Integer ; Sim : Integer) ;
procedure Pause(Secondes : Intege r) ;
Indique la distance en mtres laquelle se trouve une tiquette
function Distance_Etiquette(Etiquette : Integer) return Float;
end Mobile ;
5 / 9
3me question
Tester en boucle
1 with GAda.Text_IO, RFID, Mobile ;
3 procedure Mission1 is
4
...
5 Etiquette : Integer ;
6 begin
8 Dtection en boucle des tiquettes dans le voisinage
9 while True loop
10 Etiquette := Balayage ;
11 i f Etiquette /= 0 then
12 Mobile.Transmettre_Serveur ( Etiqu ette , Mobile.No_Sim) ;
13 end if ;
14 Mobile.Pause (3) ;
15 end loop ;
17 end Mission1 ;
6 / 9
Mission 2
Si ltiquette est perdue, envoie un email son propritaire
1 procedure Traiter_Etiquette (Etiquette: Integer ; Sim:Integer) is
2 XY : Serv.Des_Coords ;
3 begin
4 i f Serv.Perdue(Etiquette) then
5
XY := Serv.Coordonnees (Serv.Station_Connectee (Sim)) ;6 Serv.Email (Serv.Adresse(Et iquette ) ,
7 "Votre etiquette est trouvee. " &8 "http://maps.google.fr/?ll=" &9 Serv. Image(XY. longitu de) & "," &
10 Serv.Image(XY. lat itu de ) & "&t=h&z=20") ;11 end if ;
12 end Traiter_Etiquette ;
7 / 9
Mission 3
Trouver ltiquette la plus proche
1 function Plus_Proche return Integer is
2 No_Plus_Proche : Integ er ;
3 No_Etiq : Integer ;
4 Dist_Plus_Proche : Float := Float Last ;
5 begin
6 No_Plus_Proche : = 0 ;
8 for No_Freq in 1. .RFID.Nb_Frequences loop
9 i f RFID. Signal_Pres ent (RFID. Frequence(No_Freq) ) then
10 No_Etiq := RFID.Etiquette_Detectee (RFID.Frequence(No_Freq)) ;
12 if M.Distanc e_Etiquette (No_Etiq) < Dist_Plus_Proche then
13 No_Plus_Proche : = No_Etiq ;
14 Dist_Plus_Proche := M.D istance_Etiquet te( No_Etiq) ;
15 end if ;
17 end if ;
18 end loop ;
20 return No_Plus_Proche ;
21 end Plus_Proche ;
8 / 9