INSA Toulouse 1A Algorithme ADA Cours 2-1

Embed Size (px)

Citation preview

  • 8/9/2019 INSA Toulouse 1A Algorithme ADA Cours 2-1

    1/2

    Algorithmique UV2

    Cours 1

    Didier Le Botlan

    INSA

    [email protected]

    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