Licence Informatique 3 e année
Langages de Programmation II - Partie ADA
Examen 2e session - 27/07/2006 - 1h00
Les notes de cours et de TD sont autorisées. Il sera tenu compte pour la notation de la qualité de rédaction et de la lisibilité des copies. Le barême est donné à titre indicatif.
1 Ensembles encore (10 points)
On donne la spécification suivante du paquetagePaquetage_Liste: generic
type Data is (<>);
with function toString(e : Data) return String is <>;
package Paquetage_Liste is
type Liste is limited private;
LISTE_VIDE : constant Liste;
OutOfListBounds : Exception;
procedure init(l : out Liste); – place dans l une LISTE_VIDE procedure affiche(l : in Liste);
function getSize(l : Liste) return Natural;
– retourne le ième élément de la liste, peut lancer une exception – OutOfListBounds si i dépasse la taille de la liste
function getElement(l : Liste; i : Integer) return Data;
– renvoie vrai si e est dans l, faux sinon
function isElement(l : Liste; e : Data) return Boolean;
– Ajoute un élément en queue de liste
procedure addElement(l : in out Liste; i : in Data);
– Retire de la liste le premier élément rencontré égal à i procedure removeElement(l : in out Liste; i : in Data);
private ...
end Paquetage_Liste;
1
1. Écrire la spécification d’un paquetagePaquetage_Ensemble, sous-paquetage dePaquetage_Liste, définissant un typeEnsembleet les fonctionsunion(a : Ensemble; b : Ensemble), etintersection(a : Ensemble; b : Ensemble) qui renvoient desEnsemble.
2. Écrire le corps du paquetagePaquetage_Ensemble.
3. Écrire un programme de test qui crée deuxEnsembleet affiche leur union et leur intersection.
2
Ensembles encore
Question 3.1 : generic
package Paquetage_Liste.Paquetage_Ensemble is subtype Ensemble is Liste;
ENSEMBLE_VIDE : constant Ensemble;
function union(a : Ensemble;b : Ensemble) return Ensemble;
function intersection(a : Ensemble;b : Ensemble) return Ensemble;
private
ENSEMBLE_VIDE : constant Ensemble := LISTE_VIDE;
end Paquetage_Liste.Paquetage_Ensemble;
Question 3.2 :
package body Paquetage_Liste.Paquetage_Ensemble is
function union(a : Ensemble;b : Ensemble) return Ensemble is e : Ensemble := ENSEMBLE_VIDE;
d : Data;
begin
for i in 1..getSize(a) loop
addElement(e,getElement(a,i));
end loop;
for i in 1..getSize(b) loop d := getElement(b,i);
if not isElement(a,d) then addElement(e,d);
end if;
end loop;
return e;
end union;
function intersection(a : Ensemble;b : Ensemble) return Ensemble is e : Ensemble := ENSEMBLE_VIDE;
d : Data;
begin
for i in 1..getSize(a) loop d := getElement(a,i);
if isElement(b,d) then addElement(e,d);
end if;
end loop;
return e;
end intersection;
end Paquetage_Liste.Paquetage_Ensemble;
Question 3.3 :
with Ada.Text_IO;with Ada.Integer_Text_IO;
use Ada.Text_IO;use Ada.Integer_Text_IO;
3
with Paquetage_Liste;with Paquetage_Liste.Paquetage_Ensemble;
procedure Test is
function toString(e : Integer) return String is begin
return Integer’IMAGE(e);
end toString;
package Paquetage_Liste_Integer is new Paquetage_Liste(Integer);
use Paquetage_Liste_Integer;
package Paquetage_Ensemble_Integer is
new Paquetage_Liste_Integer.Paquetage_Ensemble;
use Paquetage_Ensemble_Integer;
e,f : Ensemble;
begin
init(e);addElement(e,1);addElement(e,2);
addElement(e,3);addElement(e,4);addElement(e,5);
init(f);addElement(f,7);addElement(f,8);addElement(f,3);
affiche(e);affiche(f);
affiche(union(e,f));
affiche(intersection(e,f));
end Test;
4