Wadifa InfoEmploi public au Maroc ع

Modèle de concours d'accès en 1re année du cycle d'ingénieurs (GLSID et II-BDCC) — ENSET Mohammedia, juillet 2017 — Épreuve d'informatique (partie 2 seulement : algorithmique et programmation)

🏢 l'École Normale Supérieure de l'Enseignement Technique de Mohammedia (ENSET) 👤 1ère année du cycle d'ingénieurs — filières GLSID et II-BDCC 🎯 Informatique 📅 session de juillet 2017 👁️ 10 vues

En bref

Ce document est une ancienne épreuve écrite du concours de 1ère année du cycle d'ingénieurs — filières GLSID et II-BDCC organisé par l'École Normale Supérieure de l'Enseignement Technique de Mohammedia (ENSET) (2017), publiée sur Wadifa Info en consultation et téléchargement PDF gratuits, avec une correction proposée.

Organisme
l'École Normale Supérieure de l'Enseignement Technique de Mohammedia (ENSET)
Grade
1ère année du cycle d'ingénieurs — filières GLSID et II-BDCC
Spécialité
Informatique
Année
2017
Pages
7
Langue des questions
français
Correction
correction proposée disponible sur cette page
Sujet de l'épreuve « Informatique » du concours d'accès en 1ère année du cycle d'ingénieurs — filières GLSID et II-BDCC — l'École Normale Supérieure de l'Enseignement Technique de Mohammedia (ENSET), session de juillet 2017. Document officiel publié sur enset-media.ac.ma (copie archivée), 7 page(s). Sans corrigé.
📝 Texte des questions (extrait automatiquement des pages scannées)

Ce texte est extrait automatiquement des images de l'épreuve et peut contenir des erreurs de lecture — les images ci-dessus font foi.

ءاضيبلار١دلاب ‏جامعة الحسن الثاني‎
ROYAUME DU MAROC UNIVERSITÉ HASSAX II DE CASABLANCA
Ministère de l’Education Nationale, de la 1,2 7
Formation Professionnelle, de l'Enseignement | ١ ‏المملكة المغربية احم‎
Supérieur et de la Recherche Scientifique : 0:
Secrétariat d’Etat Chargé de l'Enseignement — ‏وزارة التربية الوطنية و التكوين المهني لصي‎
Supérieur et de la Recherche Scientifique ‏حث العلم والتعليم العالي‎ ds
‏الدولة المكلفة‎ AUS
D ‏بالتعليم العالي والبحث العلمي‎
de Casablanca Université Hassan II ‏جامعة الحسن الثاني بالدار البيضاء تت‎
Ecole Normale Supérieure | A
de l'Enseignement Technique Mohammedia Ex : D éate
‏المحمدية‎
‎Concours d’accès en première année du cycle d’ingénieurs pour les filières :
— Génie du Logiciel et des Systèmes Informatiques Distribués (GLSID)
— Ingénierie Informatique, Big Data et Cloud Computing (II-BDCC)
Session : Juillet 2017
Epreuve d’Informatique
Durée : 3 heures
Remarques importantes :
- L'épreuve se compose de trois parties :
© Partie Informatique générale (temps recommandé : 30 mn), (Notée sur 20 points)
o Partie Algorithmique et Programmation (temps recommandé : 2h), (Notée sur 80 points)
© Partie techniques d’expression (temps recommandé : 30 mn), (Notée sur 20 points)
- -- 105886 de la calculatrice ou de tout autre appareil électronique est interdit.
- Aucun document n’est autorisé.
- Pour la partie « Informatique générale » :
o Les réponses aux questions doivent être reportées sur la grille de réponse fournie avec cette partie
- Pour la partie « Algorithmique et programmation » :
o Les réponses à toutes les questions doivent être rédigées dans les feuilles de réponses.
© Chaque question du QCM ne peut avoir qu’une seule réponse possible parmi les quatre choix dont
la lettre correspondante (A, B, C ou D) est à reporter dans les feuilles de réponses.
o Les solutions algorithmiques peuvent être rédigées en utilisant un pseudo langage algorithmique
ou l’un des langages de programmation suivants : C, C++, C#, Java
© La clarté et la précision de votre solution algorithmique sera prise en considération.
- Pour la partie « Techniques d’expression » :
© La rédaction de la réponse doit être rendue dans la feuille fournie.
© La réponse à cette partie est obligatoire.
- Aucune autre explication supplémentaire ne sera fournie aux candidats en cours de l’examen.
Page 1 sur 7
wadifa-info.com ‏نماذج المباريات من موقع وظيفة إنفو‎

