• Aucun résultat trouvé

Licence Informatique 3

N/A
N/A
Protected

Academic year: 2021

Partager "Licence Informatique 3"

Copied!
4
0
0

Texte intégral

(1)

Licence Informatique 3 e année Langages de Programmation II

Examen - 07/06/2007 - 2h00

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 Bulle (10 points)

Soit la définition de type suivante :

type BSTab is array(Integer range <>) of Integer;

1. Écrire une procédurebubbleSortprenant en paramètre unBSTabet qui le trie par la méthode du tri à bulle (Rappel : le tri à bulle consiste à pousser le plus grand élément en dernière position du tableau et à recommencer en omettant le dernier élément).

2. Proposer (et écrire!) une solution pour pouvoir gérer des tableaux d’in- dices entiers mais contenant n’importe quel type d’élément. Indiquez les modifications à apporter à la procédurebubbleSort.

2 Dates (10 points)

On veut pouvoir gérer des dates représentées par un numéro de jour, un mois et une année. On donne la spécification partielle suivante :

1 package Date is

2 type Année is new Integer range -9999..9999;

3 type Mois is (Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Aout, Septembre,Octobre,Novembre,Décembre);

4 type Jour is new Integer range 1..31;

5 DateOutOfBounds : Exception;

6 procedure creerDate(d : out Date;a : in Année; m : in Mois; j : in Jour);

7 – incrémente le jour et au besoin le mois 8 procedure incrementeJour(d : in out Date);

9 – incrémente le mois et au besoin l’année

1

(2)

10 procedure incrementeMois(d : in out Date);

11 – incrémente l’année, peut lancer une DateOutOfBounds 12 – si la dernière année du type Année est dépassée 13 procedure incrementeAnnée(d : in out Date);

14 function toString(d : Date) return String;

15 private

16 ...

17 end Date;

1. Compléter la spécification du paquetageDateen indiquant les lignes où vous insérez du code.

2. Écrire le corps de la procédure incrementeAnnéeet celui de la fonction toString.

3. Écrire la spécification du paquetage DateComplete, sous-paquetage du paquetageDate, ajoutant au type Datele nom du jour en définissant un typeDateCompletequi hérite deDateet inclut le nom du jour (modifier si nécessaire le paquetageDate).

4. Écrire le corps du paquetageDateCompleteen redéfinissant les procédures nécessaires à la prise en compte du nom du jour.

2

(3)

Bulle

Question 1.1 :

procedure bubbleSort(t : in out BSTab) is k : Integer;

i : Integer := t’LAST - 1;

begin

loop1 : while i > t’FIRST loop loop2 : for j in t’FIRST..i loop

if t(j+1) < t(j) then k := t(j+1);

t(j+1) := t(j);

t(j) := k;

end if;

end loop loop2;

i := i - 1;

end loop loop1;

end bubbleSort;

Question 1.2 : generic

type Element is private;

with function "<" (e1 : Element;e2 : Element) return Boolean;

package BubblesortG is

type BSTab_g is array(Integer range <>) of Element;

procedure bubbleSort(t : in out BSTab_g);

end BubblesortG;

with Ada.Text_IO;with Ada.Integer_Text_IO;

use Ada.Text_IO;use Ada.Integer_Text_IO;

package body BubblesortG is

– AJOUTER ICI LA PROCEDURE bubbleSort DE LA QUESTION 1.1 – EN METTANT COMME PARAMETRE UN BSTab_g ET AVEC k:Element;

end BubblesortG;

Dates

Question 2.1 :

Il faut ajouter entre les lignes 5 et 6 : type Date is tagged private;

Il faut ajouter dans le bloc private (ligne 16) : type Date is tagged record

année_d : Année;

mois_d : Mois;

jour_d : Jour;

end record;

3

(4)

Question 2.2 :

procedure incrementeAnnée(d : in out Date) is begin

if d.année_d = Année’LAST then raise DateOutOfBounds;

else d.année_d := d.année_d + 1; end if;

end incrementeAnnée;

function toString(d : Date) return String is begin

return Jour’IMAGE(d.jour_d) & " " & Mois’IMAGE(d.mois_d) & " " &

Année’IMAGE(d.année_d);

end toString;

Question 2.3 :

package Date.DateComplete is

type Jour_Nom is (Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche);

type DateComplete is new Date with private;

procedure creerDate(d : out DateComplete;a : in Année; m : in Mois;

j : in Jour; n : in Jour_Nom);

procedure incrementeJour(d : in out DateComplete);

function toString(d : DateComplete) return String;

private

type DateComplete is new Date with record jour_dn : Jour_Nom;

end record;

end Date.DateComplete;

Question 2.4 :

package body Date.DateComplete is

procedure creerDate(d : out DateComplete;a : in Année; m : in Mois;

j : in Jour; n : in Jour_Nom) is begin

creerDate(Date(d),a,m,j);

d.jour_dn := n;

end creerDate;

procedure incrementeJour(d : in out DateComplete) is begin

incrementeJour(Date(d));

if d.jour_dn = Jour_Nom’LAST then d.jour_dn := Jour_Nom’FIRST;

else d.jour_dn := Jour_Nom’SUCC(d.jour_dn); end if;

end incrementeJour;

function toString(d : DateComplete) return String is begin

return Jour_Nom’IMAGE(d.jour_dn) & " " & toString(Date(d));

end;

end Date.DateComplete;

4

Références

Documents relatifs

Quelle quantité de sable et d’eau doit-on mettre avec 30 pelles de

Quand on place de l’argent à la banque pendant un certain temps, il rapporte un revenu qu’on appelle intérêt. Il arrive que la banque prête de l’argent, et là aussi elle

 Pour afficher une date, vous pouvez utiliser la fonction strftime avec pour paramètre une chaîne de caractères indiquant le format sous lequel vous voulez représenter

Les notifications sont générées pour le paquetage de dialogue quand est envoyée une demande INVITE, quand un nouveau dialogue se manifeste à un UA, ou quand l'état ou

o Si il n'y avait pas d'identifiant de dialogue dans le champ d'en-tête Event, une notification est générée chaque fois qu'il y a un changement dans l'état de tout dialogue

De plus, si un autre abonnement est reçu à la même ressource, du même observateur, pour le même paquetage d’événement, les paramètres de paquetage d’événement et le filtre

En fait, le comportement de l’agent de présence pour le traitement d’une demande SUBSCRIBE avec Expires à zéro n’est pas différent de celui pour toute autre valeur d’expiration ;

Les informations d’enregistrement pour une certaine adresse d’enregistrement DOIVENT être contenues dans un seul élément &#34;enregistrement&#34; ; elles ne peuvent pas