% This LaTeX document needs to be compiled with XeLaTeX. \documentclass[10pt]{article} \usepackage[utf8]{inputenc} \usepackage{ucharclasses} \usepackage{amsmath} \usepackage{amsfonts} \usepackage{amssymb} \usepackage[version=4]{mhchem} \usepackage{stmaryrd} \usepackage{graphicx} \usepackage[export]{adjustbox} \graphicspath{ {./images/} } \usepackage{caption} \usepackage[fallback]{xeCJK} \usepackage{polyglossia} \usepackage{fontspec} \IfFontExistsTF{Noto Serif CJK SC} {\setCJKmainfont{Noto Serif CJK SC}} {\IfFontExistsTF{STSong} {\setCJKmainfont{STSong}} {\IfFontExistsTF{Droid Sans Fallback} {\setCJKmainfont{Droid Sans Fallback}} {\setCJKmainfont{SimSun}} }} \setmainlanguage{french} \setotherlanguages{german} \IfFontExistsTF{CMU Serif} {\newfontfamily\lgcfont{CMU Serif}} {\IfFontExistsTF{DejaVu Sans} {\newfontfamily\lgcfont{DejaVu Sans}} {\newfontfamily\lgcfont{Georgia}} } \setDefaultTransitions{\lgcfont}{} \title{CONCEPTION D'UNE APPLICATION SPORTIVE "RUGBY MANAGER" } \author{} \date{} \begin{document} \maketitle \captionsetup{singlelinecheck=false} \section*{EPREUVE SPECIFIQUE - FILIERE TSI} \section*{INFORMATIQUE} \section*{Jeudi 4 mai : 14 h-17 h} N.B. : le candidat attachera la plus grande importance à la clarté, à la précision et à la concision de la rédaction. Si un candidat est amené à repérer ce qui peut lui sembler être une erreur d'énoncé, il le signalera sur sa copie et devra poursuivre sa composition en expliquant les raisons des initiatives qu'il a été amené à prendre. \section*{Les calculatrices sont interdites} L'épreuve est composée de deux dossiers : \begin{itemize} \item un premier dossier de 16 pages contenant le sujet (pages numérotées de $1 / 16$ à $14 / 16$ ) et les annexes (pages numérotées de $15 / 16$ à $16 / 16$ ); \item un second dossier de 8 pages constituant le document réponse ( DR ) à rendre en fin d'épreuve (pages numérotées de $\mathrm{DR}-1 / 8$ à $\mathrm{DR}-8 / 8$ ). \end{itemize} Les consignes permettant de compléter le document réponse (DR) sont données à la page suivante. Seul le document réponse est à rendre.\\ Chaque partie ou sous-partie de ce sujet est indépendante. \section*{Remarques générales} Les réponses aux questions sont à rédiger sur le document réponse (DR) et ne doivent pas dépasser les dimensions des cadres proposés. Si la réponse attendue est spécifique à un langage, la réponse doit être proposée en langage Python. Les structures algorithmiques doivent être clairement identifiables par des indentations visibles ou par des barres droites entre le début et la fin de la structure comme proposé ci-dessous: \begin{verbatim} Si (Condition) Alors | Instructions Sinon | Instructions Fin Si \end{verbatim} \section*{Conception d'une application sportive "RUGBY MANAGER"} L'application «Rugby Manager» est un jeu destiné aux smartphones et aux tablettes. Il permet de créer une équipe, de l'entraîner et de jouer avec elle. Il est possible de jouer seul (contre l'intelligence artificielle du logiciel) ou en mode multijoueurs. Enfin, l'application est utilisable en ligne ou en Bluetooth.\\ L'objectif est de programmer un certain nombre de fonctions qui seront utilisées pour créer cette application. \section*{I Étude des modes jeu et statistiques} \section*{I. 1 Partie graphique du mode jeu} Dans cette sous-partie, nous souhaitons tout d'abord représenter la partie graphique du mode jeu, c'est-à-dire: \begin{itemize} \item un terrain; \item deux équipes; \item un ballon. \end{itemize} On souhaite afficher l'image du terrain de rugby suivant, enregistrée dans le répertoire "C:/CCP" sous le nom stade.bmp. \begin{figure}[h] \begin{center} \includegraphics[width=\textwidth]{2025_08_29_a2d16d98c4018ce303d4g-03} \captionsetup{labelformat=empty} \caption{Figure 1 - Image du terrain de rugby} \end{center} \end{figure} \section*{Objectif} Les compétences évaluées dans cette partie portent sur le traitement des images. Il s'agit d'utiliser la bibliothèque d'images décrite en Annexe 1 pour compléter ou modifier des fonctions d'affichage de l'image du terrain et des pixels des maillots des joueurs. Ensuite, il s'agit de mettre en place un "floutage" d'une image pour la mettre en arrière-plan dans le mode statistique. Q1. En utilisant l'Annexe 1, page 15, compléter le programme du document réponse qui permet: \begin{itemize} \item de se placer dans le dossier où se trouve l'image; \item d'ouvrir l'image et de la stocker dans une variable image\_terrain; \item d'afficher l'image en arrière-plan. \end{itemize} Pour la suite et notamment pour l'affichage des joueurs à l'échelle du terrain, il est nécessaire de connaître les dimensions de l'image. Q2. Donner les instructions qui permettent de faire cette opération et de stocker le résultat dans deux variables dim\_long et dim\_larg respectivement dimension en longueur et en largeur. Afficher ensuite le résultat sous la forme ("longueur $\times$ largeur"). On propose tout d'abord de représenter les joueurs par 4 pixels disposés en carré ayant la couleur du maillot de l'équipe. Le choix des couleurs des maillots doit être laissé libre à l'utilisateur. Cependant, le vert correspondant à la couleur du terrain et le blanc correspondant à la couleur du ballon et des lignes ne pourront pas être utilisés.\\ Précisons que les lignes font 2 pixels de large, sur une image qui en fait 620 . Il est donc facile de se positionner au centre du terrain. Les lignes numérotées 40 , en pointillés, sont situées à 50 pixels de la ligne centrale. Q3. Créer une fonction coul( ) qui permet de connaître la couleur exacte du terrain et de la stocker dans une variable coul\_ter. L'argument d'entrée de la fonction est la variable image, la sortie est la variable coul\_ter. Attention: on choisira comme pixel de référence un des pixels le plus proche du centre du terrain. Q4. Quel est le type de la variable coul\_ter ?\\ Sur combien de bits mémoire est codé un pixel ? Q5. Créer une fonction maillot( ) qui utilise la fonction précédente et qui renvoie la liste des couleurs interdites pour les maillots. \section*{I. 2 Partie graphique du mode statistique} \section*{Objectif \\ Dans cette sous-partie, nous nous intéressons au traitement d'image évolué : la mise en place du "floutage" d'une image pour l'arrière-plan du mode statistique.} On s'intéresse donc ici à un autre mode du jeu vidéo: le mode statistique. Dans ce mode, une image de jeu floue va être placée en arrière-plan. Nous allons étudier les fonctions permettant d'effectuer ce floutage.\\ Pour réaliser un floutage par moyenne simple sur la matrice de pixels, il faut lui appliquer un filtre, que l'on appelle également un masque. Afin de comprendre ce principe, nous proposons d'étudier un exemple de filtrage. On considère les matrices \[ A=\left(\begin{array}{lll} 1 / 9 & 1 / 9 & 1 / 9 \\ 1 / 9 & 1 / 9 & 1 / 9 \\ 1 / 9 & 1 / 9 & 1 / 9 \end{array}\right) \] et \[ B=\left(\begin{array}{cccccc} 5 & 6 & 7 & 8 & 9 & 10 \\ -5 & -6 & -7 & -8 & -9 & -10 \\ 1 & 1 & 1 & 1 & 1 & 1 \\ 2 & 2 & 3 & 3 & 4 & 4 \\ 0 & 0 & 1 & 3 & 3 & 3 \end{array}\right) . \] Pour chaque élément $b_{i j}$ de $B$, on considère la matrice carrée de taille 3 , notée $B_{i j}$ qui l'entoure et on calcule le produit de $B_{i j}$ par $A$ (multiplication classique $A^{*} B_{i j}$ ). $A$ est appelé noyau. On note $c_{i j}$ la somme des coefficients de la matrice produit obtenue (on pourra utiliser la fonction np.sum sur une liste).\\ Si $b_{i j}$ est un élément en bordure de $B$, on posera $c_{i j}=b_{i j}$. On forme ainsi une nouvelle matrice $C$ dont les éléments intérieurs sont les $c_{i j}$ (et les éléments au bord sont les $b_{i j}$ ): \begin{itemize} \item $c_{i j}=$ élément se trouvant ligne i et colonne j; \item $B_{i j}$ la matrice carrée dont l'élément central est $b_{i j}$. \end{itemize} Ainsi, par exemple \[ \begin{aligned} c_{22} & =\operatorname{sum}\left(B_{22} * A\right)=\operatorname{sum}\left(\operatorname{dot}\left(\left(\begin{array}{ccc} 5 & 6 & 7 \\ -5 & -6 & -7 \\ 1 & 1 & 1 \end{array}\right),\left(\begin{array}{ccc} 1 / 9 & 1 / 9 & 1 / 9 \\ 1 / 9 & 1 / 9 & 1 / 9 \\ 1 / 9 & 1 / 9 & 1 / 9 \end{array}\right)\right)\right) \\ & =\operatorname{sum}\left(\begin{array}{ccc} 2 & 2 & 2 \\ -2 & -2 & -2 \\ 1 / 3 & 1 / 3 & 1 / 3 \end{array}\right)=1, \end{aligned} \] dot et sum étant des fonctions du module numpy, avec $\operatorname{dot}(B, A)$ qui effectue le produit matriciel $B * A$ (s'écrit aussi $B \cdot \operatorname{dot}(A)$ ) et sum qui somme tous les termes d'une matrice. On dit que l'on a filtré la matrice $B$ par la matrice $A$, ou que l'on a appliqué le masque (filtre) $A$ sur l'image $B$. Q6. Compléter la fonction filtrer1(filtreA, $m a t B$ ) qui prend en argument une matrice carrée filtreA de dimension taille $\times$ taille et une matrice quelconque matB de dimensions supérieures et qui renvoie la matrice $C$. Vous pouvez utiliser les fonctions du module numpy que vous jugez judicieuses sans préciser l'importation. On souhaite maintenant appliquer le filtreA à une matrice de pixels $B$, c'est-à-dire aux 3 tableaux $B[:,:, 0], B[:,:, 1], B[:,:, 2]$ et enregistrer le résultat dans une matrice $C$ de même format que $B$. Q7. Créer une fonction filtrer(filtreA, $m a t B$ ) qui prend en argument une matrice carrée filtreA de dimension taille $\times$ taille et un tableau numpy matB de dimensions $n \times p \times 3$ et qui renvoie le tableau $C$ de dimensions identiques. Vous pourrez calculer successivement $C[:,:, 0], C[:,:, 1], C[:,:, 2]$ à l'aide d'une boucle. Ces matrices réalisent un floutage par moyenne simple (coefficients tous égaux, de somme 1). Plus la taille du filtre est grande, plus le flou sera fort. On peut améliorer cette technique en utilisant un flou gaussien. Son principe est de calculer une moyenne pondérée en accordant plus de poids au pixel central et en diminuant le poids des pixels périphériques. La matrice servant de filtre est calculée selon le modèle d'une courbe de Gauss (courbe en cloche) à 2 dimensions. La fonction de Laplace-Gauss à une dimension est $G(x)=\frac{1}{\sigma \sqrt{2 \pi}} e^{-\frac{x^{2}}{2 \sigma^{2}}}$ et à deux dimensions est $G(x, y)=\frac{1}{\sigma \sqrt{2 \pi}} e^{-\frac{x^{2}+y^{2}}{2 \sigma^{2}}}$. Plus l'écart-type $\sigma$ est grand, plus l'image sera floutée. En pratique, $\sigma$ et la taille (impaire) du filtre étant fixés, on construit la matrice filtre terme à terme, chaque élément de la matrice ayant pour expression $k \cdot e^{-\frac{x^{2}+y^{2}}{2 \sigma^{2}}}$, où $x$ et $y$ sont les nombres de lignes et de colonnes qui séparent cet élément du centre et $k$ un coefficient constant, tel que la somme de tous les éléments (de type float) ainsi calculés soit égale à 1 . Par exemple, pour $\sigma=0,9$ et taille $=5$, le filtre est proche de: \[ \frac{1}{1002}\left(\begin{array}{ccccc} 1 & 9 & 17 & 9 & 1 \\ 9 & 58 & 107 & 58 & 9 \\ 17 & 107 & 198 & 107 & 17 \\ 9 & 58 & 107 & 58 & 9 \\ 1 & 9 & 17 & 9 & 1 \end{array}\right) . \] Q8. Compléter la fonction matriceFlouGaussien(taille,sigma) qui prend en argument la taille (impaire) de la matrice de floutage, sigma l'écart-type de déviation standard et qui retourne la matrice filtre correspondant au niveau gaussien. Encore une fois, vous pouvez utiliser les fonctions du module numpy que vous jugez judicieuses sans préciser l'importation. Q9. Écrire ensuite la fonction FloutageGaussien(tabPix,taille,sigma) qui utilise la fonction matriceFlouGaussien(taille,sigma) et filtrer(filtreA,matB) et qui renvoie la matrice tabPix qui a été floutée grâce au filtre défini dans la fonction matriceFlouGaussien. \section*{I. 3 Fonctionnalités du mode statistique} \section*{Objectif} Dans cette sous-partie, nous nous intéressons à certaines fonctions du mode statistique. Nous proposons tout d'abord de mettre en œuvre les fonctions permettant de tracer les statistiques de chaque joueur à l'aide d'histogrammes, puis d'écrire la fonction donnant les performances moyennes, minimales et maximales. Nous allons ici étudier un des tableaux qui sera utilisé dans ce mode. La matrice resultat permet de stocker l'ensemble des données sur chaque joueur de l'équipe. Les lignes correspondent aux numéros des joueurs et les colonnes sont respectivement: le nombre d'essais, le nombre de passes réussies, le nombre de plaquages réussis, le nombre de plaquages manqués, le nombre de franchissements de ligne, le nombre de kilomètres parcourus. \begin{center} \begin{tabular}{|c||c|c|c|c|c|c|} \hline \begin{tabular}{c} Numéro du \\ joueur \\ \end{tabular} & \begin{tabular}{c} nombre \\ d'essais \\ \end{tabular} & \begin{tabular}{c} nombre de \\ passes \\ réussies \\ \end{tabular} & \begin{tabular}{c} nombre de \\ plaquages \\ réussis \\ \end{tabular} & \begin{tabular}{c} nombre de \\ plaquages \\ manqués \\ \end{tabular} & \begin{tabular}{c} nombre de \\ franchissements \\ de ligne \\ \end{tabular} & \begin{tabular}{c} nombre de \\ kilomètres \\ parcourus \\ \end{tabular} \\ \hline 1 & & & & & & \\ \hline 2 & & & & & & \\ \hline $\ldots$ & & & & & & \\ \hline \end{tabular} \end{center} On souhaite représenter un histogramme de l'équipe pour chacune des colonnes de resultat. Il s'agit d'une représentation graphique présentant en abscisse le numéro de maillot du joueur et en ordonnée la donnée en question.\\ Nous allons étudier ici l'histogramme pour le nombre de plaquages réussis, soit la $4{ }^{\mathrm{e}}$ colonne de resultat. L'affichage de l'histogramme ne sera pas étudié ici. Q10. Écrire les instructions qui, à partir de la matrice resultat, construisent la liste des abscisses $x$ de l'histogramme et la liste des ordonnées y\_plaR.\\ On souhaite maintenant créer l'histogramme. Pour cela, il faut créer simultanément deux listes à partir de $x$ et $y \_p l a R$ : \begin{itemize} \item une liste barre, qui sera constituée, pour $i \in[0, \operatorname{len}(x)[$, des valeurs allant de 0 à la valeur y\_plaR[i] incluse avec des pas de 0,1 ; \item une liste abscisse, qui, pour $i \in[0, \operatorname{len}(x)[$, sera composée d'autant d'éléments que barre, tous égaux à $x[i]$. \end{itemize} L'instruction plot(abscisse,barre,'k.',markersize=10) donnera alors l'histogramme présenté sur la figure 2: \begin{figure}[h] \begin{center} \includegraphics[width=\textwidth]{2025_08_29_a2d16d98c4018ce303d4g-08} \captionsetup{labelformat=empty} \caption{Figure 2 - Histogramme} \end{center} \end{figure} Q11. Écrire les instructions qui, à partir de la matrice des listes $x$ et $y \_p l a R$, construisent les listes barre et abscisse. D'autres statistiques disponibles permettent de connaître le minimum, le maximum et la moyenne par match sur l'ensemble de la saison d'un joueur, sur la donnée qui nous intéresse. L'obtention de la liste de valeurs concernant une donnée en particulier n'est pas étudiée ici, seule la fonction qui renvoie le minimum, le maximum et la moyenne d'une liste de valeurs (float) est étudiée. Par exemple, pour 6 matchs, la liste des valeurs des plaquages réussis pour le joueur 15 est: valeurs $=[20,10,15,22,24]$. Q12. Écrire une fonction minMaxMoy(valeurs), qui prend en entrée une liste de valeurs flottantes et qui renvoie la liste contenant le minimum des valeurs de la liste, le maximum et la moyenne. \section*{II Traitement du transfert des joueurs} \section*{Objectif} Cette partie du sujet s'intéresse au traitement de la base de données des joueurs.\\ Dans le but de créer un jeu en ligne, il est nécessaire de prendre en compte les transferts de joueurs pour la création de sa propre équipe. Pour cela, on souhaite utiliser une base de données. L'objectif est d'analyser la structure de la base de données proposée et de réaliser les requêtes permettant de créer sa propre équipe. On possède une base de données rugby.db3 avec 2 tables: Joueurs et Clubs.\\ On souhaite modéliser les transferts des joueurs de club en club comme les transferts réels. L'application donne un certain budget à son utilisateur et en fonction de ses victoires, il pourra acheter des joueurs de plus en plus chers. Nous allons étudier comment les tables de joueurs et leurs caractéristiques sont associées aux clubs et au salaire des joueurs. Le Salaire annuel sera composé de sommes en euros, alors que celle des Budget des Clubs sera en millions d'euros. Ces attributs représentent leur valeur financière. \begin{center} \begin{tabular}{|l|l|l|l|l|l|l|l|} \hline \multicolumn{8}{|c|}{Joueurs} \\ \hline Nom & Poste & Age (an) & Poids (kg) & Taille (cm) & VMA (km/h) & Id\_Club & Salaire euros \\ \hline Murel Thibault & Pilier Gauche & 18 & 105 & 187 & 13,6 & 102 & 16000 \\ \hline Nkang Jesus & Pilier Droit & 27 & 115 & 176 & 12,9 & 10 & 35000 \\ \hline Yala Olive & Troisième ligne Aile & 17 & 90 & 182 & 14,5 & 45 & 12000 \\ \hline Ramis Thomas & Arrière & 20 & 80 & 178 & 18,5 & 31 & 40000 \\ \hline & & & & & & & \\ \hline & & & & & & & \\ \hline \end{tabular} \end{center} \begin{center} \begin{tabular}{|c|c|c|} \hline \multicolumn{3}{|c|}{Clubs} \\ \hline Id\_Club & Nom & Budget total \\ \hline\hline 1 & Stade Français & 50 \\ \hline 2 & Ulster & 165 \\ \hline & & \\ \hline & & \\ \hline 31 & Stade Toulousain & 150 \\ \hline 45 & Racing Club de Toulon & 540 \\ \hline\hline & & \\ \hline & & \\ \hline & & \\ \hline \end{tabular} \end{center} Q13. Donner la requête qui permet de trouver les joueurs de plus de 23 ans qui ont une Vitesse Maximale Aérobie (notée VMA) supérieure à $13 \mathrm{~km} / \mathrm{h}$. Q14. Donner la requête qui permet de connaître les clubs dont les joueurs ont un salaire supérieur à 30000 euros.\\ Puis, déterminer la requête qui permet de connaître le nombre de joueurs étant au Stade Toulousain et jouant au poste de Talonneur. Q15. Donner la requête qui permet de calculer le rapport entre la masse salariale des joueurs d'un club (somme des salaires de tous les joueurs) et le budget total du club. Le résultat sera donné en pourcentage du budget total du club. \section*{III Évaluation des performances de l'équipe} \section*{Objectif \\ L'étape suivante permet de construire son équipe à partir de la liste des joueurs. Pour cela, il est important de pouvoir classer ses joueurs suivant ses préférences: le but est de trier la liste des joueurs issus de notre base de données de la manière la plus efficace pour l'utilisateur. \\ Dans cette partie, on s'intéresse donc au tri de la liste des joueurs de notre équipe en fonction de leurs performances.} Suite au transfert des joueurs dans notre équipe, nous avons créé une table Equipe avec les joueurs suivants: \begin{center} \begin{tabular}{|l|l|l|l|l|l|} \hline \multicolumn{6}{|c|}{Equipe} \\ \hline Joueur & Poste & Age (an) & Poids (kg) & Taille (cm) & VMA (km/h) \\ \hline Morellon Thibault & Pilier Gauche & 18 & 105 & 187 & 13,6 \\ \hline Nkeno Jules & Pilier Droit & 27 & 115 & 176 & 12,9 \\ \hline Yolozo Olivier & Troisième ligne Aile & 17 & 90 & 182 & 14,5 \\ \hline Ramis Thomas & Arrière & 20 & 80 & 178 & 18,5 \\ \hline Mechand Julien & Talonneur & 20 & 105 & 181 & 13,6 \\ \hline Cazo Cyril & Deuxième ligne & 20 & 115 & 197 & 12,9 \\ \hline Blue Richie & Deuxième ligne & 26 & 112 & 206 & 15,5 \\ \hline Diverge Martin & Troisième ligne Aile & 20 & 108 & 193 & 18,5 \\ \hline Dusaut Thierry & Troisième ligne Centre & 33 & 100 & 188 & 13,6 \\ \hline Michal Pierre & Demi de mêlée/Demi d'ouverture & 27 & 115 & 176 & 12,9 \\ \hline Dupont Antoine & Demi de mêlée & 18 & 70 & 174 & 14,5 \\ \hline Choux Jonathan & Demi d'ouverture & 30 & 92 & 188 & 18,5 \\ \hline Robot Jamie & Trois quart Centre & 25 & 104 & 193 & 14,9 \\ \hline Totana Wesley & Trois quart Centre & 27 & 93 & 182 & 18,5 \\ \hline Facke Gael & Trois quart Centre & 21 & 90 & 190 & 17,5 \\ \hline Dupond Alex & Trois quart Aile & 25 & 104 & 198 & 18,5 \\ \hline Wagon Anthony & Trois quart Aile & 21 & 92 & 188 & 18,5 \\ \hline Cours Vincent & Trois quart Aile & 34 & 80 & 178 & 18,5 \\ \hline \end{tabular} \end{center} Les instructions suivantes permettent d'afficher le tableau de l'équipe sous Python et de le stocker dans la variable monequipe. \begin{verbatim} import sqlite3 # Import des commandes permettant de manipuler la base de donnees basesql = u"rugby.s3db" # Base de donnees initiale cnx = sqlite3.connect(basesql ) curseur = cnx.cursor () requete = "SELECT * FROM Equipe" curseur.execute(requete) monequipe = curseur.fetchall() print (monequipe) \end{verbatim} Q16. Préciser le type de la variable monequipe. Q17. Corriger les 2 erreurs de l'algorithme de tri suivant ainsi que l'appel de la fonction afin d'afficher les joueurs dans l'ordre de leur rapidité (rayer la ligne qui vous semble erronée et corriger à coté). La liste en entrée de tri\_l est une liste de la forme [[joueur1, poste1, age1, poids1, taille1, VMA1], [joueur2, poste2, age2, poids2, taille2, VMA2], ...] et le paramètre critère correspond à l'indice du critère qui doit être trié. \begin{verbatim} def echange(l,i,j): """ echange 2 valeurs d'une liste """ |[i],|[j] = |[j], |[i] def tri_1(liste,critere): """ tri la liste en fonction du critere choisi """ for i in range(liste): mini=i for j in range(i +1,len(liste)): if liste[j][critere] > liste[mini][critere]: mini=j echange(liste,i,mini) return liste tri_1(monequipe,5) print(monequipe) \end{verbatim} Q18. En appelant $n$ la taille de la liste, donner la complexité de la fonction tri\_l( ) en fonction de $n$ dans le pire des cas. Critiquer le résultat. Q19. Commenter et expliquer chaque ligne d'instruction de la fonction tri\_2( ) suivante (on ne commentera pas segmente).\\ Quelle est la particularité de cette fonction tri\_2( )?\\ Modifier la fonction tri\_2( ) afin qu'elle retourne comme résultat le nombre d'appels récursifs de la fonction tri\_2( ). \begin{verbatim} def segmente(T,val,i,j): g=i+1 d=j p=T[i][val] while g<=d: while d>=0 and T[d][val]>p: d=d-1 while g<=j and T[g][val]<=p: g=g+1 if g liste[mini][critere]:\\ mini $=$ j\\ echange(liste,i,mini)\\ return liste\\ tri\_1(monequipe,5)\\ print(monequipe) \section*{Question 18} \section*{Question 19} \begin{verbatim} def segmente(T,val,i,j): g=i+1 d=j p=T[i][val] while g<=d : while d>=0 and T[d][val]>p: d=d-1 while g<=j and T[g][val]<=p: g=g+1 if g