Compare commits

...

5 Commits

Author SHA1 Message Date
eb62277a3f ???
All checks were successful
continuous-integration/drone/push Build is passing
2023-05-22 09:30:48 +02:00
3dbcc23df6 Feat(ES): ajoute le devoir commun 2023-05-22 09:30:14 +02:00
1ab61b3954 Feat(SNT): ajoute un exercice d'évaluation 2023-05-22 09:29:22 +02:00
f5c143964b Feat(NSI): DS5 2023-05-21 10:52:56 +02:00
811f41d93d Feat(NSI): QCM pour le DS5 2023-05-19 14:26:07 +02:00
15 changed files with 1189 additions and 12 deletions

View File

@ -0,0 +1,370 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "ecd73354",
"metadata": {},
"source": [
"# DS 5\n",
"\n",
"Cette partie comporte deux parties:\n",
"\n",
"- Partie programmation\n",
"- Partie réseau\n",
"\n",
"Ces deux parties sont indépendantes et peuvent être traitées dans l'ordre que vous voulez."
]
},
{
"cell_type": "markdown",
"id": "f8136040",
"metadata": {},
"source": [
"## Partie programmation\n",
"\n",
"Une ville souhaite gérer son parc de vélos en location partagée. Lensemble de la flotte de vélos est stocké dans une table de données représentée en langage Python par un dictionnaire contenant des associations de type `id_velo : dict_velo` où `id_velo` est un nombre entier compris entre 1 et 199 qui correspond à l'identifiant unique du vélo et `dict_velo` est un dictionnaire dont les clés sont : \"type\", \"etat\", \"station\".\n",
"\n",
"Les valeurs associées aux clés \"type\", \"etat\", \"station\" de dict_velo sont de type chaînes de caractères ou nombre entier :\n",
"\n",
"- \"type\" : chaîne de caractères qui peut prendre la valeur \"electrique\" ou \"classique\"\n",
"- \"état\" : nombre entier qui peut prendre la valeur 1 si le vélo est disponible, 0 si le vélo est en déplacement, -1 si le vélo est en panne\n",
"- \"station\" : chaînes de caractères qui identifie la station où est garé le vélo.\n",
"\n",
"Dans le cas où le vélo est en déplacement ou en panne, \"station\" correspond à celle où il a été dernièrement stationné.\n",
"\n",
"Voici un extrait de la table de données :\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "295fb0ce",
"metadata": {},
"outputs": [],
"source": [
"flotte = {\n",
"12 : {\"type\" : \"electrique\", \"etat\" : 1, \"station\" : \"Prefecture\"},\n",
"80 : {\"type\" : \"classique\", \"etat\" : 0, \"station\" : \"Saint-Leu\"},\n",
"45 : {\"type\" : \"classique\", \"etat\" : 1, \"station\" : \"Baraban\"},\n",
"41 : {\"type\" : \"classique\", \"etat\" : -1, \"station\" : \"Citadelle\"},\n",
"26 : {\"type\" : \"classique\", \"etat\" : 1, \"station\" : \"Coliseum\"},\n",
"28 : {\"type\" : \"electrique\", \"etat\" : 0, \"station\" : \"Coliseum\"},\n",
"74 : {\"type\" : \"electrique\", \"etat\" : 1, \"station\" : \"Jacobins\"},\n",
"13 : {\"type\" : \"classique\", \"etat\" : 0, \"station\" : \"Citadelle\"},\n",
"83 : {\"type\" : \"classique\", \"etat\" : -1, \"station\" : \"Saint-Leu\"},\n",
"22 : {\"type\" : \"electrique\", \"etat\" : -1, \"station\" : \"Joffre\"}\n",
"}"
]
},
{
"cell_type": "markdown",
"id": "d2282abe",
"metadata": {},
"source": [
"\n",
"`flotte` étant une variable globale du programme.\n",
"\n",
"1a. Comment obtenir les informations sur le vélo avec l'id 26?"
]
},
{
"cell_type": "raw",
"id": "a430f6b3",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "5951facb",
"metadata": {},
"source": [
"1b. Comment obtenir l'état du vélo avec l'id 83?"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "86feec80",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "4e28b9ae",
"metadata": {},
"source": [
"1c. Ajouter le vélo avec l'id 1 de type electrique, disponible à la station Joffre dans le dictionnaire `flotte`."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d4fd9d3d",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "d7173496",
"metadata": {},
"source": [
"2. On définit la fonction `proposition`"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "a13ebd11",
"metadata": {},
"outputs": [],
"source": [
"def proposition(choix):\n",
" for v in flotte:\n",
" if flotte[v][\"type\"] == choix and flotte[v][\"etat\"] == 1:\n",
" return flotte[v][\"station\"]"
]
},
{
"cell_type": "markdown",
"id": "8771166f",
"metadata": {},
"source": [
"2a. Quelles sont les valeurs possibles de la variable `choix`?"
]
},
{
"cell_type": "raw",
"id": "d43c9a4e",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "fb52e033",
"metadata": {},
"source": [
"2b. Ecrire deux tests pour vérifier le bon fonctionnement de la fonction `proposition`"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b8ab1c1a",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "417fa333",
"metadata": {},
"source": [
"Dans la suite, tous vos programmes devront marcher même si le dictionnaire `flotte` change.\n",
"\n",
"3. Ecrire un programme qui compte le nombre de vélo de type electrique."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "8a9514e4",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "3f341db7",
"metadata": {},
"source": [
"4. Ecrire un programme qui affiche l'id des vélos de la station *Citadelle*."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "968408e5",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "ff4efcca",
"metadata": {},
"source": [
"5. On dispose d'une table de données des positions GPS de toutes les stations,\n",
"dont un extrait est donné ci-dessous. Cette table est stockée sous forme dun\n",
"dictionnaire.\n",
"\n",
"Chaque élément du dictionnaire est du type: `nom de station: (latitude, longitude)`"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "19622d5e",
"metadata": {},
"outputs": [],
"source": [
"stations = {\n",
"'Prefecture' : (49.8905, 2.2967) ,\n",
"'Saint-Leu' : (49.8982, 2.3017),\n",
"'Coliseum' : (49.8942, 2.2874),\n",
"'Jacobins' : (49.8912, 2.3016)\n",
"}"
]
},
{
"cell_type": "markdown",
"id": "0935a479",
"metadata": {},
"source": [
"On souhaite préparer les donner pour afficher la position de chaque vélo.\n",
"\n",
"Écrire un script qui créer un dictionnaire `flotte_position` avec en clé l'id des vélos et en clé la position (tuple de longitude et latitude) de la station à laquel il est associé."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "52c0f94e",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "dac575d3",
"metadata": {},
"source": [
"## Partie réseau\n",
"\n",
"Une entreprise décide d'organiser son réseau de la manière suivante\n",
"\n",
"![reseau](./reseau.png)\n",
"\n",
"L'icone nuage représente le réseau internet.\n",
"\n",
"1. Quel matériel doit-elle utiliser pour les objets A, B et C?"
]
},
{
"cell_type": "raw",
"id": "9b2da650",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "43e7c4f0",
"metadata": {},
"source": [
"2. Identifier les sous réseaux que vous identifiez en précisant les équipements qui le constitue."
]
},
{
"cell_type": "raw",
"id": "87a8447d",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "ed133011",
"metadata": {},
"source": [
"3. Le poste 2 envoie la trame suivante au serveur web\n",
"\n",
"![trame](./trame.png)\n",
"\n",
"3a. Quel est le type de contenu qui est échangé entre le poste 2 et le serveur web?"
]
},
{
"cell_type": "raw",
"id": "1fa9aff6",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "257a51db",
"metadata": {},
"source": [
"3b. Quelles informations peut-on en tirer sur le poste 2?"
]
},
{
"cell_type": "raw",
"id": "4060a968",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "b7446e92",
"metadata": {},
"source": [
"3c. Quelles information peut-on en tirer sur le serveur WEB?"
]
},
{
"cell_type": "raw",
"id": "0b7913b5",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "d0fa236c",
"metadata": {},
"source": [
"3d. Supposons que la réponse à cette requète soit une page web volumineuse. Que va-t-il se passer au niveau de la couche transport? Expliquer l'interet d'une tel manoeuvre."
]
},
{
"cell_type": "raw",
"id": "080bdc35",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "a5c61806",
"metadata": {},
"source": [
"4. Expliquer en quelques mots le principe d'encapsulation du protocole TCP/IP et les bénéfices de ce choix technique."
]
},
{
"cell_type": "raw",
"id": "49138878",
"metadata": {},
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

View File

@ -0,0 +1,121 @@
\begin{exercise}[subtitle={QCM}, step={1}, origin={Annales}, topics={ }, tags={ }]
\begin{enumerate}
\item On exécute le code suivant
\begin{center}
\begin{minipage}{\linewidth}
\inputminted[bgcolor=base3]{python}{./scripts/qcm_maxi.py}
\end{minipage}
\end{center}
Quelle est alors la valeur de \mintinline{python}{maxi(L)}
\begin{tasks}(4)
\task \mintinline{python}{('Alice', 17)}
\task \mintinline{python}{('Doriane', 17)}
\task \mintinline{python}{('Fabienne', 17)}
\task \mintinline{python}{('Emilien', 14)}
\end{tasks}
\item Un fichier CSV …
\begin{tasks}(2)
\task ne peut être lu que par un tableur
\task est l'unique format utilisé pour construire une base de données
\task est un fichier texte
\task est un format propriétaire
\end{tasks}
\item Qu'est-ce que le CSV ?
\begin{tasks}(2)
\task Un langage de programmation
\task Un format de fichier permettant de stocker de linformation
\task Un algorithme permettant de rechercher une information dans un fichier
\task Un format de fichier permettant de définir le style dune page web
\end{tasks}
\item On définit ainsi la liste \mintinline{python}{t}
\begin{center}
\begin{minipage}{\linewidth}
\inputminted[bgcolor=base3]{python}{./scripts/qcm_list_dico.py}
\end{minipage}
\end{center}
Quelle affirmation est correcte?
\begin{tasks}(2)
\task t est une liste de listes
\task t est une liste de dictionnaires
\task t est un dictionnaire de listes
\task t est une liste de tuples
\end{tasks}
\item On a extrait les deux premières lignes de différents fichiers.
Déterminer celui qui est un authentique fichier CSV :
\begin{tasks}(1)
\task \texttt{Nom,Pays, Temps} \\
\texttt{Camille Muffat, France, 241.45}
\task \texttt{Nom,Pays, Temps} \\
\texttt{Camille Muffat France 241.45}
\task \texttt{[}\\
\texttt{{ "Nom": "Camille Muffat", "Pays": "France", "Temps": 241.45}, }
\task \texttt{[}\\
\texttt{{ No": "Camille Muffat", Pays: "France", Temps: 241.45}, }
\end{tasks}
\item Soit la table de données suivante :
\begin{center}
\begin{tabular}{|c|c|c|}
\hline
nom & prenom & date\_naissance \\
\hline
Dupont & Pierre & 17/05/1987 \\
\hline
Dupond & Catherine & 18/07/1981 \\
\hline
Haddock & Archibald & 23/04/1998 \\
\hline
\end{tabular}
\end{center}
Quels sont les descripteurs de ce tableau ?
\begin{tasks}(2)
\task nom, prenom et date\_naissance
\task Dupont, Pierre et 17/05/1987
\task Dupont, Dupond et Haddock
\task il n'y en a pas
\end{tasks}
\item On définit un dictionnaire : \mintinline{python}{d = {"couleur": "vert", "taille": 42, "marque": "le coq sportif"}}
Quelle est la valeur de l'expression \mintinline{python}{d.keys()}?
\begin{tasks}(1)
\task \mintinline{python}{["couleur", "taille", "marque"]}
\task \mintinline{python}{[("couleur", "vert"), ("taille", 42), ("marque", "le coq sportif")]}
\task \mintinline{python}{["vert", 42, "le coq sportif"]}
\task \mintinline{python}{["couleur": "vert", "taille":42, "marque":"le coq sportif"]}
\end{tasks}
\item Parmi les éléments suivants lequel peut être une adresse MAC?
\begin{tasks}(2)
\task \texttt{192.168.2.1.5.2}
\task \texttt{192.168.2.1}
\task \texttt{52:54:00:a8:f6:07}
\task \texttt{52:54:00:a8:f6}
\end{tasks}
\item Le multiplexage est utilisé pour
\begin{tasks}(2)
\task Découper des paquets en morceaux pour fluidifier le trafic
\task Découper des paquets en morceau pour accélérer les échanges
\task Faire passer les paquets d'une couche à une autre
\task Router les paquets entre les réseaux
\end{tasks}
\item Quel identifiant est utilisé pour désigner la source et la destination au niveau de la couche transport du protocole TCP/IP?
\begin{tasks}(4)
\task L'IP
\task TCP
\task L'adresse MAC
\task le port
\end{tasks}
\end{enumerate}
\end{exercise}

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 95 KiB

View File

@ -0,0 +1,3 @@
t = [ {'id':1, 'age':23, 'sejour':'PEKIN'}, {'id':2, 'age':27, 'sejour':'ISTANBUL'},
{'id':3, 'age':53, 'sejour':'LONDRES'}, {'id':4, 'age':41, 'sejour':'ISTANBUL'},
{'id':5, 'age':62, 'sejour':'RIO'}, {'id':6, 'age':28, 'sejour':'ALGER'}]

View File

@ -0,0 +1,11 @@
def maxi(t):
m = t[0]
for x in t:
if x[1] >= m[1]:
m = x
return m
L = [ ('Alice', 17), ('Barnabé', 17),
('Casimir', 17), ('Doriane', 17),
('Emilien', 14), ('Fabienne', 16)
]

Binary file not shown.

View File

@ -1,15 +1,17 @@
\documentclass[a4paper,12pt]{article} \documentclass[a4paper,12pt]{article}
\usepackage{myXsim} \usepackage{myXsim}
\usepackage{minted}
% Title Page % Title Page
\title{ Devoir commun T3 \hfill } \title{ DS5 \hfill }
\tribe{EnseignementsScientifique} \tribe{1NSI}
\date{22 mai 2023} \date{22 mai 2023}
\duree{} \duree{1h}
\DeclareExerciseCollection[step=1]{banque} \DeclareExerciseCollection[step=1]{banque}
\xsimsetup{collect} \xsimsetup{collect}
\pagestyle{empty}
\begin{document} \begin{document}
\maketitle \maketitle

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -1,7 +0,0 @@
\begin{exercise}[subtitle={<++>}, step={1}, origin={<++>}, topics={ }, tags={ }]
<++>
\end{exercise}
\begin{solution}
<++>
\end{solution}

View File

@ -116,3 +116,29 @@
\item Écrire un programme qui allume la led centrale, qui la fait se déplacer à droite quand le B est pressé et vers la droite si c'est le bouton A. \item Écrire un programme qui allume la led centrale, qui la fait se déplacer à droite quand le B est pressé et vers la droite si c'est le bouton A.
\end{enumerate} \end{enumerate}
\end{exercise} \end{exercise}
\begin{exercise}[subtitle={Jeu final - Pierre Feuille Ciseau}, step={3}, origin={Ma tête}, topics={ Informatique embarqué et objets connectés }, tags={ Python, Programmation, Architecture }]
On souhaite créer un jeu de pierre feuille ciseau sur micro-bit pour jouer contre l'ordinateur.
\begin{enumerate}
\item Dessiner 3 icônes pierre, feuille et ciseaux puis les afficher les unes à la suite des autres sur l'écran du micro-bit.
\item Le programme ci-dessous permet de choisir au hasard entre \mintinline{python}{"P"} (pour pierre), \mintinline{python}{"F"} (pour feuille) et \mintinline{python}{"C"} (pour ciseau)
\begin{center}
\begin{minipage}{0.7\linewidth}
\inputminted[bgcolor=base3,linenos]{python}{./scripts/05_PFC.py}
\end{minipage}
\end{center}
Adapter le programme pour qu'il affiche vos icônes à la place du nom du choix.
\item Ajouter un décompte (de 3 à 1) au début du programme (après le \mintinline{python}{while True}).
\item Avant de faire faire un choix au hasard au microbit, donner la possibilité à l'utilisateur de faire sélectionner sont choix :
\begin{itemize}
\item Quand bouton A est pressé, c'est Ciseau
\item Quand bouton B est pressé, c'est Pierre
\item Quand bouton A et B sont pressés, c'est Feuille
\end{itemize}
Afficher le choix de l'utilisateur avant celui de l'ordi.
\item Après que le choix de l'utilisateur et celui du microbit sont affichés, afficher une icône pour savoir si on a gagné ou perdu.
\item Bonus: adapter ce jeu pour que deux personnes sur micro-bit puissent s'affronter.
\end{enumerate}
\end{exercise}

View File

@ -2,6 +2,6 @@ from microbit import *
import time import time
for col in range(5): for col in range(5):
display.set_led(col, 0, 9) display.set_pixel(col, 0, 9)
# set_led(colonne, ligne, intensité) # set_pixel(colonne, ligne, intensité)
time.sleep(0.5) time.sleep(0.5)

View File

@ -0,0 +1,13 @@
from microbit import *
from random import choice
import time
while True:
choix = choice(["P", "F", "C"])
if choix == "P":
display.scroll("Pierre")
elif choix == "F":
display.scroll("Feuille")
elif choix == "C":
display.scroll("Ciseaux")
time.sleep(1)