\begin{exercise}[subtitle={QCM}, step={1}, origin={Annales}, topics={  }, tags={  }]
    \begin{multicols}{2}
        \begin{enumerate}[leftmargin=*, wide]
            \item En voulant programmer une fonction qui calcule la valeur minimale d'une liste d'entiers, on a écrit :
                \begin{center}
                    \begin{minipage}{0.5\linewidth}
                        \inputminted[bgcolor=base3]{python}{./annexes/QCM_mini.py}
                    \end{minipage}
                \end{center}
                Cette fonction a été mal programmée. Pour quelle liste ne donnera-t-elle pas le résultat attendu, c'est-à-dire son minimum ?
                \begin{tasks}(1)
                    \task \mintinline{python}{[-1,-8,12,2,23]}
                    \task \mintinline{python}{[0,18,12,2,3]}
                    \task \mintinline{python}{[-1,-1,12,12,23]}
                    \task \mintinline{python}{[1,8,12,2,23]}
                \end{tasks}

            \item La fonction maxi ci-dessous a pour but de renvoyer la valeur maximale présente dans la liste qui lui est passée
                en argument.
                \begin{center}
                    \begin{minipage}{\linewidth}
                        \inputminted[bgcolor=base3]{python}{./annexes/QCM_maxi.py}
                    \end{minipage}
                \end{center}
                Cette fonction a été mal programmée. On souhaite réaliser un test pour le démontrer. Parmi les propositions suivantes, laquelle mettra la fonction maxi en défaut ?
                \begin{tasks}(1)
                    \task \mintinline{python}{assert maxi([1, 2, 3, 4]) == 4}
                    \task \mintinline{python}{assert maxi([4, 3, 2, 1]) == 4}
                    \task \mintinline{python}{assert maxi([1, 3, 3, 2]) == 3}
                    \task \mintinline{python}{assert maxi([1, 1, 1, 1]) == 1}
                \end{tasks}

            \item On exécute le script suivant :
                \begin{center}
                    \begin{minipage}{\linewidth}
                        \inputminted[bgcolor=base3]{python}{./annexes/QCM_moyenne.py}
                    \end{minipage}
                \end{center}
                Quelle affirmation est \textbf{fausse} parmi les suivantes ?
                \begin{tasks}(1)
                    \task le corps de la boucle a été exécuté 10 fois
                    \task à la fin de l'exécution la valeur de i est 9
                    \task resultat contient la moyenne des éléments de liste
                    \task len est une fonction
                \end{tasks}

            \item T est un tableau de nombres entiers non vide. Que représente la valeur de s renvoyée par cette fonction ?

                \begin{center}
                    \begin{minipage}{0.5\linewidth}
                        \inputminted[bgcolor=base3]{python}{./annexes/QCM_somme.py}
                    \end{minipage}
                \end{center}

                \begin{tasks}(1)
                    \task la somme des valeurs du tableau T
                    \task la somme des valeurs positives du tableau T
                    \task la somme des valeurs impaires du tableau T
                    \task la somme des valeurs paires du tableau T
                \end{tasks}

            \item Lors de l'exécution du code suivant, combien de fois l'opération \mintinline{python}{a = 2*a} sera-t-elle effectuée ?

                \begin{center}
                    \begin{minipage}{0.5\linewidth}
                        \inputminted[bgcolor=base3]{python}{./annexes/QCM_cpt.py}
                    \end{minipage}
                \end{center}
                \begin{tasks}(4)
                    \task 0
                    \task 1
                    \task 7
                    \task 8
                \end{tasks}
        \end{enumerate}
    \end{multicols}

    \begin{enumerate}
        \setcounter{enumi}{5}
        \item
            \begin{minipage}{0.6\linewidth}
                La fonction suivante doit calculer le produit de tous les éléments de la liste passée en paramètre. Avec quelles expressions doit-on la compléter pour que cette fonction soit correcte ?
            \end{minipage}
            \hfill
            \begin{minipage}{0.3\linewidth}
                \inputminted[bgcolor=base3]{python}{./annexes/QCM_produit.py}
            \end{minipage}
            \begin{tasks}(4)
                \task 1 puis \mintinline{python}{p = p * elt}
                \task 0 puis \mintinline{python}{p = p * elt}
                \task 1 puis \mintinline{python}{p = elt}
                \task 0 puis \mintinline{python}{p = elt}
            \end{tasks}

        \item Quelle valeur permet de compléter l’affirmation suivante : « Le nombre d’opérations nécessaires pour rechercher un élément séquentiellement (l'autre méthode que la recherche par dichotomie) dans un tableau de longueur $n$ est de l’ordre de ... » ?
            \begin{tasks}(4)
                \task 1
                \task $n$
                \task $n^2$
                \task $n^3$
            \end{tasks}

        \item Une page HTML comporte ce bout de code :
            \begin{center}
                \begin{minipage}{\linewidth}
                    \inputminted[bgcolor=base3]{html}{./annexes/QCM_alert.html}
                \end{minipage}
            \end{center}
            Quel sera le résultat d’un clic sur le bouton "Appuyer ici" ?
            \begin{tasks}(1)
                \task Rien
                \task La page du navigateur se fermera
                \task La page affichera à la place du bouton "Appuyer ici" le message "Auteurs anonymes"
                \task Cela provoquera l’ouverture d’une fenêtre comportant le message "Auteurs anonymes"
            \end{tasks}
        \item Un élément form (un formulaire) d'une page HTML contient un élément button de type submit. Un clic sur ce bouton
            \begin{tasks}(1)
                \task envoie les données du formulaire vers la page définie par l'attribut action de l'élément form
                \task efface les données entrées par l'utilisateur dans le formulaire
                \task envoie les données du formulaire vers la page définie par l'attribut method de l'élément form
                \task ne fait rien du tout si un script javascript n'est pas associé au bouton
            \end{tasks}

        \item Dans une page HTML, lequel de ces codes permet la présence d'une div qui appelle la fonction javascript  \mintinline{js}{spoil()} lorsque l'utilisateur passe la souris dessus ?
            \begin{tasks}(1)
                \task \mintinline{html}{<div href="spoil()">Passe ta souris</div> }
                \task \mintinline{html}{<div if_mouseover="spoil()">Passe ta souris</div> }
                \task \mintinline{html}{<div  value="Passe ta souris"><div> spoil()</div></div> }
                \task \mintinline{html}{<div oncmouseover="spoil()">Passe ta souris ici</div>}
            \end{tasks}

    \end{enumerate}
    \pagebreak
\end{exercise}

\begin{exercise}[subtitle={Javascript}, step={1}, origin={Bac}, topics={Complexité}, tags={}, mode={}]
    Dans le dossier partager, vous trouverez un dossier \texttt{mon beau site}. Copiez-le dans votre répertoire personnel.
    \begin{enumerate}
        \item Quels éléments HTML ont été associé à un évènement? Préciser le type d'évènement.
        \item Modifier le comportement des boutons \texttt{Bleu} et \texttt{Rouge} pour que l'évènement soit activé au survole de la souris.
        \item Ajoute un évènement au bouton \texttt{ A toi de jouer} pour que sur un click de l'utilisateur, il soit écrit \texttt{Bravo!} dans le span en dessous.
    \end{enumerate}

    Une fois votre travail terminé, vous ferez une archive avec les fichiers de votre page que vous nommerez \texttt{nom-prenom-ex2.7z} puis vous placerez cette archive dans le dossier \texttt{devoir}.
\end{exercise}

\begin{exercise}[subtitle={Sous liste}, step={1}, origin={Bac}, topics={Complexité}, tags={}, mode={}]
    \bigskip
    \textit{Attention, cette exercice est long et des questions ne sont pas évidentes, il ne faut pas hésitez à les sauter car elles sont toutes indépendantes.}
    \bigskip

    Étant donné un tableau non vide de nombres entiers relatifs, on appelle sous-séquence une suite non vide d’éléments voisins de ce tableau. On cherche dans cet exercice à déterminer la plus grande somme possible obtenue en additionnant les éléments d’une sous-séquence.

    Par exemple, pour le tableau ci-dessous, la somme maximale vaut 18. Elle est obtenue en additionnant les éléments de la sous-séquence encadrée en gras ci-dessous (6;8;−6;10).

    \begin{center}
        \includegraphics[scale=0.5]{./fig/sous_suite}
    \end{center}

    \begin{enumerate}
        \item
            \begin{enumerate}
                \item  Quelle est la solution du problème si les éléments du tableau sont tous positifs?
                \item Quelle est la solution du problème si tous les éléments sont négatifs?
            \end{enumerate}
        \item Dans cette question, on examine toutes les sous-séquences possibles
            \begin{enumerate}
                \item Écrire le code Python d’une fonction \mintinline{python}{somme_sous_sequence(lst,i, j)} qui prend en argument une liste et deux entiers i, j et renvoie la somme de la sous-séquence délimitée par les indices i et j (inclus).
                \item La fonction \mintinline{python}{pgsp} ci-dessous permet de déterminer la plus grande des sommes obtenues en additionnant les éléments de toutes les sous-séquences possibles du tableau lst
                    \begin{center}
                        \begin{minipage}{\linewidth}
                            \inputminted[bgcolor=base3]{python}{./annexes/sous_liste1.py}
                        \end{minipage}
                    \end{center}
                    Parmi les quatre choix suivants, quel est le nombre de comparaisons effectuées par cette fonction si le tableau lst passé en paramètre contient 10 éléments? Vous justifierez votre réponse.
                    \begin{center}
                        10 \qquad 55 \qquad 100 \qquad 1055
                    \end{center}
                \item Expliquer pourquoi la complexité de cet algorithme est en $\mathcal{O}(n^2)$.
                \item Recopier et modifier la fonction pgsp pour qu’elle renvoie un tuple contenant la somme maximale et les indices qui délimitent la sous-séquence correspondant à cette somme maximale.
            \end{enumerate}
        \item Ici, on propose une solution plus astucieuse qui consiste à la liste des sommes maximales des sous séquences qui se terminent par les valeurs de la liste à étudier. On a programmé la fonction suivante
            \begin{center}
                \begin{minipage}{\linewidth}
                    \inputminted[bgcolor=base3]{python}{./annexes/sous_liste2.py}
                \end{minipage}
            \end{center}
            \begin{enumerate}
                \item Écrire la fonction \mintinline{python}{maximum} qui prend en argument une liste et qui renvoie la valeur maximal de la liste.
                \item Quelle est la compléxité de votre fonction \mintinline{python}{maximum}?
                \item Faire une estimation de la complexité de la fonction \mintinline{python}{pgsp2}. Que peut-on dire par rapport à la fonction \mintinline{python}{pgsp}?
            \end{enumerate}
    \end{enumerate}
\end{exercise}
