Concours Avenir — 2025 — NSI
Avenir — NSI 2025
Sujet
Présentation de l'épreuve
Cette épreuve constitue la partie Numérique et Sciences Informatiques de l'épreuve « Sciences » du Concours Avenir (admission post-bac en école d'ingénieurs), édition 2025. Comme en 2023 et 2024, le profil Violet répond à 30 des 40 questions proposées, et le profil Jaune répond à 15 questions au choix parmi les 40 pour chacune de ses deux spécialités. Ci-dessous, le « Sujet A » NSI dans son intégralité (40 questions).
Barème : chaque réponse exacte rapporte 3 points, chaque réponse fausse fait perdre 1 point, une question non traitée ne rapporte ni ne retire de point. Coefficient 4, durée 1h.
Questions
Question 1. Lors de l'exécution d'une fonction récursive :
a. les appels récursifs sont exécutés simultanément b. les appels récursifs forment une « file d'exécution » c. les appels récursifs forment une « pile d'exécution » d. le premier appel est exécuté et renvoie une valeur, puis le second, et ainsi de suite jusqu'au cas d'arrêt
Question 2. Qu'affiche le code Python suivant ?
def calcule(n, p):
assert n >= p, "p doit être strictement plus petit que n."
if n == p:
return 1
else:
return p * calcule(n - 1, p)
print(calcule(12, 2))a. 1 b. 144 c. Rien, car une erreur d'assertion est levée d. 1024
Question 3. On a enregistré 10 000 entiers dans une pile p1. Quel code stocke dans la variable val le deuxième entier qui y a été empilé ?
a.
for i in range(9998):
val = depiler(p1)
print(val)b.
for i in range(9999):
val = depiler(p1)
print(val)c.
for i in range(9997):
depiler(p1)
val = depiler(p1)
print(val)d.
depiler(p1)
val = depiler(p1)
print(val)Question 4. Quelle affirmation est correcte ?
a. Une pile est une structure de données primitive ou élémentaire b. Dans une pile, un élément est directement accessible via sa position c. Les documents envoyés à une imprimante via le spouleur peuvent être structurés par une file d. On ne peut pas ajouter d'élément à une pile
Question 5. Laquelle des propositions suivantes est vraie ?
a. Une liste chaînée est une structure de données hiérarchique b. Une liste chaînée est une structure de données récursive c. Une liste chaînée est identique à une file d. Une liste chaînée est une structure de données arborescente
Question 6. Soit le code Python suivant :
T1 = [randint(1, 100) for i in range(100)]
T2 = T1.sort()Après exécution, quelle affirmation n'est PAS validée ?
a. T2 contient une copie de T1 triée par ordre croissant
b. T2 contient None
c. T1 contient un tableau de 100 entiers
d. T1 est trié par ordre croissant
Question 7. Soit Tab = [[i + j for i in range(10)] for j in range(20)]. Que renvoie Tab[10:20][5:][3][:5] ?
a. un tableau contenant tous les éléments de Tab sauf ceux d'indice 10 et 20
b. []
c. [18, 19, 20, 21, 22, 23]
d. [18, 19, 20, 21, 22]
Question 8. Que fait le code Python suivant ?
t1 = [1, 3, 5, 4, 5]
t2 = [0, 3, 4, -9, -6, 7, 8, 9, 10, 11]
t = t1 + t2[2:8]
k = 0
while k >= 0:
k = t[k]
print("k = ", k)a. il entre dans une boucle infinie
b. il s'arrête avec un message d'erreur
c. il affiche k = -9
d. il affiche k = -6
Question 9. Quelle affirmation n'est PAS vérifiée ?
a. Le système range les éléments d'un tableau dans des cases mémoire contiguës b. Le système range toujours les éléments d'une liste chaînée dans des cases mémoire contiguës c. Une liste chaînée est une séquence d'éléments, chacun contenant une valeur et une référence vers un éventuel élément suivant d. L'accès à un élément d'un tableau se fait en temps constant
Question 10. Dans le dictionnaire d1 = {i: str((2*i+1) % 5) for i in range(100) if i % 4 == 0} :
a. il y a 24 éléments
b. les clés sont des entiers impairs multiples de 5
c. d1[80] vaut '1'
d. aucune valeur n'est égale à '0'
Question 11. Dans ce même dictionnaire d1, le nombre de valeurs distinctes est :
a. 3 b. 4 c. 2 d. 5
Question 12. En programmation orientée objet en Python, dans la définition d'une classe, la méthode __init__ :
a. est obligatoire
b. est exécutée à chaque instanciation d'un objet
c. ne prend que le seul paramètre self
d. doit être définie avant toutes les autres méthodes de la classe
Question 13. On exécute le programme Python suivant :
class Pneu:
def __init__(self, l=205, h=60, r="D", d=16):
self.largeur = l
self.hauteur = h
self.structure = r
self.diametre = d
def getAttributs(self):
return self.largeur, self.hauteur, self.structure, self.diametre
def setLargeur(self, l):
self.largeur = l
def setHauteur(self, h):
self.hauteur = h
def setStructure(self, r):
self.structure = r
def setDiametre(self, d):
self.largeur = d
p1 = Pneu(205, 55, "D", 16)Quelle proposition est vraie ?
a. p1 contient le tuple (205, 60, "D", 16)
b. p1 contient le tuple (205, 55, "D", 16)
c. p1 contient le dictionnaire {"largeur": 205, "hauteur": 60, "structure": "D", "diametre": 16}
d. p1 contient une référence à un objet de la classe Pneu
Question 14. La classe Pneu étant celle définie ci-dessus, on exécute :
p2 = Pneu()
p3 = p2
p3.setHauteur(55)
print([p2.getAttributs()])Quel est l'affichage obtenu ?
a. [(205, 55, 'D', 16)]
b. (205, 60, 'D', 16)
c. [205, 60, 'D', 16]
d. [205, 55, 'D', 16]
Question 15. Toujours avec la classe Pneu, on exécute :
p4 = Pneu(205, 75, "R", 20)
p4.prix = 79.9
print((p4.getAttributs()[0], p4.getAttributs()[1],
p4.getAttributs()[2], p4.getAttributs()[3], p4.prix))a. le message d'erreur AttributeError: 'Pneu' object has no attribute 'prix' est affiché
b. l'attribut prix est partagé par tous les objets de la classe Pneu
c. l'affichage produit est le tuple (205, 75, 'R', 20, 79.9)
d. l'affichage produit est le tuple (205, 75, 'R', 20, None)
Question 16. Le concept de la programmation orientée objet :
a. a été introduit au début des années 1960 b. a été introduit au début des années 1970 c. a été initié par Guido van Rossum d. a été initié par James Gosling et Patrick Naughton
Question 17. Dans un réseau local, une machine M1 a pour adresse IP 192.168.2.57 et le masque de sous-réseau est 255.255.255.0.
a. la machine M2 d'adresse IP 192.168.3.58 appartient au même réseau local que M1
b. 192.168.2.57 n'est pas une adresse attribuable à une autre machine M3 de ce réseau
c. aucune machine de ce réseau ne peut avoir 192.168.2.256 pour adresse IP
d. l'adresse de ce réseau local s'obtient en appliquant l'opérateur ET binaire entre l'adresse IP de M1 et le masque de sous-réseau
Question 18. Quelle proposition est vraie ?
a. la notation 195.83.224.96/20 signifie que cette adresse appartient à un sous-réseau de 20 machines
b. cette notation signifie que l'adresse appartient à un réseau subdivisé en 20 sous-réseaux
c. cette notation signifie qu'il ne reste plus que 20 adresses IP disponibles dans le sous-réseau
d. le masque de réseau associé ne contient que des 1 sur les 20 premiers bits de poids fort
Question 19. Combien de machines peut-on adresser dans le sous-réseau 185.100.230.0/20 ?
a. 1022 b. 1024 c. 4094 d. 4096
Question 20. Une fonction récursive terminale est :
a. une fonction récursive qui se termine dans tous les cas b. une fonction récursive dont l'appel récursif constitue la toute dernière opération effectuée c. une fonction récursive qui n'a pas besoin de cas d'arrêt d. une fonction qui n'utilise pas de variables locales
Question 21. Dans un arbre binaire de profondeur 10 (racine à la hauteur 0), quel est le nombre maximal de nœuds ?
a. 2047 b. 1024 c. 2048 d. 1023
Question 22. La racine d'un arbre binaire ayant une hauteur égale à 0, quelle est la hauteur d'un arbre binaire parfait comportant nœuds ?
a. b. c. d.
Question 23. On considère l'arbre binaire suivant :
1
/ \
8 14
/ \ / \
25 32 45 46
\
51,65
(le nœud 32 a pour enfants 51 à gauche et 65 à droite)
Cet arbre correspond à :
a. un arbre binaire de recherche b. un arbre binaire parfait c. le résultat d'un parcours profondeur préfixe est 25, 51, 65, 32, 8, 45, 46, 14, 1 d. le résultat d'un parcours profondeur infixe est 25, 8, 51, 32, 65, 1, 45, 14, 46
Question 24. La classe Node suivante sert à implémenter un arbre binaire en Python :
class Node:
def __init__(self, val):
self.left = None
self.right = None
self.value = valQuel code Python implémente correctement l'arbre binaire ci-dessous à l'aide de la classe Node ?
1
/ \
8 14
/ \ / \
25 32 45 46
a.
arb = Node(1)
arb.left = Node(8)
arb.left.left = Node(25)
arb.left.right = Node(32)
arb.right = Node(14)
arb.right.left = Node(45)
arb.right.right = Node(46)b. arb = Node(1, Node(8, Node(25), Node(32)), Node(14, Node(45), Node(46)))
c.
arb = Node()
arb.value = 1
arb.left.value = Node(8)
arb.left.left.value = Node(25)
arb.left.right.value = Node(32)
arb.right.value = Node(14)
arb.right.left.value = Node(45)
arb.right.right.value = Node(46)d. arb = (1, (8, (25, None, None), (32, None, None)), (14, (45, None, None), (46, None, None)))
Question 25. On a implémenté en Python un graphe par la matrice d'adjacence suivante :
M1 = [[0, 1, 0, 1], [1, 0, 1, 0], [0, 1, 0, 1], [1, 0, 1, 0]]Combien d'arêtes ce graphe possède-t-il ?
a. 8 b. 5 c. 4 d. 16
Question 26. La fonction mystere ci-dessous prend en paramètre une matrice m d'adjacence d'un graphe non orienté :
def mystere(m):
var = 0
for i in range(len(m)):
for j in range(i + 1, len(m)):
if m[i][j] == 1:
var += 1
return varQue renvoie-t-elle pour M2 = [[0, 1, 1, 1], [1, 0, 1, 0], [1, 1, 0, 1], [1, 0, 1, 0]] ?
a. 8 b. 5 c. 4 d. 16
Question 27. Pourquoi préfère-t-on souvent un dictionnaire d'adjacence à une matrice d'adjacence pour représenter un graphe ?
a. parce qu'il est plus facile de parcourir le graphe avec un dictionnaire d'adjacence b. parce que le dictionnaire d'adjacence permet de mieux visualiser le graphe c. parce qu'une matrice permet de connaître plus facilement le nombre de sommets du graphe d. parce qu'une matrice occupe trop de place en mémoire pour un graphe avec peu d'arêtes
Question 28. Quelle fonction renvoie le dictionnaire d'adjacence du graphe dont m est la matrice d'adjacence ?
a.
def adj1(m):
var = {}
for i in range(len(m)):
l = []
for j in range(len(m)):
if m[i][j] == 1:
l.append(j)
var[i] = l
return varb.
def adj2(m):
var = {}
for i in range(len(m)):
l = []
for j in range(i + i, len(m)):
if m[i][j] == 1:
l.append(j)
var[i] = l
return varc.
def adj3(m):
var = {}
for i in range(len(m)):
for j in range(i + 1, len(m)):
l = []
if m[i][j] == 1:
l.append(j)
var[i] = l
return vard.
def adj4(m):
var = {}
for i in range(len(m)):
l = []
for j in range(len(m)):
if m[i][j] == 1:
l.append(j)
var[i] = l
return varQuestion 29. Qui est traditionnellement considéré comme le fondateur de la théorie des graphes ?
a. Alan Turing b. John von Neumann c. Leonhard Euler d. Kurt Gödel
Question 30. Quel est le principal avantage des systèmes sur puce (SoC) par rapport à des systèmes traditionnels ?
a. Des performances inférieures b. La nécessité de plusieurs composants externes c. Une portabilité limitée d. Une consommation d'énergie réduite et une taille compacte
Question 31. On exécute le code Python suivant :
def melange(g, d):
r = []
i = j = 0
while i < len(g) and j < len(d):
if g[i] < d[j]:
r.append(g[i])
i = i + 1
else:
r.append(d[j])
j = j + 1
r = r + g[i:]
r = r + d[j:]
return r
print(melange([2, 5, 8, 10, 15], [0, 1, 10, 15, 19, 20]))Quel est l'affichage obtenu ?
a. [0, 1, 2, 5, 8, 10, 15, 19, 20]
b. [0, 1, 2, 5, 8, 10, 10, 15, 15, 19, 20]
c. [2, 5, 8, 10, 15, 0, 1, 10, 15, 19, 20]
d. [2, 5, 8, 10, 15, 0, 1, 10, 19, 20]
Question 32. Que fait la commande Linux kill -9 760 ?
a. elle force l'arrêt du processus dont le PID est 760 b. elle redémarre le processus dont le PID est 760, après une pause de 9 quantums c. elle arrête le processus dont le PID est 760 après 9 cycles d'exécution d. elle met le processus dont le PID est 760 en pause pendant 9 millisecondes
Question 33. Quelle instruction SQL sert à créer une contrainte d'unicité sur un attribut ?
a. CONSTRAINT UNIQUE
b. UNIQUE
c. UNIQUE KEY
d. CHECK UNIQUE
Question 34. Quelle est la différence entre les clauses WHERE et HAVING en SQL ?
a. Aucune, elles sont interchangeables
b. HAVING filtre avant l'agrégation, WHERE après
c. WHERE est toujours suivi d'une expression booléenne, contrairement à HAVING
d. WHERE filtre avant l'agrégation, HAVING après
Question 35. Voici le schéma relationnel d'une base de données :
Achete(#idFilm, #idUtil, aPaye)
Utilisateur(idUtil, nom, prenom, tel)
Film(idFilm, titre, #idGenre, prix)
Genre(idGenre, nom)
Comment récupérer la liste des films avec leur genre associé ?
a. SELECT titre, nom FROM Film;
b. SELECT titre, nom FROM Film JOIN Genre;
c. SELECT titre, Genre.nom FROM Film JOIN Genre ON Film.idGenre = Genre.idGenre;
d. SELECT Film.nom, Genre.titre FROM Film, Genre;
Question 36. Avec le même schéma relationnel, quelle requête affiche le nom et le prénom des utilisateurs ayant acheté un film à plus de 15 € ?
a. SELECT nom, prenom FROM Utilisateur WHERE prix > 15;
b. SELECT nom, prenom FROM Utilisateur INNER JOIN Achete ON Utilisateur.idUtil = Achete.idUtil INNER JOIN Film ON Achete.idFilm = Film.idFilm WHERE Film.prix > 15;
c. SELECT nom, prenom FROM Utilisateur WHERE Film.prix > 15;
d. SELECT nom, prenom FROM Film INNER JOIN Utilisateur ON prix > 15;
Question 37. Pour obtenir, pour chaque film, la somme des prix payés par les utilisateurs, on utilise :
a. SELECT Film.titre, SUM(Film.prix) FROM Achete JOIN Film ON Achete.idFilm = Film.idFilm GROUP BY Film.titre;
b. SELECT titre, SUM(prix) FROM Film;
c. SELECT titre, prix FROM Achete;
d. SELECT titre, prix FROM Film NATURAL JOIN Achete;
Question 38. Un graphe est représenté par la figure suivante : les sommets E, F, D, B, C, A sont reliés ainsi — A-B, A-C, B-D, B-E, C-F, E-F, E-D. Quel est le degré du sommet A dans ce graphe ?
a. 2 b. 1 c. 4 d. 3
Question 39. On considère le code Python suivant :
def parcours(G, S, l=None):
if l is None:
l = []
l.append(S)
for voisin in G[S]:
if voisin not in l:
parcours(G, voisin, l)
return l
G1 = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F'],
'D': ['B', 'E'],
'E': ['B', 'F'],
'F': ['C', 'E'],
}Que se passe-t-il si on exécute parcours(G1, 'X') ?
a. la fonction renvoie une liste vide
b. la fonction renvoie None
c. la fonction lève une erreur KeyError
d. la fonction boucle indéfiniment
Question 40. Grace Hopper est considérée comme une pionnière du domaine des langages de programmation :
a. parce qu'elle a posé les bases de l'intelligence artificielle b. parce qu'elle a inventé le langage Fortran c. parce qu'elle a inventé le langage assembleur d. parce qu'elle a conçu le premier compilateur, traduisant du code source en langage machine
Corrigé
Créez un compte gratuit : votre première correction est offerte.