Vous êtes sur la page 1sur 4

Univ.

Paris 11 - DEUG MIAS M2S1 1997-1998

Examen d'Informatique
(tronc commun)
Notes importantes: aucun document n'est autorise. La notation tiendra grandement compte de la
clarte des reponses, et particulierement de la lisibilite des algorithmes realises. les algorithmes devront
^etre aussi ecaces que possible.
Probleme (9 points). La federation francaise de yo-yo acrobatique organise plusieurs championnats de
France par equipes (1ere division, 2eme division etc). Voici comment se deroule un championnat:
{ quarante equipes au maximum peuvent participer a un championnat;
{ chaque equipe doit rencontrer deux fois chacune des autres equipes (match aller et match retour) ;
{ lors d'un match, chacune des deux equipes marque un certain nombre de points (non limite en
theorie) ; l'equipe qui a le plus de points a la n de la partie gagne le match ; en cas de nombre de
points egal, il y a match nul ;
{ lorsque tous les matchs ont ete joues, on e ectue le classement de la facon suivante :
{ on classe les equipes selon le nombre de parties victorieuses (si A a plus de victoires que B , A
est classe avant B ) ;
{ si plusieurs equipes sont ex-aequo, on les departage en comptant le nombre de defaites (si A a
autant de victoires et moins de defaites que B , A est classe avant B ) ;
{ si plusieurs equipes sont encore ex-aequo, on les departage en comptant le nombre de points
marques pendant toutes les parties (si A a autant de victoires et de defaites et plus de points
que B , A est classe avant B ).
L'inscription des equipes, la gestion des resultats des matchs et le classement nal sont traites par ordi-
nateur. Les concepteurs du programme se sont mis d'accord sur le type abstrait Championnat suivant.
{ Constructeurs :
{ Action CreerChampionnat(Resultat CH: championnat)
f Cree un championnat \vide", sans equipe ni match joue g
{ Action InscrireEquipe(Donnee E: chaine de caracteres ; Donnee-Resultat CH: championnat;
Resultat N: entier)
f Inscrit l'equipe dont le nom est donne par la valeur de E au championnat CH. L'entier N est
un numero attribue a l'equipe, compris entre 1 et le nombre d'equipes inscrites ; toute equipe
a un unique numero et vice-versa. Si on tente d'inscrire une equipe alors qu'elle a deja ete
inscrite ou alors que le nombre maximum d'inscriptions est deja atteint, la valeur de CH n'est
pas modi ee et N recoit la valeur zero. g
{ Action EntrerResultat(Donnees A, B, ScoreA, ScoreB: entiers ; Donnee-Resultat CH: cham-
pionnat)
f Donne au programme le resultat du match entre A et B, qui s'est deroule au domicile de
A dans le championnat CH : A a marque ScoreA points, B en a marque ScoreB. Si un autre
score avait deja ete donne pour le m^eme match, l'action le remplace par le nouveau score. g
{ Operations d'acces
{ Fonction NomEquipe(A: entier ; CH: championnat) ! cha^ne de caracteres
f Retourne le nom de l'equipe associee au numero donne dans le championnat donne. A doit
^etre compris entre 1 et le nombre d'equipes inscrites a CH. g

1
{ Fonction NumeroEquipe(E: cha^ne de caracteres ; CH: championnat) ! entier
f Retourne le numero de l'equipe de nom E dans le championnat donne. Si cette equipe n'est
pas inscrite, la fonction retourne zero. g
{ Fonction Score( A,B,C: entier ; CH: championnat) ! entier
f Donne le score de l'equipe numero C dans le match entre les equipes numero A et B au
domicile de A durant le championnat CH. Ce match doit absolument avoir ete joue. Si C n'est
egal ni a A ni a B, la fonction renvoie zero. A, B et C doivent ^etre compris entre 1 et le nombre
d'equipes inscrites a CH. g
{ NombreInscrits(CH: championnat) ! entier
f Renvoie le nombre d'equipes inscrites au championnat donne. g
{ Operation de test
{ Fonction MatchJoue(A,B: entier ; CH: championnat) ! booleen
f Indique si le match entre les equipes numero A et B, au domicile de A, a ete joue. A et B
doivent ^etre compris entre 1 et le nombre d'equipes inscrites a CH. g
1. Premiere partie
(a) En utilisant le type abstrait ci-dessus, realisez une fonction qui teste si un championnat donne
est termine, c'est-a-dire si tous ses matchs ont ete joues.
(b) En utilisant le type abstrait ci-dessus, realisez une action qui ecrit le nom du vainqueur (ou
d'un des vainqueurs en cas d'ex-aequo) d'un championnat donne. (Il est recommande d'ecrire
et utiliser des actions ou fonctions auxiliaires bien choisies).
2. Deuxieme partie
On convient de representer le type abstrait championnat par le type concret suivant :
constante MAXEQ = 40

type championnat = produit


Equipes : tableau[1..MAXEQ] de chaines de caracteres

NbeInscrits : entier

Matchs : tableau[1..MAXEQ,1..MAXEQ] de
produit
Score1, Score2 : entier
fin
fin

(a) Commentez ce type concret en indiquant precisement la raison d'^etre de chacun de ses compo-
sants (vous pouvez vous appuyer sur un ou plusieurs exemples). Comment representeriez-vous
un match qui n'a pas encore ete joue ? Comment distingueriez-vous, pour une equipe de numero
donne, un match joue a domicile d'un match joue a l'exterieur?
(b) Realisez les actions CreerChampionnat et InscrireEquipe, ainsi que les fonctions Score et Nu-
meroEquipe du type abstrait championnat en utilisant ce type concret.

2
Exercice (4 points).
Considerez le programme suivant, ecrit en \pseudo-Pascal".
program examen;
var x: array[1..2] of integer;
i: integer;

procedure P2([MODE] a, b: integer);


begin
x[1] := a * 2;
x[2] := b * 2;
a := a + 2;
b := b + 2; {Donner etat environnement et memoire}
end;

procedure P1([MODE] a, b: integer);


var x: array[1..2] of integer;
begin
x[1] := -a;
x[2] := -b;
P2(x[1], x[2]);
a := a - 1;
b := b - 1;
end;

begin {Programme principal}


for i := 1 to 2 do
x[i] := i;
P1(x[1], x[2]);
for i := 1 to 2 do
writeln ('x [', i,'] = ', x[i]);
end. {Programme principal}

1. Donnez l'etat de l'environnement et de la memoire au passage (c'est-a-dire a la n de l'execution)


de l'instruction commentee par fDonner etat environnement et memoireg, dans chacun des trois
cas suivants :
(a) le langage fonctionne en liaison statique et [MODE] represente le mode de passage par valeur;
(b) le langage fonctionne en liaison statique et [MODE] represente le mode de passage par adresse ;
(c) le langage fonctionne en liaison dynamique et [MODE] represente le mode de passage par
adresse.
L'etat de l'environnement et de la memoire seront donnes par des tableaux de la forme suivante :

Environnement Memoire
Identi cateur Adresse Adresse Valeur
1
2
3

Note importante: lorsqu'on aura besoin de reserver une case memoire, on reservera la premiere
libre (dans l'ordre croissant des adresses).
2. Ecrivez ce qui est ache sur l'ecran a la n du programme, pour chacun des trois cas precedents.

3
Exercice (3 points). Un palindrome est un mot ou une phrase qui peut se lire indi eremment de gauche
a droite ou de droite a gauche. Par exemple, \laval" et \esope reste ici et se repose" sont des palindromes
(dans le dernier, on ne tient pas compte des espaces). Speci er et realiser une fonction qui determine si
un mot ou une phrase stocke dans une variable de type
produit
T : tableau[1..MAX] de caracteres
longueur : entier
fin

(ou longueur designe le nombre de caracteres du mot ou de la phrase) est un palindrome, en supposant
qu'il peut y avoir un ou plusieurs espaces (cases du tableau contenant le caractere \ ") entre les mots
d'une phrase.
Exercice (4 points). Considerez la fonction suivante. Le but de cet exercice est de calculer sa complexite
au pire et sa complexite moyenne en temps, mesuree en termes de nombre boucles \tant que" e ectuees.
Fonction EstTrie(T : tableau[1..n] de 0..1) ! booleen
lexique k:entier ; trie:booleen
debut
k 1 ; trie VRAI
tant que trie et kn-1 faire
debut
si T[k]>T[k+1] alors trie FAUX
k k+1
n
n
1. Quelle est sa complexite au pire? Justi ez votre reponse.
2. Demontrez que, parmi les 2 con gurations possibles du tableau,
n

(a) il en existe 2n telles que n 1 boucles soient e ectuees par l'algorithme;


(b) pour tout 1  k < n 1, il existe k2 1 con gurations telles que k boucles soient e ectu
n k
ees
par l'algorithme.
3. Deduisez-en une formule (contenant une somme) donnant la complexite moyenne de l'algorithme.
4. Demontrez que
Xi 2
n
2 n i
= 6:2n
(n2 + 4n + 6).
i=1

5. Deduisez-en que la complexite moyenne de l'algorithme est egale a 3 n2 + 12 .


n

Vous aimerez peut-être aussi