Partie 2 : Alcorithmique et Programmation (2 H)
- Les réponses à toutes les questions doivent être rédigées dans les feuilles de réponses.
- Chaque question du QCM ne peut avoir qu’une seule réponse possible parmi les quatre choix
dont la lettre correspondante (A, B, € ou D) est à reporter dans les feuilles de réponses.
- Les solutions algorithmiques peuvent être rédigées en utilisant un pseudo langage algorithmique
ou l’un des langages de programmation suivants : C, C++, C#, Java
- La clarté et la précision de votre solution algorithmique sera prise en considération.
QCM (25 points) :
Reportez dans les feuilles de réponses, la lettre qui correspond à la bonne réponse pour les
questions suivantes :
1. On considère la fonction suivante :
int fonctionl()!{
int i,n; i=0; n=0;
int T[]={1,5,8,4,6,7,44,10,20,2};
while (true) {
if(n==5) break;// break permet de sortir de la boucle
n=n+1';
1f(1>9) 1i=i-4;
if(i<0) 1i=i+3;
if (T[i]<T[i+1]) i=1+3;
else
i=i-4;
return T{il;
L’appel de cette fonction permet de retourner :
A) 8 B) 4
C) 6 D) 20
Page 2 sur 7
wadifa-info.com ‏نماذج المباريات من موقع وظيفة إنفو‎

2. Soit la fonction suivante :
int fonction2(int n) {
int a; üint b; int c; int i;
a = 0; b = 1;
if (n <= 1) {
return n;
else {
while (i <n) {
c=a+b;
1 - 1 + 17
return c;
Pour n=9, la valeur retournée par fonction? est :
A) 9 C) 34
B) 10 0 5
3. Soit la fonction suivante :
int fonction3()!{
int a[]={10,20,-35,35,-10,5,-10,20,30};
int n=9;int 51 = 0; int 52 = 0;
for( int 1 0, 3 - 0: j<n; [++ ){
51 += 2] j 7
if( 51 > 52 ( {
52 = 57
else if( 51 > 0 ( {
12 3 + 7/2
51 = 0;
return s2;
L’appel de cette fonction permet de retourner :
A) 30 B) 65
C) 55 D) 70
Page 3 sur 7
wadifa-info.com ‏نماذج المباريات من موقع وظيفة إنفو‎

4. Soit la fonction récursive suivante :
void fonctiond4(int n){
if(n>0){
fonction4(n-1);
printf("S%d ",n);
fonction4 (n-1);
Pour n=4, la fonction permet d’afficher :
A)121312141213121 B) 43211234
04321123432111 D) 12312344321121
5. Quelle est la complexité dans le pire cas de la recherche d'un élément dans un arbre
binaire de recherche de hauteur h contenant n nœuds ?
A) @(n) B) © (h)
C) © (log n) D) © (log h)
6. On insère les éléments 4, 3, 12, 7, 9 (dans cet ordre) dans un tas. Dans quel ordre vont-ils
ressortir ?
A) 9, 7, 4 B): 3,4, 7, 2
€) 9 D) 12,9, 7, 4,3
7. Soit l’arbre binaire A suivant :
void afficherContenuArbre (Noeud *A) {
// la structure de l'arbre, la structure de la pile et les //opérations
sur la pile sont considérés déjà définis
Noeud *pt; Element *pil; // pil est une pile
pil=NULL;// initiliser la pile à null
pt=A; //1a pile reçoit la racine de l’arbre
while (pt|l|pil){
if(pt){
Empiler (pt,&pil); //procedure qui empile pt à pil
pt=pt->FG;
else!{
afficherTetePile (pil); // procédure qui affiche le
//contenu de la tête de la pile
Page 4 sur 7
wadifa-info.com ‏نماذج المباريات من موقع وظيفة إنفو‎

pt=pil->contenu->FD;
Depiler (&pil) ;//procédure qui dépile un élément de la pile
L'appel à cette fonction, avec le paramètre l’arbre de la figure ci-dessus, permet d’afficher :
A)927164853 B) 3782114596
C) 9921764583 D) 9271364 5
8. Quelle opération transforme l'arbre de gauche de la figure ci dessous en celui de droite 7
A) une rotation droite, B) une double rotation,
C) une rotation gauche, D) aucun des trois.
9. A laquelle des structures suivantes s'apparente le plus une représentation de graphe par
listes de successeurs ?
A) une pile, B) un arbre binaire,
C) une table de hachage, D) un tableau bidimensionnel.
Exercice 1 (5 points) :
Soit l’expression suivante :
X=1+(1+2)*2+(1+2+3)*22+(1+2+3+4)*23+ .. . +(1+2+3+4+...-+n)*2"1
1. Ecrire la forme itérative de l’algorithme qui permet de calculer X
2. Ecrire la forme récursive de l’algorithme qui permet de calculer X
Page 5 sur 7
wadifa-info.com ‏نماذج المباريات من موقع وظيفة إنفو‎

