Concours GLSID IIBDCC 1920 PDF
Concours GLSID IIBDCC 1920 PDF
Concours GLSID IIBDCC 1920 PDF
L'ENSEIGNEMENT
TECHNIQUE DE MOHAMMEDIA
ENSET ﺍﻟﻤحﻤﺪيﺔ
UNIVERSITÉ HASSAN II DE CASABLANCA ﺟﺎﻣﻌﺔ ﺍﻟحﺴﻦ ﺍﻟﺜﺎﻧﻲ ﺑﺎﻟﺪﺍﺭ ﺍﻟﺒﻴﻀﺎﺀ
Remarques importantes :
- Il est 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 :
Signature : …………………………………………..
Page 1 sur 14
QCM :
Pour cette partie, il ne peut y avoir qu’une seule réponse possible. La réponse est à
reporter dans la grille de réponse fournie en page 14, en cochant la case correspondante :
On adopte les notations suivantes : x désigne une personne, F(x) représente l’assertion
« x est mon ami » et P(x) représente l’assertion « x est parfait ».
3. Soit le prédicat R(x, y, t) qui représente l'affirmation « une personne x peut rencontrer
une personne y au moment t ». Lequel des énoncés ci-dessous exprime le mieux le sens
de la formule ∀𝑥 ∃𝑦 ∃𝑡(¬𝑅(𝑥, 𝑦, 𝑡))?
4. Parmi les propositions suivantes, laquelle est la formule logique la plus appropriée pour
représenter la déclaration : "Les ornements en or et en argent sont précieux" ? Les
notations suivantes sont utilisées : O(x): x est un ornement en Or, A(x): x est un ornement
en Argent et P (x): x est Précieux.
Page 2 sur 14
5. Soit G(x) un prédicat qui indique que x est un graphe. Soit C(x) un prédicat qui indique
que x est connecté. Laquelle des expressions logiques ne représente pas l'énoncé suivant
: "Tous les graphes ne sont pas connectés"?
B) ∃𝑥 (𝐺(𝑥) ∧ ¬C(𝑥))
C) ∀𝑥(𝐺(𝑥) → ¬C(𝑥))
short a = -2;
unsigned short b = -a;
int x = -2;
unsigned y = -x;
if(a<(unsigned short)b)
printf("a < b\t") ;
else
printf("a >= b\t") ;
if((unsigned)x<y)
printf("et x < y\n") ;
else
printf("et x >= y\n") ;
Page 3 sur 14
8. Soit l’extrait de code suivant :
int a=256;
char *x= (char *)&a;
*x++ = 1;
*x =x[0]++;
printf("a=%d\n", a);
C) 18 D) 19
int main(){
int a[][3] = {1, 2, 3, 4, 5, 6}, (*ptr)[3] = a;
printf("%d,%d", (*ptr)[1], (*ptr)[2]);
ptr++;
printf(",%d,%d\n", (*ptr)[1], (*ptr)[2]);
return 0 ;
}
C) 2, 3, 3, 4 D) Erreur d’exécution
Page 4 sur 14
11. Soit le code suivant :
int main()
{
int i, *p;
p = (int *) malloc(4 * sizeof(int));
for (i=0; i<4; *(p+i)=i, i++);
printf("(%d", *p++);
printf(", %d", (*p)++);
printf(", %d", *p);
printf(", %d", *++p);
printf(", %d)\n",++*p);
return 0;
}
12. Lequel des algorithmes de tri suivants n’est naturellement pas un algorithme « diviser
pour régner »?
13. Soit A un arbre binaire de recherche d’entiers. Quel est le parcours qui fait ressortir les
entiers de A dans un ordre croissant ?
14. Pour gérer les appels à des fonctions récursives, la structure de données utilisée est :
A) File B) Pile
Page 5 sur 14
15. En l'absence de condition de sortie dans une fonction récursive, l’appel à une telle
fonction entraîne :
A) Erreur de compilation B) Erreur logique
16. Pour deux solutions algorithmiques récursive et itérative équivalentes, laquelle des
affirmations suivantes est vraie?
void f2(int a)
{
if(a>0) f2(a-1);
printf("%d ",a);
}
C) 4 D) 5 4 3 2 1 0
void f3(int a)
{
printf("%d ",a);
if(a>0) f3(a-1);
printf("%d ",a);
}
C) 5 4 3 2 1 0 5 D) 5 4
Page 6 sur 14
19. On considère le programme suivant :
C) 1 D) 2
C) 2 3 5 6 7 8 9 11 33 20 D) 2 3 5 6 7 8 9 11 20 33
Page 7 sur 14
21. Soit fil une variable structurée de type File qui représente la structure de données file
d’attente. la variable fil est composée des champs First et Last qui représentent
respectivement l’adresse du premier élément et l’adresse du dernier élement de la file.
L’initialisation des champs First et Last à NULL d’une file juste après sa création, la
met à l’état vide. On dispose aussi des deux fonctions suivantes pour manipuler une file
d’attente :
C) 011235 D) 012345
C) 9 D) 8
Page 8 sur 14
23. On considère le programme suivant :
int main(){
int a=5, b=5;
f8(a,&b);
printf("%d %d",a,b);
return 0;
}
C) 5 6 D) 5 7
int main()
{
int T[]={1,2,3,4,5};
int i;
f9(T,5);
for(i=0;i<5;i++)
printf("%d ",T[i]);
return 0;
}
Page 9 sur 14
25. On considère le programme suivant :
int main() {
int T[]={5,6,7,8} ;
int n=4, k=2, a;
a=f10(T,n,k);
printf("%d",a);
return 0;
}
C) 5 D) 6
Ecrire un programme qui permet d’extraire de T le sous-tableau U dont la somme est la plus
proche à 0. Il peut y avoir plusieurs sous-tableaux de ce type, il suffit dans ce cas d'en générer
un seul.
Exemples :
Entrée : T = {-1,3,4, -7,12}, Sortie U= {3, 4, -7}
Entrée : T = {-1,1,4,-3,3,7}, Sortie U= { -1,1} ou bien U = {-3,3}
Entrée : T = {-2,5,7,9,1}, Sortie U= {1}
Page 10 sur 14
Exercice 2 (17 points) :
On souhaite écrire un algorithme qui permet de minimiser une fonction mathématique
quelconque à plusieurs variables en utilisant l’algorithme de descente du gradient. Dans notre
problème nous considérons l’exemple de la fonction : 𝑓(𝒙, 𝒚) = 𝟑𝒙𝟑 + 𝟕𝒚𝟐 − 𝟖
Etape 2. Calculer les gradients représentés par les dérivées partielles Dx et Dy de la fonction
f, respectivement par rapport à x et y.
Etape 4. Répéter les étapes 2 et 3 jusqu’à ce que l’on trouve les valeurs de x et y qui
minimisent la fonction. Chaque itération correspond à une période d’optimisation
appelée « Epoch ».
Questions :
1. Ecrire les deux fonctions qui permettent de retourner les dérivées partielles de la fonction
f par rapport à x et y.
2. Ecrire le code de l’algorithme de la descente du gradient qui permet de minimiser la
fonction f.
3. Pour des fonctions plus complexes présentant des minimums locaux en plus du minimum
global, l’algorithme de descente du gradient présenté précédemment risque de s’arrêter
dans un minimum local au lieu de continuer à chercher le vrai minimum global. Quelle
est la solution que vous proposez pour éviter ce problème ?
Page 11 sur 14
Exercice 3 (18 points) :
On souhaite mettre en place une application qui simule la gestion de la liste des applications
ouvertes sous un système d’exploitation (Windows, Linux, …). Plus précisément, on souhaite
gérer le comportement obtenu par l’appui sur la combinaison de touches ALT + TAB qui
permet de changer l’application courante (application active) et l’ordre des applications les plus
récemment utilisées. Pour se faire, on propose le modèle suivant :
La tâche principale à programmer consiste à mettre à jour le contenu du tableau listeApps puis
à imprimer son contenu lorsque l'utilisateur appuie sur la touche Alt + la touche Tab répétée
exactement k fois (k>0). Ainsi, après avoir appuyé sur les touches Alt + (k fois) Tab, le
pointeur d'ouverture de l'application se déplace depuis l’index 0 vers la droite, en fonction du
nombre d’appuis k. L'application sur laquelle l’appui se termine, se déplace vers l’index 0 pour
devenir ainsi l’application active. Toutes les applications situées avant l’index k devront être
décalées pour qu’elles soient moins récemment utilisées que la nouvelle application active dont
l’identifiant prendra l’index 0.
Exemples :
Entrée : listeApps [ ] = {3, 5, 2, 4, 1,7,6}, K = 3 (ALT + 3*TAB)
Sortie : 4, 3, 5, 2, 1, 7, 6
Entrée : listeApps [ ] = {5, 7, 2, 3, 4, 1, 6, 8}, K = 10 (ALT +10*TAB)
Sortie : 2, 5, 7, 3, 4, 1, 6, 8
Page 12 sur 14
Questions :
1. Ecrire une fonction nommée imprimerListeApps qui affiche la liste des identifiants des
applications ouvertes dans l’ordre de la plus récemment jusqu’au moins récemment
utilisé.
3. Ou souhaite pour chaque application ouverte, compter le nombre de fois qu’elle a été
rendue active et cumuler le temps total pendant lequel elle l’a été.
a. Proposer sous la forme d’une représentation graphique, une structure de données qui
permet de faire ces calculs.
b. Ecrire une fonction nommée fermerAppCourante qui met à jour et imprime la liste
des applications ouvertes suite à la fermeture de l’application courante,
Page 13 sur 14
Concours d'accès en 1ère année des Cycles d'Ingénieurs GLSID et II-BDCC
Session Juillet 2019
Epreuve d’informatique
Nom :
Prénom :
Epreuve d’informatique
Grille de réponses pour la partie QCM
A B C D E A B C D E
1 14
2 15
3 16
4 17
5 18
6 19
7 20
8 21
9 22
10 23
11 24
12 25
13
Page 14 sur 14