# C4-S05 — Listes

import { AssessmentGrid } from "../../src/components/AssessmentGrid";
import { Correction } from "../../src/components/Correction";
import { DownloadCard } from "../../src/components/DownloadCard";
import { ExerciseCard } from "../../src/components/ExerciseCard";
import { LearningObjectives } from "../../src/components/LearningObjectives";
import { LessonHeader } from "../../src/components/LessonHeader";
import { LessonNavigation } from "../../src/components/LessonNavigation";
import { TeacherTip } from "../../src/components/TeacherTip";
import { WatchOut } from "../../src/components/WatchOut";

<LessonHeader
  id="C4-S05"
  title="Listes et tableaux : Stocker et manipuler des collections de données"
  cycle="4"
  levels="5e, 4e, 3e"
  duration="55 minutes"
  tool="Scratch"
  grouping="Binômes"
  expressPrep={{
    objective: "Manipuler une liste ordonnée : ajouter, supprimer, consulter par index (1 à N).",
    material: "Projet Inventaire RPG ou Tableau des Meilleurs Scores.",
    trap: "Scratch indexe à partir de 1 alors que Python indexe à partir de 0.",
    timing: "15' Structure de liste • 25' Gestion d'inventaire • 15' Bilan",
  }}
  studentUrl="/activites/cycle-4/c4-a03-utilise-une-liste"
  studentId="C4-A03"
  pdfUrl="/downloads/c4-s05-fiche-listes-donnees-v1.pdf"
/>

<LearningObjectives
  objectives={[
    "Comprendre la structure de données **Liste** (ou tableau indexé de 1 à N).",
    "Manipuler les 4 opérations fondamentales (CRUD) : Ajouter, Lire par index, Remplacer, Supprimer.",
    "Parcourir une liste complète à l'aide d'une boucle et d'un index de positionnement.",
  ]}
/>

---

## 🎒 Matériel & Préparation

- Fiche explicative des blocs de liste (palette orange foncé).
- Liste de questions/réponses ou inventaire d'objets.

---

## ⏱️ Déroulé de la séance

### 1. De la variable simple à la liste (10 min)

Si un joueur ramasse 10 objets différents, créer 10 variables distinctes (`objet1`, `objet2`...) est inefficace. Une **liste** permet de ranger N éléments dans une seule collection numérotée.

### 2. Atelier d'application : L'inventaire de jeu de rôle (30 min)

<ExerciseCard title="Mission : Gestionnaire d'inventaire" difficulty="Moyen">
  1. Créer une liste `Inventaire`. 2. Initialiser la liste en la vidant au drapeau vert : `supprimer
  tous les éléments de la liste [Inventaire v]`. 3. Ajouter 3 objets : Épée, Potion, Bouclier. 4.
  Parcourir la liste pour faire dire au héros le contenu complet de son sac à dos.
</ExerciseCard>

<Correction title="Architecture du parcours de liste">

```text
[quand le drapeau vert est cliqué]
supprimer (tous) les éléments de la liste [Inventaire v]
ajouter [Épée magique] à [Inventaire v]
ajouter [Potion de soin] à [Inventaire v]
ajouter [Bouclier de bois] à [Inventaire v]

mettre [index v] à 1
répéter (longueur de [Inventaire v]) fois
    dire (regrouper [Objet en poche : ] (élément (index) de [Inventaire v])) pendant 1.5 secondes
    ajouter (1) à [index v]

dire [Inventaire terminé !] pendant 2 secondes
```

</Correction>

### 3. Opérations de suppression et recherche (15 min)

Comment retirer un objet lorsqu'il est consommé ? Utiliser le bloc `supprimer l'élément (index) de la liste`.

<TeacherTip title="Indice de parcours">
  Insistez sur le rôle de la variable `index` : elle sert de pointeur qui avance de la case 1
  jusqu'à la `longueur de liste`.
</TeacherTip>

<WatchOut title="Décalage d'index à la suppression">
  Quand on supprime l'élément 1 d'une liste de 3 éléments, l'ancien élément 2 devient
  automatiquement le nouvel élément 1.
</WatchOut>

---

## 📊 Grille d'évaluation

<AssessmentGrid
  criteria={[
    {
      label: "Initialise et manipule une liste",
      withHelp: "Oublie de vider la liste au démarrage (éléments dupliqués)",
      autonomous: "Ajoute, modifie et supprime des éléments de manière contrôlée",
      transfer:
        "Génère un quiz automatique à partir de 2 listes synchronisées (Questions / Réponses)",
    },
    {
      label: "Parcourt une liste avec un index dynamique",
      withHelp: "Écrit en dur `élément 1`, `élément 2`, `élément 3` manuellement",
      autonomous: "Utilise une boucle avec `index` et `longueur de liste`",
      transfer: "Recherche si un élément précis est présent dans la liste",
    },
  ]}
/>

---

## 📥 Téléchargements

<DownloadCard
  title="Fiche listes et tableaux de données (C4-S05)"
  filename="c4-s05-fiche-listes-donnees-v1.pdf"
  format="pdf"
  size="1.2 KB"
  version="1.0"
  license="CC-BY-SA 4.0"
  href="/downloads/c4-s05-fiche-listes-donnees-v1.pdf"
/>


<LessonNavigation
  prevUrl="/cycle-4/c4-s04-variables-locales-et-globales"
  prevId="C4-S04"
  prevTitle="Variables locales et globales"
  nextUrl="/cycle-4/c4-s06-recherche-et-statistiques"
  nextId="C4-S06"
  nextTitle="Statistiques et calculs"
  cycleUrl="/cycle-4"
  cycleTitle="Vue d'ensemble du Cycle 4"
/>