Exercice 2 (20 points) :
ESP est un espace d’une seule dimension qui contient un ensemble de points P(x) où x représente
l’abscisse du point P. Dans notre cas, on suppose que ESP est formé des points : A(1), B(3), C(S), D(9),
E(11), F(7) et G(4).
L’algorithme KM, ci-dessous, permet de regrouper ces points en deux groupes homogènes G1 et G2.
1. Choisir de manière aléatoire 2 points formant chacun un groupe. Les groupes
formés G: et G2 ont respectivement les centres C1 et C2 (un centre représente la
moyenne des points d’un groupe)
2. Affecter chaque Point X au groupe Gi ayant le centre le plus proche
3. Recalculer le centre Ci de chaque groupe en utilisant la moyenne des points le
composant
4. Aller à l’étape 2 si la condition d’arrêt n’est pas vérifiée (la condition n’est pas
vérifiée au moment où aucun changement ne peut y avoir lieu après deux itérations
successives).
Questions :
1) L’exécution de la première instruction de l’algorithme KM en choisissant les points À et
B donne lieu aux groupes G1 et G2 ayant respectivement les centres C1=A(1) et C:=B(3).
Ce résultat peut être représenté de la manière suivante:
G1 0 َ ©
Compléter, à partir ‏عل‎ l’instruction 2, l’exécution ‏عل‎ l’algorithme KM sur l’ensemble des points de
l’espace ESP pour former les deux groupes G: et G2 tout en schématisant les groupes obtenus pour
chaque itération.
2) Proposer un algorithme qui permet de regrouper, d’une manière générale, les n points d’un espace
ESP en K groupes.
Page 6 sur 7
wadifa-info.com ‏نماذج المباريات من موقع وظيفة إنفو‎

