Maths & NSI

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 nn nœuds ?

a. n+1n+1 b. log⁡2(n+1)−1\log_2(n+1) - 1 c. log⁡2(n)−1\log_2(n) - 1 d. n2n^2

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 = val

Quel 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 var

Que 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 var

b.

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 var

c.

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 var

d.

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 var

Question 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é

Corrigé réservé aux abonnés Premium.

Créez un compte gratuit : votre première correction est offerte.