Vous êtes sur la page 1sur 7

FEDERATION EUROPEENNE DES ECOLES

FEDERATION FOR EDUCATION IN EUROPE


OING dotée du statut participatif auprès du Conseil de l’Europe
INGO enjoying participatory status with the Council of Europe

UE D - TECHNIQUES PROFESSIONNELLES

Bachelor européen en informatique et réseaux

UC D31 - Epreuve commune

Matériel autorisé :
Calculatrice standard/scientifique non programmable et non graphique
Règle à dessiner les symboles informatiques
Oracle SQL (Versions 9i et 10g)
Mémento MySQL 5

Type d’épreuve : Rédaction (Etude de cas)

Durée : 2 heures

Session : Juin 2018

© Fédération Européenne Des Ecoles - Federation for EDucation in Europe - Juin 2018
UC D31 Etude de cas informatique et réseaux - Epreuve commune - Sujet
UC D31 - INFORMATIQUE ET RESEAUX EPREUVE COMMUNE

BAREME DE NOTATION

Dossier 1 - SQL et algèbre relationnelle 50 points

Dossier 2 - Diagramme PERT 20 points

Dossier 3 - Programmation 40 points

Présentation et orthographe 10 points

Total 120 points

© Fédération Européenne Des Ecoles - Federation for EDucation in Europe - Juin 2018 2/7
UC D31 Etude de cas informatique et réseaux - Epreuve commune - Sujet
 Dossier 1 - SQL et algèbre relationnelle

La mairie du village de Cordes-sur-Ciel gère l’occupation des places de son marché, qui se tient tous les
samedis, avec un SGBD contenant les tables relationnelles suivantes :
Places(noP, noCat, surface, distance)
Categories(noCat, libCat, prixJ)
Marchands(noM, nomM, addM, speM)
Occupations(noPP, noMM, date_Occup)

Bien que pour un jour du marché donné, un marchand n’occupe qu’une seule place et qu’une place du
marché n’est occupée que par un seul marchand, la mairie impose que la base de données prenne en
compte les occupations des places du marché dans le temps. La mairie exige de pouvoir enregistrer qu’un
marchand a occupé la même place plusieurs jours de marché dans l’année. De même, qu’une place du
marché peut être occupée par plusieurs marchands dans plusieurs jours de marché dans l’année.

Toutes les places du marché sont stockées dans la table Places. Chaque place est identifiée par un numéro
(noP) et appartient à une catégorie de prix (noCat) qui dépend de la surface (surface) de la place (en m 2) et
de la distance (distance) de la place de la supérette du village (en m).

Les différentes catégories de prix sont stockées dans la table Categories. Chaque catégorie est identifiée
par un numéro (noCat), par un libellé (libCat) et est défini par le prix journalier (prixJ) en euros.

Les données sur les marchands sont stockées dans la table Marchands. Chaque marchand est identifié par
son numéro (noM), son nom (nomM), son adresse (addM) et sa spécialité (speM).

Les données d’occupation sont stockées dans la table Occupations. Chaque occupation est définie par le
numéro de la place (noPP), le numéro du marchand (noMM) et la date d’occupation (date_Occup).

Question 1
Dessinez un schéma entité-association du schéma relationnel précédent.

Question 2
Quelle est la commande, en algèbre relationnelle, qui permet de donner les numéros des places
avec une surface supérieure à 20 m2 et une distance inférieure à 100 mètres de la supérette du
village ?

Question 3
Quelle est la commande, en SQL, qui permet de donner les numéros et la surface des places
dont le prix est de 20 euros et qui se trouvent à moins de 100 mètres de la supérette du village ?

Question 4
Quelle est la commande, en SQL et en algèbre relationnelle, qui permet de donner toutes les
places qui n’ont pas été occupées depuis le 20 mars 2015 ?

Question 5
Quelle est la commande, en SQL, qui permet de trouver le numéro de la place qui est la plus
proche de la supérette du village ?

Question 6
Quelle est la commande, en SQL, qui permet de calculer la surface totale des places non-
occupées du marché ?

© Fédération Européenne Des Ecoles - Federation for EDucation in Europe - Juin 2018 3/7
UC D31 Etude de cas informatique et réseaux - Epreuve commune - Sujet
Soit les deux requêtes en algèbre relationnelle :
a) π [nomM] (σ [date_occup = ‘22/10/2016’ ∧ speM = ‘Boulanger’]( Marchands* ( noM = noMM ) Occupations ))
b) π [nomM] ((σ [date_occup = ‘22/10/2016’] Marchands)* ( noM = noMM) (σ [speM = ‘Boulanger’]
Occupations))

Question 7
Que calcule la requête algébrique a) ?

Question 8
Est-ce que les requêtes a) et b) retournent le même résultat ? Citez au moins une règle qui
justifie votre réponse.

Question 9
Est-ce que l’une des deux requêtes est meilleure que l’autre si on considère leurs deux plans
d’exécution ? Expliquez votre réponse.

Question 10
Quelle est la commande qui permet d’afficher pour chaque marchand le nom, le numéro de
place et le nombre de fois où il occupe cette place ?