Exercice 3 (30 points) :
On considère un réseau routier représenté par un graphe orienté. Les nœuds du graphe représentent des
villes 1, 2, ... n. Les arcs du graphe représentent les routes reliant les villes. Une route peut être soit
unidirectionnelle ou bidirectionnelle. Un chemin entre les nœuds 1 et j mesure une distance d (1, j). La
figure suivante représente un exemple de graphe correspondant à un réseau routier reliant 5 villes.
Nous souhaitons représenter ce graphe par une matrice d’interconnexion carrée M de dimension (n, n) ou
n représente le nombre de nœuds. La valeur de M )1 , j) représente la distance entre le nœud 1 et le nœud j
si un chemin existe du nœud 1 vers le nœud [. Si non, la valeur de M (i, j) est représentée par -1. La
matrice suivante montre un exemple représentant le cas du graphe précédent.
0 1 12 |3 4
0 0 5 |4 1-1
1 15 10 3 1|
2 ]-1-1)0 |2 |4 |
D ])-112 0 [6
4+ ]112 ]-1[6 [0 [
Chaque ville est caractérisée par son nom et ses coordonnées géographiques (latitude, longitude et
altitude) et le nombre de population. Les villes sont stockées dans un tableau NOEUDS/fn].
1. Ecrire le code qui permet de déclarer les structures représentant une ville et un réseau routier en
utilisant des types structurés, des tableaux ou des classes.
2. Ecrire le code d’une fonction qui permet de retourner la distance linéaire entre un nœud 1 et un
nœud j en utilisant les coordonnées géographiques de chaque nœud.
3. Ecrire le code qui permet de retourner la longueur d’un chemin traversant une liste des nœuds.
4. Ecrire le code d’une fonction qui permet de déterminer les différents chemins possibles entre un
nœud 1 vers un nœud j.
5. Ecrire le code d’une fonction qui permet déterminer le chemin le plus proche d’un nœud 1 vers un
nœud j.
6. En plus de la distance, nous souhaitons aussi prendre en considération d’autres caractéristiques
des chemins tels que la vitesse maximale à ne pas dépasser, le débit instantané du chemin
(Nombre de véhicules par seconde), existence ou nom d’une station de service, etc …
A) Proposer une déclaration de la structure représentant le nouveau réseau routier.
B) Expliquer les contraintes qui vont peser sur la détermination du chemin le plus rapide
allant d’un nœud 1 vers un nœud [.
Page 7 sur 7
wadifa-info.com ‏نماذج المباريات من موقع وظيفة إنفو‎

✅ Correction proposée

Il s'agit d'une correction proposée, rédigée par l'équipe wadifa-info pour vous aider à comprendre la méthode — ce n'est pas un corrigé officiel de l'administration organisatrice.

Ce modèle est l'épreuve d'informatique du concours d'accès en 1re année du cycle d'ingénieurs de l'ENSET Mohammedia (filières GLSID et II-BDCC), session de juillet 2017. Durée totale : 3 heures, sans calculatrice ni documents. Le document disponible contient la page de garde et la partie 2 « Algorithmique et programmation » (2 h, notée sur 80) : un QCM de 9 questions et trois exercices. Les parties « Informatique générale » et « Techniques d'expression » ne figurent pas dans le scan. Voici une correction proposée.

💡 Méthode pour les QCM de code : déroulez le programme à la main dans un petit tableau (une colonne par variable, une ligne par tour de boucle). C'est plus sûr que de « deviner » le rôle de la fonction.

QCM (25 points)

  1. C) 6. Déroulement de i à chaque tour : T[0]=1 < T[1]=5 → i=3 ; T[3]=4 < 6 → i=6 ; T[6]=44 > 10 → i=2 ; T[2]=8 > 4 → i=−2 ; 5e tour : i<0 donc i=1, puis T[1]=5 < 8 → i=4. n vaut 5, on sort : T[4] = 6.
  2. C) 34. C'est la suite de Fibonacci : la boucle tourne 8 fois (i de 1 à 8) et c prend les valeurs 1, 2, 3, 5, 8, 13, 21, 34. F(9) = 34.
  3. D) 70. Algorithme de Kadane (somme maximale d'un sous-tableau contigu) : s1 = 10, 30, −5 (remis à 0), puis 35, 25, 30, 20, 40, 70. Le maximum s2 = 70 (sous-tableau 35, −10, 5, −10, 20, 30).
  4. A) 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1. f(n) affiche f(n−1), puis n, puis f(n−1) (schéma des tours de Hanoï) : f(1) = « 1 », f(2) = « 1 2 1 », f(3) = « 1 2 1 3 1 2 1 », f(4) = f(3) 4 f(3), soit 15 nombres.
  5. B) Θ(h). La recherche descend d'un niveau à chaque comparaison ; au pire on parcourt un chemin racine–feuille de longueur h (h ne vaut log n que si l'arbre est équilibré, et peut valoir n s'il est dégénéré).
  6. Réponse probable : B) 3, 4, 7, 9, 12. Un tas restitue toujours ses éléments triés : seules B (tas-min) et D (tas-max) sont possibles. La convention la plus répandue dans les cours d'algorithmique francophones (tas utilisé comme file de priorité « min ») donne B ; avec un tas-max, ce serait D. Retenez surtout le principe : l'extraction se fait dans l'ordre trié.
  7. D) 9 2 7 1 3 6 4 8 5. Le programme est un parcours infixe itératif (on empile en descendant à gauche, on affiche au dépilement, puis on passe au fils droit). Infixe de l'arbre : sous-arbre gauche (9, 2, 7, 1), racine 3, sous-arbre droit (6, 4, 8, 5).
  8. A) une rotation droite. Le fils gauche 8 de la racine 24 devient la racine ; 24 descend à droite de 8, et l'ancien sous-arbre droit de 8 (12 avec 11 et 18) devient le sous-arbre gauche de 24. C'est exactement la rotation droite autour de 24.
  9. C) une table de hachage. Des listes de successeurs = un tableau indexé par les sommets dont chaque case pointe sur une liste chaînée : c'est la structure d'une table de hachage à chaînage.

