Exercice 3 - Partie C · Bac Numérique et Sciences Informatiques Asie 2024 (jour 2)
Thème : Récursivité · Tiré du sujet Jour 2 (2024)
Énoncé
EXERCICE 3 (8 points)
Cet exercice porte sur les bases de données relationnelles, les requêtes SQL et la programmation en Python.
L'énoncé de cet exercice utilise des mots-clés du langage SQL suivants: SELECT, FROM, WHERE, JOIN... ON, UPDATE... SET, INSERT INTO... VALUES..., COUNT, ORDER BY.
La clause ORDER BY suivie d'un attribut permet de trier les résultats par ordre croissant de l'attribut précisé. SELECT COUNT(*) renvoie le nombre de lignes d'une requête.
Amélie souhaite organiser sa collection de CD. Elle a commencé par enregistrer toutes les informations sur un fichier CSV mais elle trouve que la recherche d'informations est longue et fastidieuse. Elle repense à son cours sur les bases de données et elle se dit qu'elle doit pouvoir utiliser une base de données relationnelle pour organiser sa collection.
Partie A
Dans cette partie on utilise une seule table.
Voici un extrait de la table Chanson.
Partie C
Dans cette partie, on utilise Python.
Amélie a remarqué que son professeur ne parle jamais d'ordre alphabétique mais d'ordre lexicographique lorsqu'il fait une requête avec ORDER BY.
Elle a compris qu'il s'agissait de l'ordre du dictionnaire mais elle se demande comment elle pourrait elle-même écrire une fonction ordre_lex(mot1, mot2) de comparaison entre deux chaînes de caractères en utilisant l'ordre lexicographique. La fonction ordre_lex(mot1, mot2) prend en arguments deux chaînes de caractères et renvoie un booléen. Une rapide recherche lui permet de trouver le résultat suivant:
Lorsque l'on compare deux chaînes de caractères suivant l'ordre lexicographique, on commence par comparer les deux premiers caractères de chacune des deux chaînes, puis en cas d'égalité on s'intéresse au second, et ainsi de suite. Le classement est donc le même que celui d'un dictionnaire. Si lors de ce procédé on dépasse la longueur d'une seule des deux chaînes, elle est considérée plus petite que l'autre. Lorsqu'on dépasse la longueur des deux chaînes au même moment, elles sont nécessairement égales.
Amélie commence par écrire quelques assertions que sa fonction devra vérifier.
12.
Compléter les assertions suivantes:
assert ordre_lex("", "a") == True
assert ordre_lex("b", "a") ==
assert ordre_lex("aaa", "aaba") ==
On suppose que les chaînes de caractères mot1 et mot2 ne sont composées que des lettres de l'alphabet, en minuscule, et la comparaison entre deux lettres peut se faire avec les opérateurs classiques == et <.
Par exemple:
>>> "" < "a"
True
>>> "b" == "a"
False
Enfin, le slice mot1[1:] renvoie la chaîne de caractère de mot1 privée de son premier caractère.
Par exemple:
>>> mot1 = "abcde"
>>> mot2 = mot1[1:]
>>> mot2
"bcde"
13.
Recopier et compléter la fonction récursive ordre_lex ci-dessous qui prend pour paramètre deux chaînes de caractères mot1 et mot2 et qui renvoie True si mot1 précède mot2 dans l'ordre lexicographique.
def ordre_lex(mot1, mot2):
if mot1 == "":
return True
elif mot2 == "":
return False
else:
c1 = mot1[0]
c2 = mot2[0]
if c1 < c2: return
elif c1 > c2: return
else: return
14.
Proposer une version itérative de la fonction ordre_lex.

Corrigé
Corrigé proposé par AprenAI (non officiel)
12. Compléter l'assertion : assert ordre_lex("b", "a") ==
Réponse : False
12. Compléter l'assertion : assert ordre_lex("aaa", "aaba") ==
Réponse : True
13. Ligne 10 de ordre_lex : if c1 < c2: return ...
Réponse : True
Les réponses des 3 questions restantes et l’explication pas à pas sont réservées aux membres Premium. Premium
Résous-le ici : correction automatique, indices et corrigé détaillé.
‹ Exercice 2 - Récursivité · Asie jour 1 - Remplacement 2025 · Exercice 3 - Récursivité · Asie 2022 (jour 1) ›