Question 11
Quelle est la commande, en SQL, qui permet d’afficher le prix moyen des places occupées par le
marchand numéro 33 ?

Question 12
Quelle est la commande qui permet d’afficher le numéro de place et son type ?
Les places sont regroupées en types de la façon suivante : type 1 pour les places dont le prix est de ]0 à 100],
type 2 pour les places dont le prix est supérieur à 100.

Rappel :
✓ SIGN(x) est une fonction SQL qui donne -1 si x<0, 0 si x=0 et +1 si x>0 ;
✓ DECODE(x, Val1, RES1, Val2, RES2, .., Valn, RESn, Default) est une fonction SQL. Si x=Val1,
DECODE retourne RES1, …, Si x=Valn, DECODE retourne RESn. Si x n’est pas égal à Val1,
Val2, ., ou Valn alors DECODE retourne la valeur par défaut Default.

© Fédération Européenne Des Ecoles - Federation for EDucation in Europe - Juin 2018 4/7
UC D31 Etude de cas informatique et réseaux - Epreuve commune - Sujet
 Dossier 2 - Diagramme PERT

La mairie du village de Cordes-sur-Ciel a décidé de construire un marché en dur pour loger les marchands
plusieurs jours par semaine.

Tableau des tâches

Les tâches La durée des tâches en jours


A. Etude, réalisation et acceptation des plans 4

B. Préparation du terrain 2

C. Commande matériaux (bois, briques, ciment, tôle, etc.) 1

D. Creusage des fondations 1

E. Commandes portes, fenêtres 2

F. Livraison des matériaux 2

G. Coulage des fondations 2

H. Livraison portes, fenêtres 10

I. Construction des murs, du toit 4

J. Mise en place des portes et des fenêtres 1

Question 1
Donnez le tableau des antériorités des tâches.

Question 2
Tracez le réseau PERT de construction du marché.

Question 3
Expliquez et donnez le chemin critique.

© Fédération Européenne Des Ecoles - Federation for EDucation in Europe - Juin 2018 5/7
UC D31 Etude de cas informatique et réseaux - Epreuve commune - Sujet
 Dossier 3 - Programmation

Soit le programme en langage C suivant :


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>

extern void gros_calcul();


extern void petit_calcul();
extern void modifie_compteurs(int *, int *);
extern int on_continue(int);
pthread_mutex_t Mut1=PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t Mut2=PTHREAD_MUTEX_INITIALIZER;

void *second_thread()
{
while (on_continue(compteur_commun1))
{
gros_calcul();
pthread_mutex_lock(&Mut2);
pthread_mutex_lock(&Mut1);
modifie_compteurs(&compteur_commun1, &compteur_commun2);
pthread_mutex_unlock(&Mut1);
pthread_mutex_unlock(&Mut2);
}
pthread_exit(NULL);
return(NULL);
}
int main()
{
pthread_t th;
int compteur_commun1 = 0;
int compteur_commun2 = 0;
/* On crée le second thread */
if ((pthread_create(&th, NULL, second_thread, NULL))!=0)
{
fprintf(stderr, "Erreur pthread_create()\n");
exit(-1);
}
while (on_continue(compteur_commun1))
{
pthread_mutex_lock(&Mut1);
pthread_mutex_lock(&Mut2);
modifie_compteurs(&compteur_commun1, &compteur_commun2);
pthread_mutex_unlock(&Mut2);
pthread_mutex_unlock(&Mut1);
petit_calcul();
pthread_mutex_lock(&Mut1);
compteur_commun1++;
pthread_mutex_unlock(&Mut1);
}
pthread_join(th, NULL);
pthread_mutex_destroy(&Mut1);
pthread_mutex_destroy(&Mut2);

© Fédération Européenne Des Ecoles - Federation for EDucation in Europe - Juin 2018 6/7
UC D31 Etude de cas informatique et réseaux - Epreuve commune - Sujet
return(0);
}

Dans ce programme, les fonctions gros_calcul() et petit_calcul() effectuent quelques calculs pendant une
durée indéterminée.
La fonction on_continue() retourne 0 quand le programme doit se terminer. Rien ne nous permet de savoir
à l'avance combien de fois cette fonction sera appelée avant de retourner un nombre nul qui permettra aux
deux threads de sortir de leur boucle.
Enfin, la fonction modifie_compteurs() modifie les deux variables compteur_commun1 et
compteur_commun2.

Question 1
Qu'est-ce qu'un thread ? Quel est l'avantage d'un thread par rapport à un processus classique ?

Question 2
Quels sont les deux types de thread ? Pour chacun d'eux, précisez les avantages/inconvénients.

Question 3
Dans le code donné, le programmeur a effectué deux erreurs conceptuelles fondamentales. Une d'entre
elles sera d'ailleurs détectée par le compilateur. La seconde pourra engendrer un comportement non
désiré.
Quelles sont ces deux erreurs ? Proposez une correction au code pour les éviter.

© Fédération Européenne Des Ecoles - Federation for EDucation in Europe - Juin 2018 7/7
UC D31 Etude de cas informatique et réseaux - Epreuve commune - Sujet

Vous aimerez peut-être aussi