Exercice 1 (5 points)

Le terme général est (1+2+…+k)·2k−1 = k(k+1)/2 · 2k−1, pour k = 1 à n. Valeurs de contrôle : X(1)=1, X(2)=7, X(3)=31, X(4)=111.

1. Forme itérative

long calculX(int n) {
    long X = 0, somme = 0, puiss = 1;   // somme = 1+...+k, puiss = 2^(k-1)
    for (int k = 1; k <= n; k++) {
        somme += k;
        X += somme * puiss;
        puiss *= 2;
    }
    return X;
}

Une seule boucle : complexité O(n), sans recalculer la somme ni la puissance à chaque tour.

2. Forme récursive

Relation de récurrence : X(0) = 0 et X(n) = X(n−1) + n(n+1)/2 · 2n−1.

long puissance2(int p) { return (p == 0) ? 1 : 2 * puissance2(p - 1); }

long calculXRec(int n) {
    if (n == 0) return 0;
    return calculXRec(n - 1) + (long)n * (n + 1) / 2 * puissance2(n - 1);
}

Exercice 2 (20 points) — algorithme KM (k-moyennes)

1) Exécution sur A(1), B(3), C(5), D(9), E(11), F(7), G(4)

Départ : C1 = 1, C2 = 3. Chaque point va au centre le plus proche, puis on recalcule les moyennes.

ItérationCentres utilisésG1G2Nouveaux centres
1C1=1 ; C2=3{A(1)}{B(3), G(4), C(5), F(7), D(9), E(11)}C1=1 ; C2=39/6=6,5
21 ; 6,5{A, B}{G, C, F, D, E}C1=2 ; C2=36/5=7,2
32 ; 7,2{A, B, G}{C, F, D, E}C1=8/3≈2,67 ; C2=32/4=8
42,67 ; 8{A, B, G, C}{F, D, E}C1=13/4=3,25 ; C2=27/3=9
53,25 ; 9{A, B, G, C}{F, D, E}inchangés → arrêt

Détail des basculements : à l'itération 2, B(3) est à 2 de C1 et à 3,5 de C2 ; à l'itération 3, G(4) est à 2 de C1 et à 3,2 de C2 ; à l'itération 4, C(5) est à 2,33 de C1 et à 3 de C2 ; à l'itération 5, F(7) reste dans G2 (3,75 contre 2). Deux itérations successives donnent les mêmes groupes : l'algorithme s'arrête.

Résultat : G1 = {1, 3, 4, 5} (A, B, G, C), centre 3,25 ; G2 = {7, 9, 11} (F, D, E), centre 9. Sur la copie, dessinez à chaque itération les deux ellipses G1 et G2 avec les abscisses qu'elles contiennent.

2) Généralisation à n points et k groupes

