Modèle de concours d'accès à l'École Normale Supérieure de l'Enseignement Technique de Mohammedia (ENSET) 2018 — Épreuve : Informatique
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) (2018), 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
- 2018
- Pages
- 15
- Langue des questions
- français
- Correction
- correction proposée disponible sur cette page
📝 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.
ECOLE NORMALE SUPÉRIEURE DE BU أساتذة التعليم 8
L'ENSEIGNEMENT | 1 لأساتدة التعليم النقني اح ee
TECHNIQUE DE MOHAMMEDIA d 3 N E T المحمدية
UNIVERSITÉ HASSAN II DE CASABLANCA 5 جامعة الحسن الثاني بالدار البيضاء
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 2018
Epreuve d’Informatique
Durée : 3 heures
Remarques importantes :
- _ Ilest obligatoire de choisir votre ordre de préférence pour les deux filières GLSID et II-BDCC en précisant
votre filière de premier choix et votre filière de deuxième choix dans le formulaire ci-dessous :
- L'épreuve se compose de deux parties :
o Partie QCM, (Notée sur 60 points)
o Partie Algorithmique et Programmation, (Notée sur 40 points)
- L'usage de la calculatrice ou de tout autre appareil électronique est interdit.
- L'utilisation du blanco est strictement interdite.
- Aucun document n’est autorisé.
- Les extraits de code fournis dans l’épreuve sont écrits en langage C ou en langage Java.
- Aucune explication supplémentaire ne sera fournie aux candidats au cours de l’examen.
- Chaque question du QCM ne peut avoir qu’une seule réponse possible parmi les quatre choix. La réponse est
à reporter dans la grille de réponses fournie (page 15) en cochant la case correspondante .
- Pour les exercices 1 et 2 :
o Les réponses aux questions doivent être rédigées dans des feuilles de rédaction.
o Les solutions algorithmiques peuvent être rédigées en utilisant un pseudo langage 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.
- Sont à rendre la page de garde (page 1), la grille de reponses (page 15) et les feuilles de rédaction.
Page 1 sur 15
wadifa-info.com نماذج المباريات من موقع وظيفة إنفو
المرسة العليا الأساتدة التعليم التقني ٍ اا يي
TECHNIQUE DE MOHAMMEDIA d EN 5 ET Sac
جامعة | لحسن الثاني با لدار البيضاء UNIVERSITÉ HASSAN II DE CASABLANCA
Partie 1- QCM (60 points)
I. Lequel des opérateurs suivants a la priorité la plus faible ?
Lequel des opérateurs suivants a une associativité de droite à gauche ? .2
L’expression 11U/22L*(3.75F-2)+3./6+.25/1.F est évaluée à : .3
A) 0.5 B) 0.25
C) 0.0 D) 0.75
Le type de l’expression 3U/2*3.14F +1./1UL est: .4
A) unsigned int B) double
C) float D) long double
La variable x est de type short, l’expression x= 30*1000+2768 est évaluée à : .5
A) 32768 B) -32767
C) -32768 D) 0
Quel affichage sera produit par l’exécution du programme suivant : .6
#include<stdio.h>
int main(){
int x = 0x10+ 010+10;
printf ("x = Ox%x", x);
return 0;
A) x.= 022 B) x =0x22
x =x22 D) Erreur de compilation 0
Quel affichage sera produit par l’exécution du programme suivant : .7
#include<stdio.h>
int main(){
int x =4, y =3*x--;
x = !5|| y++>12)printf("x=%d, y=#%d\n",x,y); )+1
else printf("y= %d, x=%d\n",y,x);
return 0;
Page 2 sur 15
نماذج المباريات من موقع وظيفة إنفو wadifa-info.com
ECOLE NORMALE SUPÉRIEURE DE La أساتذة ال a
L'ENSEIGNEMENT | 1 المدرسة العليا الاساتدة التعليم الثقتي اح
TECHNIQUE DE MOHAMMEDIA 7 المحمدية
UNIVERSITÉ HASSAN II DE CASABLANCA E N 5 E T الثاني بالدار البيضاء à ١| جامعة
A) y=13, مح B) x= 1, y=13
0 .1ح« y=10 D) ÿ=10; x=0
8. Quel affichage sera produit par l’exécution du programme suivant ?
#include<stdio.h>
int main(){
char x=2;
for(;x++;);
printf("x=%d\n",x);
A) x=0 B) X=2
0 x=l D) x=-I
9. On considère la procédure suivante :
void f(int n){
int i,a,b,c;
a=0;b=2;c=0 ;
for(i=0;i<n;i++){
c=a+b;
a=b+1;
b=c+2;
System.out.print(a + " "+b+""#+c);
Pour n=sS, l’appel de cette procédure permet d’afficher:
A) 2337 5 B). 17 3326
C) 48 78 76 D) 29 47 45
10. Soit la procédure suivante :
void f(int n) +
int i, a=0, b=2, c=1;
for (i = 0; 1 > n; i=i+2) +
if (c % 2 == 1) i--;
else c = a + b;
a = 2 * ونا
b = ع + 2;
System.out.print(a + " " + 5 + " " + ولع
Page 3 sur 15
wadifa-info.com نماذج المباريات من موقع وظيفة إنفو
ECOLE NORMALE APEMIEURE DE المدرسة:العليا لأساتذة التعليم الثقني ام
TECHNIQUE DE MOHAMMEDIA 7 E N S E T المحمدية
UNIVERSITÉ HASSAN II DE CASABLANCA جامعة | لحسن الثا تي با لدار لبيضاء
Pour n=8, le résultat affiché par la procédure est :
A) 831 B) 631
C) 1253 D) 853
11. Soit la procédure suivante :
void f(int n){
int i,j,a=0,b=0,c;
for(i=0;i<n;i++){
for(j=0;j<i;j++)
a=a+i;
b=b+a;
System.out.print(a +" "+ b);
Pour n=4, le résultat affiché par la procédure est :
A) 14 20 B) 15 22
C) 1620 D) 14 22
12. Soit la fonction suivante :
int f(int n) {
int[] T = new int[n + 2];
T[O] = T[1] = 1;
for (int 1 = 2; 1 <= n; i++) +
T[i] = 0;
for (int 3 = 0; j > و1 j++)
1]1[ += 1][[ * TE - 3 - 113
return T[n];
L’exécution de l’instruction :
for (int i = @; 1 > 6; i++)
System.out.print(f(i) + " ول("
dans la fonction principale permet d’afficher:
A) 1125 1442 B) 112716 42
C) 112615 42 D) 1226 14 44
Page 4 sur 15
wadifa-info.com نماذج المباريات من موقع وظيفة إنفو
ECOLE NORMALE SUPÉRIEURE DE La أساتذة ال ä
L'ENSEIGNEMENT | 1 المدرسة العليا لاساتذة التعليم الثقتي اح
TECHNIQUE DE MOHAMMEDIA 7 المحمدية
UNIVERSITÉ HASSAN II DE CASABLANCA E N 5 E T الثاني بالدار البيضاء : ١| جامعة
13. Soit la procédure suivante :
void f() +
int T[] = { 19, 20, -35, 35, -10, 5, -10, 20};
inta =0, b=0,n=8;
for (int 1 = 0; 1 > n; i++) +
a = a + T[il;
b=b#+(i*T[i]);
int c = رط
for (int j = 1; j > n; j++) +
b=b+a-n*T[n- ji];
if (b>c)c=b;
System.out.print(a + " "+b+""#+c);
Le résultat affiché par la procédure est :
A) 35 165 290 B) 35 168 290
C) 35 160 320 D) 45 180 340
14. Soit la fonction suivante :
int f(int T[], int n) +
int a = -1;
for (int 1 = 0; 1 > n; i++) +
int b = 0;
for (int j = ©: j > n; j++) +
int index = (i + j) 7 43
b += j * T[index];
a =Math.max(a, 7
return a;
Pour 1][ = { 1, 20, 2, 10 } et n=4, l’appel à la fonction permet de retourner :
A) 78 B) 102
C) 70 D) 72
Page 5 sur 15
wadifa-info.com نماذج المباريات من موقع وظيفة إنفو
ECOLE NORMALE SUPÉRIEURE DE 1 أساتذة ال ä
L'ENSEIGNEMENT | 1 المدرسة العليا الاساتدة التعليم الثقتي اح
TECHNIQUE DE MOHAMMEDIA 7 المحمدية
UNIVERSITÉ HASSAN II DE CASABLANCA E N 5 E L الثاني بالدار البيضاء à | جامعة
15. Soit la procédure suivante :
void f(int T[], int n, int x) {
int i;
for (i = 0; 1 > 0 - 1; i++)
if (T[i] > T[i + 1]) break;
int a = (i+1) %n, b = i;
while (a != b) +
if (T[a]l + T[b] == x)
System.out.print("A");
if (T[a] + T[b] > x) +
a=(a+1) 7 53
System.out.print("C");
} else
b=(n+b-1)%n;
System.out.print("B");
Pour T[] = { 11,15,6,8,9,10 }, موحد et x=18, l’appel à la procédure permet d’afficher:
A) ACB AC B) CACAB
C)BACBC D) CACB
16. Soit la fonction suivante :
int f(int T[], int n) +
int à و b;
for (int 1 = 0; 1 > n; i++) +
if (T[i] <= 0 || T[i] > n) continue;
a = T[i];
while (T[a - 1] != a) {
b = T[a - 1]; T[a - 1] = a; a = و
if (a <= © || a > n) break;
for (int 1 = 0; 1 > n; i++)
if (T[i] != i + 1) return i + 1;
return n + 1;
Pour T{]={ 1,2, 7, 6,9,-1,-10, 15 } et n=8, l’appel à la fonction permet de retourner :
ب 2 B) 7
C) 3 D) 5
Page 6 sur 15
wadifa-info.com نماذج المباريات من موقع وظيفة إنفو
ECOLE NORMALE SUPÉRIEURE DE ب "]] 1
L'ENSEIGNEMENT | 1 اح CR لاساتدة التعليم os
TECHNIQUE DE MOHAMMEDIA 7 المحمدية
UNIVERSITÉ HASSAN II DE CASABLANCA E N 5 E T الثاني بالدار البيضاء à ١| جامعة
17. Soit la fonction suivante :
int f(int n) +
int[] T = new int[n + 2];
T[0] = 0; T[1] = 1;
for (int i = 2: 1 <= n; i++)
T[i] = T[i - 1] + T[i - 2];
return T[n];
Pour n=7, l’appel à la fonction permet de retourner :
A) 21 B) 8
03 D) 17
18. Soit la procédure suivante :
void f(int T[], int n) {
int a =0, b = 0;
for (int k = 1; k <= زه k++) +
a = b = -1;
for (int 1 = 0; 1 <= n - k; i++) +
b = Ti];
for (int j = 1: [ > k; (++ر
if (T[i + j] > b) b = T[i + j];
if (b > a)a = b;
System.out.print( à + " "+b);
Pour T= { 10, 20, 30, 50, 10, 70, 30 } et ,حم l’appel à la procédure permet d’afficher:
A) 70 70 B) 10 10
C) 70 30 D) 50 10
19. Les variables x et y du code suivant auront respectivement les tailles :
struct str1i{
signed char à;
unsigned short b;
float c;
Page 7 sur 15
wadifa-info.com نماذج المباريات من موقع وظيفة إنفو
ECOLE NORMALE SUPÉRIEURE DE BU أساتذة التعليم à
L'ENSEIGNEMENT | 1 اح ss الميرجنةالغاياالأضاتدة التعزيم
TECHNIQUE DE MOHAMMEDIA d EN ET المحمدية
UNIVERSITÉ HASSAN II DE CASABLANCA 5 جامعة الحسن الثاني بالدار البيضاء
union str2{
signed char à;
unsigned short b;
float c;
زلا
A) 7 Octets et 4 Octets B) 8 Octets et 4 Octets
0 9 Octects et 4 Octets D) 8 Octets et 8 Octets
20. Dans une itération conditionnelle, l'invariant de boucle est :
A) une instruction à exécuter à chaque passage dans la boucle.
B) une expression booléenne vérifiée pendant toute l’éxcution de la boucle.
0 une expression constante définie avant d’entrer dans la boucle.
D) une instruction à exécuter en fin de boucle.
21. Que vaut la paire (x, y) à la fin de l’itération conditionnelle suivante :
int x=24, y=30, temp;
while(y){
temp=x; x=y; y=temp#y;
A) (3, 0) B) (24, 6)
C) (30, 6) D) (6, 0)
22. Soit f une fonction récursive et soit ع une fonction itérative équivalente à f. Laquelle des
affirmations suivantes est vraie ?
A) f est toujours meilleure que g.
B) + utilise plus de mémoire que g.
0 + utilise moins de mémoire que g.
D) g est toujours plus meilleure et simple à écrire que f.
23. Soit f une fonction récursive utilisant une récursivité terminale. Laquelle des affirmations
suivantes est vraie concernant la dérécusion de + (la version itérative équivalente à 7
A) Elle peut être implémée en utilisant une boucle.
B) Elle peut être implémentée en utilisant un ensemble d’instructions if.
0 Elle peut être implémentée par une suite d'instructions dans un bloc.
D) Elle n’est pas possible.
Page 8 sur 15
wadifa-info.com نماذج المباريات من موقع وظيفة إنفو
SUPÉ _ sel À =
FOUT L'ENSEIGNEMENT ٍ CR RE es
TECHNIQUE DE MOHAMMEDIA 7 EN 5 ET المحمدية
UNIVERSITÉ HASSAN II DE CASABLANCA جامعة | لحسن الثا تي با لدار البيضاء
24. Soit la fonction récursive f suivante où ع est une fonction non récursive qui modifie les valeurs
des parmaètres x et y :
void +) int x,int y, int n +
1+) n > © ){ 8(&x,&y); F(x,y,n-1); g(8x,8y);}
La fonction + reprsénte un exemple typique de la récursivité :
A) Imbriquée B) terminale
0) non terminale D) croisée
25. Soient les fonctions f et ع suivantes. Quelle est la valeur reoutrnée par l’appel g(F(2,1)) ?
int f( int x, int لا +
1+) x = = © )return y;
return +) x - 1, 2*y);
int )ع int x ){
if( x <= 1 ) return 1;
return 3*g( x-1 ( + )ع x-2 );
A) 43 B) 44
0 42 D) 41
26. Soit la procédure récursive suivante :
void f(int n) +
if (n > 0) +
System.out.print(n+ " ول("
f(n - 1);
f(n - 1);
pour n=4, l’appel à la procédure permet d’afficher:
A) 333 B) 432411211321
0432112113 211 11 D) 1234431
27. Soit la procédure récursive suivante :
void f(int n) +
if (n >0) +
System.out.print(n+" ول"
f(n - 1);
System.out.print(n-1+" و"
Page 9 sur 15
wadifa-info.com نماذج المباريات من موقع وظيفة إنفو
ee لأسائتة؛ التعليم التقني ٍ اا يي
المحمدية TECHNIQUE DE MOHAMMEDIA 7 EN 5 ET
جامعة | لحسن الثاني.با لدار البيضاء UNIVERSITÉ HASSAN II DE CASABLANCA
pour 04, l’appel à la procédure permet d’afficher:
A)433123 B) 123401234
D) 43210123 043211134
On insère les éléments 4, 3, 12, 7, 9 (dans cet ordre) dans un arbre binaire de recherche non .28
équilibré (dont les éléments les plus petits se trouvent à gauche et les plus grands se trouvent
à droite). Dans quel ordre vont-ils ressortir pour un affichage en préfixé?
A) 431279 B) 347912
D) 437912 971234 0
Quelle est la complexité dans le pire des cas de la recherche d'un élément dans un arbre binaire .29
de recherche équilibré de n éléments ?
A) @(n) B) © (n log n)
C) © (log n) D) © (n2)
Soit l’arbre binaire A suivant : .30
Et soit la procédure suivante :
void afficherContenuArbre(Noeud *a){
if(a){
afficherContenuArbre(a->filsGauche) ;
afficherContenuArbre(a->filsDroit) ;
printf("%d",a->contenu) ;
L’appel à cette procédure, avec le paramètre l’arbre de la figure ci-dessus, permet d’afficher :
A)927164853 B) 3782114596
D) 9271364 5 3 0921764
Page 10 sur 5
نماذج المباريات من موقع وظيفة إنفو wadifa-info.com
ECOLE NORMALE SUPÉRIEURE DE ins ال* SAS ä
L'ENSEIGNEMENT U المررسة العليا لأساتدة التعليم الثقتني اح
TECHNIQUE DE MOHAMMEDIA + المحمدية
UNIVERSITÉ HASSAN II DE CASABLANCA E N 5 2 T الثاني بالدار البيضاء à | جامعة
Partie 2 - Algorithmique et programmation ( 40 points)
Exercice 1 (20 points) :
On souhaite développer une application qui permet d’effectuer des traitements sur des images en
256 niveaux de gris ; Chaque pixel de l’image est représenté par un entier compris entre 0 et 255.
Chaque image de dimension W عر H ou W représente la largeur de l’image et H représente la hauteur
de l’image, devrait être stockée, ligne par ligne, sous forme d’un vecteur représenté par un tableau
à une seule dimension de taille W x H.
Exemple d’une image de taille W=4 et H=3 dans sa forme Matricielle :
ENTER
Structure de la même image stockée sous forme d’un vecteur :
تددح اتات
Questions :
1. Ecrire les déclarations des variables globales de l’application permettant de représenter
l’image.
2. Ecrire une fonction « initData », qui reçoit en paramètres la largeur et la hauteur de l’image,
et qui permet de créer une image en l’initialisant avec des données aléatoires.
3. Ecrire une fonction » afficherImage » qui permet d’afficher les données de l’image sous
forme matricielle.
4. Ecrire une fonction qui permet de calculer et retourner l’histogramme de l’image.
L’histogramme d’une image est une courbe représentée par un tableau d’entiers de taille 256.
Chaque élément d’indice m de l’histogramme contient la fréquence de répétition du pixel de
couleur m dans l’image. C’est-à-dire le nombre pixels de l’image ayant la couleur m.
Page 11 sur 15
نماذج المباريات من موقع وظيفة إنفو wadifa-info.com
ECOLE NORMALE SUPÉRIEURE DE RL أساتذة التغلته ä
L'ENSEIGNEMENT | Ï اح # l'es nn nus Ne
TECHNIQUE DE MOHAMMEDIA LÉ E N S FE T دية |
UNIVERSITÉ HASSAN II DE CASABLANCA جامعة الحسن الثاني بالدار البيضاء
5. Ecrire une fonction « getHistogramme », qui permet de remplacer l’image créée par une
autre image dont chaque pixel représente la moyenne des 8 pixels qui l’entourent.
6. Evaluer l’ordre de complexité algorithmique de chaque fonction de cette application.
7. Ecrire le code du programme principal qui permet de tester l’ensemble des fonctions de cette
application pour le cas d’une image de dimension W=2@ et H=10.
Exercice 2 (20 points) :
Le text mining est une technique permettant d’automatiser le traitement de gros volumes de
contenus textuels. Le texte mining peut notamment être utilisé dans le cadre des études de
marketing, de la veille, de la social intelligence, des études de satisfaction, etc.
C’est dans ce cadre qu’on se propose dans un premier temps de stocker et analyser les mots d’un
corpus de textes constituant l’ensemble des échanges des commerciaux d’une entreprise avec leurs
clients. Pour simplifier, on suppose que les documents textes du corpus sont tous exprimés en
français. On suppose aussi avoir la liste des URLs des documents du corpus permettant de les
localiser et d’y acceder en ligne.
Un premier niveau d’analyser qu’on se propose de faire, consiste à determiner la fréquence de
chaque mot par document en omettant d’analyser les mots inutiles (Articles, déterminants,
Préposition, Conjonction, etc). On suppose disposer d’une fonction de prétraitement permettant de
faire le nettoyage d’un document texte en produisant la liste des mots ramenés dans leur forme de
base. Une structure mémoire doit être définie pour le stockage des résultats de l’analyse. Pour cela,
la structure d’une table d’association associant à un ensemble de clefs (les mots) à un ensemble
correspondant de valeurs (liste de fréquences) est adoptée. Pour une meilleure efficacité, cette
structure sera implémentée par une table de hachage pour mettre en cache l’ensemeble de mots et
leurs fréquences comme l’illustre la figure 1.
Le principe d’une table de hachage consiste à calculer pour chaque clef K (mot) un entier de
hachage h(k) compris entre @ et n-1 (où n est la taille de la table). On utilise ensuite un tableau
T de taille n pour stocker les couples (clef, valeur) ayant le même entier de hachage sous forme
d’une liste simplement chainée. La valeur T[h(k) ] est l’adresse du noeud en tête de la liste des
couples ayant le même code h(k). Les listes chainées sont utilisées comme solution au problème
Page 12 sur 15
wadifa-info.com نماذج المباريات من موقع وظيفة إنفو
ECOLE NORMALE SUPÉRIEURE DE BU أساتذة التعليم a
L'ENSEIGNEMENT | 1 لأساتدة التعليم النقني اح ee
TECHNIQUE DE MOHAMMEDIA d EN 5 ET المحمدية
UNIVERSITÉ HASSAN II DE CASABLANCA جامعة الحسن الثاني بالذار البيضاء
de collision. Le nœud d’une liste est une structure composée de trois champs : Le mot, sa liste des
fréquenes (un tableau de taille m, où m est le nombre de documents du corpus).
Liste des URLs des documents 0
0 1 0 i mi
ب Application de pré- j
traitement et .
d'Analyse de ,
Ë corpus de textes |
| | CII TT Te | |
(Fichiers Textes bruts) 5
Zooms sur le Nœud contenant la paire (clé, valeur)
Table de hachage
Figure 1 : Schéma de spécification de l’application d'analyse de corpus de textes
La fonction de hachage h(k) est une fonction qui transforme la clef (le mot) en un entier 1 compris
entre @ et n-1 (l’indice dans le tableau T). Etant donné que les clefs sont des mots et pour définir
une bonne fonction de hachage, on utilise la méthode suivante :
On transforme le mot k par une valeur entière v4 calculée par :
يرت = ÿ, c;ai
Où ci est le code numérique (code ascii) du ième caractère du mot »ا et a un paramètre entier
strictement positif choisi arbitrairement sauf qu’il ne doit être une puissance de 2.
La fonction de hachage est alors définie par :
h(k) = Ur V0 n
Où n est la taille de la table choisi comme nombre premier suffisament grand.
Page 13 sur 15
wadifa-info.com نماذج المباريات من موقع وظيفة إنفو
ECOLE NORMALE SUPÉRIEURE DE _. أسانثة”إل .
L'ENSEIGNEMENT | 1 اح ss الميرجنةالغاياالأضاتدة التعزيم
TECHNIQUE DE MOHAMMEDIA d ENSET المحمدية
UNIVERSITÉ HASSAN II DE CASABLANCA جامعة الحسن الثاني بالدار البيضاء
Questions :
1. Donner les declarations nécessaires pour contruire la structure de la table de hachage. On
supposera que le nombre de documents du corpus noté m est constant.
2. Soit di le ième document du corpus connu par son URL. Donner le jeu des fonctions
(méthodes) nécessaire pour extraire les mots de di et les placer avec leurs fréquences dans la
table T. On supposera que T est une variable static déjà déclarée et on utilisera la fonction de
pré-traitement dont le prototype est :
char** preTraitement(char* url, int *nbMots) ; //langage C
String[] preTraitement(String url ) ; // langage Java
3. Ecrire la fonction qui calcule le code de hachage d’un mot k.
4. Ecrire la fonction de construction d’un nouveau nœud (constructeur) pour un mot ا extrait du
document di. Les fréquences d’un mot عا pour les autres documents sont initialisées à la valeur
5. Ecrire la fonction qui ajoute un mot k à la table 1. La fonction doit mettre à jour la fréquence
si le mot Kk est déjà placé dans 1. Les nouveaux nœuds sont toujours ajoutés en tête.
6. Ecrire la fonction qui permet de traiter l’extration et le placement dans la table T de tous les
documents du corpus.
7. Ecrire la fonction qui permet de rechercher la liste des mots les plus fréquents dans chaque
document.
Page 14 sur 15
نماذج المباريات من موقع وظيفة إنفو wadifa-info.com
»» | - يت CR MERE التترل لكاي
Concours d'accès en 1è"° année des Cycles d'Ingénieurs 61510 et II-BDCC
Numéro de l’examen : Lo | Signature :
Grille de réponses pour la partie QCM
" Cocher, avec stylo à encre, la case correspondante à la bonne
réponse.
" Réponse juste : 2 pts
"Réponse fausse : Opt
ل[ ا ا
لا )17 | ا || | | [
En, 117) ا نا
]ا ا [| ١ لقا | | | | [|
Es ا | || nn | | | |
En, لا ,)1 ]ا | | | | [|
En, ان ,11 انا ان 1117
اا ا En ا
لا | |[ ]ا اق | | | | [|
Es, En || | |
]ا ا [| | En | | | | [|
نا هن تاكن 777) En 1117
CNRS RER
En, 1117) En ا | | |
ا 0 اا لق
لا |[ [ |[ ] اق || | | |
Page 15 sur 15
نماذج المباريات من موقع وظيفة إنفو 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 2018. Durée : 3 heures, sans calculatrice ni documents. Deux parties : un QCM de 30 questions (60 points ; +2 par bonne réponse, 0 pour une mauvaise) et une partie algorithmique et programmation (40 points, deux exercices). Les extraits de code sont en C ou en Java. Voici une correction proposée.
💡 Méthode : une mauvaise réponse vaut 0 (pas de point négatif) : ne laissez aucune case vide. Pour les codes à dérouler, tenez un tableau des variables tour par tour ; c'est la seule méthode fiable sans machine.
Partie 1 — QCM (60 points)
- A) ||. Ordre de priorité en C : & > ^ > | > && > || ; le OU logique est le plus faible des quatre.
- D) <<=. Les opérateurs d'affectation (=, +=, <<=…) s'associent de droite à gauche ; la virgule, << et && s'associent de gauche à droite.
- D) 0.75. 11U/22L est une division entière : 0 ; 0 × (3.75F−2) = 0.0 ; 3./6 = 0.5 (double) ; .25/1.F = 0.25. Total : 0.75.
- B) double. 3U/2 = 1 (unsigned) ; × 3.14F → float ; 1./1UL → double (1. est un double) ; float + double → double.
- C) −32768. 30*1000+2768 = 32768, qui dépasse le maximum d'un short (32767) ; en complément à deux sur 16 bits, 32768 est converti en −32768 (comportement de toutes les machines usuelles).
- B) x = 0x22. 0x10 = 16 (hexadécimal), 010 = 8 (octal), 10 = 10 : x = 34 = 0x22 ; le format « 0x%x » affiche donc
x = 0x22. - A) y=13, x=0. y = 3*x-- = 12 puis x = 3. Dans le if, = a la plus faible priorité : x = (!5 || y++>12). !5 vaut 0, on évalue donc y++>12 : 12>12 est faux et y devient 13. x reçoit 0, la condition est fausse : on passe dans le else qui affiche « y= 13, x=0 ».
- C) x = 1. La boucle s'arrête quand
x++vaut 0 : x monte jusqu'à 127, passe à −128 (char signé), remonte jusqu'à 0 ; à ce test la valeur 0 arrête la boucle mais l'incrément a lieu quand même : x = 1. - D) 29 47 45. (a, b, c) après chaque tour : (3, 4, 2), (5, 9, 7), (10, 16, 14), (17, 29, 27), (29, 47, 45).
- B) 6 3 1. c = 1 est impair et n'est jamais modifié (on passe toujours dans
i--) ; i avance donc de +1 par tour (8 tours). a = 2b et b = c+2 = 3 : à la fin a = 6, b = 3, c = 1. - A) 14 20. À l'étape i, a augmente de i×i : a = 0, 1, 5, 14 ; b cumule a : 0+1+5+14 = 20.
- A) 1 1 2 5 14 42. T[i] = Σ T[j]·T[i−j−1] : c'est la récurrence des nombres de Catalan (1, 1, 2, 5, 14, 42).
- A) 35 165 290. a = somme des T[i] = 35 ; b initial = Σ i·T[i] = 165, puis on calcule les « sommes pondérées par rotation » b = b + a − n·T[n−j] : −5, 110, 105, 220, −25, 290, 165 (dernier b = 165), dont le maximum c = 290.
- D) 72. Pour chaque rotation i, b = Σ j·T[(i+j)%4] : i=0 : 0·1+1·20+2·2+3·10 = 54 ; i=1 : 0·20+1·2+2·10+3·1 = 25 ; i=2 : 0·2+1·10+2·1+3·20 = 72 ; i=3 : 0·10+1·1+2·20+3·2 = 47. Maximum : 72.
- D) C A C B. Le tableau est trié puis tourné : la rupture est en i=1 (15 > 6). a = 2 (plus petit, 6), b = 1 (plus grand, 15). 6+15 = 21 > 18 → b = 0 ; 6+11 = 17 < 18 → a = 3, « C » ; 8+11 = 19 → b = 5 ; 8+10 = 18 → « A », puis ce n'est pas < 18 donc b = 4 ; 8+9 = 17 → « C », a = 4 = b : sortie, puis « B ». Affichage : CACB.
- C) 3. La fonction place chaque valeur v ∈ [1, n] à la case v−1 (tri par permutation cyclique) puis renvoie le plus petit entier positif absent. Valeurs présentes dans [1, 8] : 1, 2, 6, 7 ; le premier manquant est 3.
- C) 13. Suite de Fibonacci avec T[0] = 0, T[1] = 1 : 0, 1, 1, 2, 3, 5, 8, 13 → T[7] = 13.
- Réponse probable : B) 10 10. Pour chaque taille de fenêtre k, la boucle calcule a = maximum, sur toutes les fenêtres de k cases consécutives, du minimum de la fenêtre ; b garde le minimum de la dernière fenêtre. Tel qu'il est écrit, l'affichage est dans la boucle sur k et produit 7 paires collées : « 70 30 », « 30 30 », « 20 10 », puis « 10 10 » quatre fois. Aucune option ne reproduit cette suite ; la valeur finale (k = n : minimum du tableau entier) est « 10 10 », ce qui correspond à B si l'on considère que l'affichage était prévu après la boucle. Si l'on ne retient que la première paire affichée, ce serait C.
- B) 8 octets et 4 octets. Structure : char (1) + 1 octet de remplissage pour aligner le short sur 2 + short (2) + float (4) = 8. Union : taille du plus grand membre (float) = 4.
- B) L'invariant est une propriété (expression booléenne) vraie avant la boucle et après chaque itération, donc pendant toute l'exécution de la boucle.
- D) (6, 0). C'est l'algorithme d'Euclide : (24, 30) → (30, 24) → (24, 6) → (6, 0). x contient le PGCD 6.
- B) f utilise plus de mémoire que g. Chaque appel récursif empile un contexte (paramètres, variables locales, adresse de retour) sur la pile d'exécution.
- A) une boucle. Une récursivité terminale (l'appel récursif est la dernière action) se transforme directement en boucle while, sans pile.
- C) non terminale. Après l'appel récursif f(x, y, n−1), il reste une instruction à exécuter (g(&x, &y)) : l'appel n'est pas la dernière action.
- A) 43. f(2,1) = f(1,2) = f(0,4) = 4. Puis g(0) = g(1) = 1, g(2) = 3·1+1 = 4, g(3) = 3·4+1 = 13, g(4) = 3·13+4 = 43.
- C) 4 3 2 1 1 2 1 1 3 2 1 1 2 1 1. f(n) affiche n puis appelle deux fois f(n−1) : f(1) = « 1 », f(2) = « 2 1 1 », f(3) = « 3 2 1 1 2 1 1 », f(4) = « 4 » + f(3) + f(3) (15 nombres).
- D) 4 3 2 1 0 1 2 3. À la descente on affiche 4, 3, 2, 1 ; à la remontée chaque appel affiche n−1 : 0 (pour n=1), 1, 2, 3.
- A) 4 3 12 7 9. Arbre obtenu : racine 4, fils gauche 3, fils droit 12 ; 7 à gauche de 12 ; 9 à droite de 7. Préfixe (racine, gauche, droite) : 4 3 12 7 9.
- C) Θ(log n). Un arbre équilibré a une hauteur en log n, et la recherche suit un seul chemin racine–feuille.
- C) 9 2 1 7 6 4 5 8 3. La procédure affiche gauche, droite, puis la racine : parcours postfixe. Sous-arbre 7 : 9 2 1 7 ; sous-arbre 8 : 6 4 5 8 ; puis 3.
Partie 2 — Algorithmique et programmation (40 points)
Exercice 1 (20 points) — image en niveaux de gris
1. Variables globales
#include <stdio.h> #include <stdlib.h> #include <time.h> int *image = NULL; // vecteur de W*H pixels, stocké ligne par ligne int W = 0, H = 0; // largeur et hauteur // le pixel (ligne l, colonne c) est image[l*W + c]
2. initData
void initData(int largeur, int hauteur) {
W = largeur; H = hauteur;
free(image);
image = (int*) malloc(W * H * sizeof(int));
for (int p = 0; p < W * H; p++)
image[p] = rand() % 256; // valeur aléatoire entre 0 et 255
}
3. afficherImage
void afficherImage() {
for (int l = 0; l < H; l++) {
for (int c = 0; c < W; c++)
printf("%4d", image[l * W + c]);
printf("\n");
}
}
4. Histogramme
int* histogramme() {
int *h = (int*) calloc(256, sizeof(int)); // 256 cases à 0
for (int p = 0; p < W * H; p++)
h[image[p]]++;
return h;
}
Sur l'exemple 4×3 de l'énoncé : h[12] = 2, h[3] = 2, h[11] = 2, h[33] = h[55] = h[16] = h[20] = h[1] = h[0] = 1.
5. Remplacement par la moyenne des 8 voisins (fonction nommée « getHistogramme » dans l'énoncé)
Il faut travailler sur une copie : sinon les pixels déjà modifiés fausseraient la moyenne de leurs voisins. Aux bords, on fait la moyenne des voisins qui existent (3 dans un coin, 5 sur un bord).
void getHistogramme() { // nom imposé par l'énoncé ; il s'agit d'un lissage
int *copie = (int*) malloc(W * H * sizeof(int));
for (int p = 0; p < W * H; p++) copie[p] = image[p];
for (int l = 0; l < H; l++)
for (int c = 0; c < W; c++) {
int somme = 0, nb = 0;
for (int dl = -1; dl <= 1; dl++)
for (int dc = -1; dc <= 1; dc++) {
int l2 = l + dl, c2 = c + dc;
if ((dl != 0 || dc != 0) && l2 >= 0 && l2 < H && c2 >= 0 && c2 < W) {
somme += copie[l2 * W + c2]; nb++;
}
}
image[l * W + c] = somme / nb;
}
free(copie);
}
6. Complexités (N = W×H pixels)
| Fonction | Complexité | Justification |
|---|---|---|
| initData | O(W·H) | un tirage par pixel |
| afficherImage | O(W·H) | un affichage par pixel |
| histogramme | O(W·H) | un passage ; l'initialisation des 256 cases est une constante |
| getHistogramme (lissage) | O(W·H) | 8 voisins par pixel, soit 8·N opérations |
7. Programme principal
int main() {
srand(time(NULL));
initData(20, 10);
printf("Image initiale :\n"); afficherImage();
int *h = histogramme();
for (int m = 0; m < 256; m++)
if (h[m] > 0) printf("niveau %d : %d pixel(s)\n", m, h[m]);
free(h);
getHistogramme();
printf("Image lissee :\n"); afficherImage();
free(image);
return 0;
}
Exercice 2 (20 points) — table de hachage pour le text mining
1. Déclarations
#define M 100 // nombre de documents du corpus (constant)
#define N 10007 // taille de la table : nombre premier assez grand
#define A 31 // paramètre a : entier > 0, pas une puissance de 2
typedef struct Noeud {
char *mot; // la clé
int freq[M]; // freq[i] = nombre d'occurrences du mot dans le document i
struct Noeud *suivant; // chaînage des collisions
} Noeud;
static Noeud *T[N]; // T[h] = tête de la liste des mots de code h (NULL au départ)
char *URLS[M]; // liste des URLs des documents
2. Jeu de fonctions nécessaires
unsigned long hachage(char *k): calcule h(k) (question 3) ;Noeud* creerNoeud(char *k, int i): crée un nœud pour le mot k trouvé dans di (question 4) ;void ajouterMot(char *k, int i): insère ou met à jour (question 5) ;void traiterDocument(int i): appelle la fonction de prétraitement puis ajoute chaque mot :
void traiterDocument(int i) {
int nbMots;
char **mots = preTraitement(URLS[i], &nbMots);
for (int p = 0; p < nbMots; p++)
ajouterMot(mots[p], i);
}
3. Code de hachage
vk = Σ ci·ai, puis h(k) = vk mod n. On calcule les puissances au fur et à mesure et on réduit modulo n à chaque étape pour éviter le dépassement de capacité (le résultat est le même, car (x·y) mod n = ((x mod n)·(y mod n)) mod n).
unsigned long hachage(char *k) {
unsigned long v = 0, puiss = 1;
for (int i = 0; k[i] != '\0'; i++) {
v = (v + (unsigned char)k[i] * puiss) % N;
puiss = (puiss * A) % N;
}
return v; // compris entre 0 et N-1
}
4. Constructeur d'un nœud
Noeud* creerNoeud(char *k, int i) {
Noeud *nd = (Noeud*) malloc(sizeof(Noeud));
nd->mot = strdup(k); // copie du mot
for (int d = 0; d < M; d++) nd->freq[d] = 0;
nd->freq[i] = 1; // première occurrence dans d_i
nd->suivant = NULL;
return nd;
}
5. Ajout d'un mot (mise à jour ou insertion en tête)
void ajouterMot(char *k, int i) {
unsigned long h = hachage(k);
for (Noeud *p = T[h]; p != NULL; p = p->suivant)
if (strcmp(p->mot, k) == 0) { p->freq[i]++; return; } // déjà présent
Noeud *nd = creerNoeud(k, i);
nd->suivant = T[h]; // insertion en tête
T[h] = nd;
}
6. Traitement de tout le corpus
void traiterCorpus() {
for (int h = 0; h < N; h++) T[h] = NULL;
for (int i = 0; i < M; i++)
traiterDocument(i);
}
7. Mots les plus fréquents de chaque document
Pour chaque document, un premier passage sur toute la table trouve la fréquence maximale, un second affiche tous les mots qui l'atteignent (il peut y avoir des ex æquo, d'où une « liste »).
void motsLesPlusFrequents() {
for (int i = 0; i < M; i++) {
int max = 0;
for (int h = 0; h < N; h++)
for (Noeud *p = T[h]; p; p = p->suivant)
if (p->freq[i] > max) max = p->freq[i];
printf("Document %d (frequence max %d) :", i, max);
for (int h = 0; h < N; h++)
for (Noeud *p = T[h]; p; p = p->suivant)
if (max > 0 && p->freq[i] == max) printf(" %s", p->mot);
printf("\n");
}
}
Coût : O(m·(n + nombre de mots distincts)). Pour obtenir les k mots les plus fréquents, on garderait un tas-min de taille k par document.
Questions fréquentes sur ce sujet
Ce sujet est-il téléchargeable gratuitement ?
Le corrigé est-il inclus ?
Quel organisme et quel grade concerne ce sujet ?
De quelle session s'agit-il et dans quelle langue ?
Où trouver d'autres sujets du même concours ?
Vous préparez ce concours ?
Modèles similaires
Source : archive de modèles de concours — document archivé tel que reçu ; l'avis officiel du concours fait foi.
}