// x[0..n-1] : abscisses ; k groupes ; grp[i] = numéro du groupe du point i
void kmoyennes(double x[], int n, int k, int grp[]) {
    double c[k], somme[k]; int nb[k], change = 1;
    for (int j = 0; j < k; j++) c[j] = x[j];        // k points initiaux (ou tirés au hasard)
    for (int i = 0; i < n; i++) grp[i] = -1;
    while (change) {
        change = 0;
        for (int i = 0; i < n; i++) {                  // étape 2 : affectation
            int best = 0;
            for (int j = 1; j < k; j++)
                if (fabs(x[i] - c[j]) < fabs(x[i] - c[best])) best = j;
            if (grp[i] != best) { grp[i] = best; change = 1; }
        }
        for (int j = 0; j < k; j++) { somme[j] = 0; nb[j] = 0; }
        for (int i = 0; i < n; i++) { somme[grp[i]] += x[i]; nb[grp[i]]++; }
        for (int j = 0; j < k; j++)                      // étape 3 : recalcul des centres
            if (nb[j] > 0) c[j] = somme[j] / nb[j];
    }                                                    // étape 4 : arrêt si aucun changement
}

Pour un espace à plusieurs dimensions, on remplace |x − c| par la distance euclidienne et la moyenne par la moyenne coordonnée par coordonnée. Coût d'une itération : O(n·k).

Exercice 3 (30 points) — réseau routier

1. Déclarations

#define MAX 100
typedef struct {
    char   nom[50];
    double latitude, longitude, altitude;   // degrés, degrés, mètres
    long   population;
} Ville;

typedef struct {
    int    n;                 // nombre de villes
    Ville  NOEUDS[MAX];
    double M[MAX][MAX];       // M[i][j] = longueur de la route i -> j, -1 si pas de route
} Reseau;

Une route bidirectionnelle se traduit par M[i][j] = M[j][i] ; une route à sens unique par une seule des deux cases.

2. Distance linéaire entre i et j

On calcule la distance à vol d'oiseau sur la sphère terrestre (formule de haversine), puis on tient compte de l'écart d'altitude.

#include <math.h>
#define R 6371000.0   // rayon terrestre en mètres
double rad(double d) { return d * M_PI / 180.0; }

double distanceLineaire(Reseau *r, int i, int j) {
    Ville a = r->NOEUDS[i], b = r->NOEUDS[j];
    double dlat = rad(b.latitude - a.latitude), dlon = rad(b.longitude - a.longitude);
    double h = sin(dlat/2)*sin(dlat/2)
             + cos(rad(a.latitude))*cos(rad(b.latitude))*sin(dlon/2)*sin(dlon/2);
    double sol = 2 * R * asin(sqrt(h));           // distance au sol
    double dz  = b.altitude - a.altitude;
    return sqrt(sol*sol + dz*dz);
}

Une réponse plus simple (distance euclidienne sur des coordonnées projetées) est en général acceptée si l'hypothèse est énoncée.

3. Longueur d'un chemin

// chemin[0..k-1] : liste des nœuds traversés ; renvoie -1 si un tronçon n'existe pas
double longueurChemin(Reseau *r, int chemin[], int k) {
    double L = 0;
    for (int p = 0; p < k - 1; p++) {
        double d = r->M[chemin[p]][chemin[p+1]];
        if (d < 0) return -1;
        L += d;
    }
    return L;
}

4. Tous les chemins de i vers j (chemins élémentaires)

Parcours en profondeur avec retour arrière ; un tableau visite empêche de repasser par une ville (sinon le nombre de chemins serait infini à cause des cycles, par exemple 0 → 1 → 0).

int chemin[MAX], visite[MAX];

void tousLesChemins(Reseau *r, int u, int j, int prof) {
    chemin[prof] = u; visite[u] = 1;
    if (u == j) {                                  // chemin complet : on l'affiche
        for (int p = 0; p <= prof; p++) printf("%d ", chemin[p]);
        printf(" (longueur %.1f)\n", longueurChemin(r, chemin, prof + 1));
    } else {
        for (int v = 0; v < r->n; v++)
            if (r->M[u][v] > 0 && !visite[v])
                tousLesChemins(r, v, j, prof + 1);
    }
    visite[u] = 0;                                 // retour arrière
}
// appel : mettre visite[] à 0 puis tousLesChemins(r, i, j, 0);

5. Plus court chemin de i vers j (Dijkstra)

Les distances sont positives : l'algorithme de Dijkstra s'applique.

double plusCourtChemin(Reseau *r, int i, int j, int pred[]) {
    double dist[MAX]; int fixe[MAX];
    for (int v = 0; v < r->n; v++) { dist[v] = INFINITY; fixe[v] = 0; pred[v] = -1; }
    dist[i] = 0;
    for (int t = 0; t < r->n; t++) {
        int u = -1;                                   // sommet non fixé le plus proche
        for (int v = 0; v < r->n; v++)
            if (!fixe[v] && (u == -1 || dist[v] < dist[u])) u = v;
        if (u == -1 || dist[u] == INFINITY) break;
        fixe[u] = 1;
        if (u == j) break;
        for (int v = 0; v < r->n; v++)                // relâchement des arcs sortants
            if (r->M[u][v] > 0 && dist[u] + r->M[u][v] < dist[v]) {
                dist[v] = dist[u] + r->M[u][v];
                pred[v] = u;
            }
    }
    return dist[j];   // INFINITY si j est inaccessible ; le chemin se lit à rebours via pred[]
}

Exemple sur la matrice de l'énoncé : de 0 vers 4 il n'y a pas de route directe ; Dijkstra donne 0 → 2 → 4, longueur 4 + 4 = 8 (contre 0 → 2 → 3 → 4 = 12). Complexité O(n²) avec la matrice.

6. Réseau enrichi

A) On remplace la simple distance par une structure « tronçon » :

typedef struct {
    int    existe;          // 0 si pas de route i -> j
    double distance;        // km
    double vitesseMax;      // km/h
    double debit;           // véhicules par seconde (valeur instantanée, mise à jour)
    int    stationService;  // 0/1
    char   nomStation[50];
} Troncon;

typedef struct {
    int     n;
    Ville   NOEUDS[MAX];
    Troncon T[MAX][MAX];
} ReseauRoutier;

B) Contraintes pour le chemin le plus rapide :

  • Le poids d'un arc n'est plus la distance mais un temps de parcours : au minimum distance / vitesseMax, augmenté selon le débit (congestion) ; il faut donc un modèle temps = f(distance, vitesse, débit).
  • Le débit est instantané : les poids changent dans le temps ; le calcul doit être refait régulièrement, ou bien utiliser un graphe dépendant du temps (le temps d'un tronçon dépend de l'heure à laquelle on y arrive).
  • Des contraintes de faisabilité s'ajoutent : autonomie du véhicule et présence de stations de service sur l'itinéraire, sens de circulation, tronçons fermés.
  • Les poids restent positifs : Dijkstra (ou A* avec la distance linéaire de la question 2 comme heuristique) reste utilisable, mais plusieurs critères (temps, distance, carburant) sont en concurrence : il faut soit les pondérer dans un coût unique, soit chercher un compromis.
Un nouveau sujet de concours chaque jour sur WhatsApp

Questions fréquentes sur ce sujet

Ce sujet est-il téléchargeable gratuitement ?
Oui. La totalité du sujet (7 pages) est consultable et téléchargeable gratuitement, sans inscription ni compte.
Le corrigé est-il inclus ?
Oui. Un corrigé proposé figure sur cette page, sous les pages du sujet : méthode de réponse et éléments attendus, rédigés par l'équipe Wadifa Info.
Quel organisme et quel grade concerne ce sujet ?
Ce sujet provient d'un concours organisé par l'École Normale Supérieure de l'Enseignement Technique de Mohammedia (ENSET). Il concerne le grade : 1ère année du cycle d'ingénieurs — filières GLSID et II-BDCC.
De quelle session s'agit-il et dans quelle langue ?
Session : session de juillet 2017. Les questions sont en français.
Où trouver d'autres sujets du même concours ?
Tous nos sujets de la même famille sont regroupés sur la page Concours de l'enseignement : /fr/modeles-concours/concours-enseignement. Les sujets y sont classés par session, du plus récent au plus ancien.

Source : archive de modèles de concours — document archivé tel que reçu ; l'avis officiel du concours fait foi.

}
Utile ? Envoyez-le à quelqu'un qui cherche
WhatsApp Facebook Telegram
📲
Installez Wadifa Info sur votre iPhone : appuyez sur le bouton Partager en bas de Safari, puis sur Sur l'écran d'accueil. Les nouveaux concours, sans passer par le navigateur.