# C3-S03 — Boucles

import { AssessmentGrid } from "../../src/components/AssessmentGrid";
import { Correction } from "../../src/components/Correction";
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";

<LessonHeader
  id="C3-S03"
  title="Boucles : Répéter N fois vs Répéter indéfiniment"
  cycle="3"
  levels="CM1, CM2, 6e"
  duration="45 à 55 minutes"
  tool="Scratch"
  grouping="Binômes"
  expressPrep={{
    objective: "Distinguer la boucle bornée [répéter 10 fois] et la boucle infinie [répéter indéfiniment].",
    material: "Projet de patrouille continue de garde.",
    trap: "Placer un bloc [aller au centre] à l'intérieur de la boucle infinie.",
    timing: "10' Comparaison boucles • 25' TP Patrouille • 10' Synthèse",
  }}
/>

<LearningObjectives
  objectives={[
    "Choisir à bon escient entre une boucle bornée (`répéter N fois`) et une boucle infinie (`répéter indéfiniment`).",
    "Comprendre la notion de condition d'arrêt d'une répétition.",
    "Détecter et corriger une boucle infinie non désirée qui bloque le reste du programme.",
  ]}
/>

---

## 🎒 Matériel & Préparation

- Fiche d'exercices d'analyse d'algorithmes (comparaison de boucles).

---

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

### 1. Situation déclenchante (10 min)

- _Situation A :_ Un joueur doit faire 3 tours de piste puis s'arrêter. (Boucle bornée : `répéter 3 fois`).
- _Situation B :_ Un ennemi fait des allers-retours continus pendant toute la partie. (Boucle infinie : `répéter indéfiniment`).

### 2. Atelier pratique (25 min)

<ExerciseCard title="Mission : Le gardien et le visiteur" difficulty="Moyen">
  - **Le Gardien :** Patrouille indéfiniment de gauche à droite sur la scène. - **Le Visiteur :**
  Fait 3 sauts d'avertissement, dit *« Coucou ! »*, puis s'arrête définitivement.
</ExerciseCard>

<Correction title="Voir les scripts différenciés">

```text
// Gardien (Boucle infinie)
[quand le drapeau vert est cliqué]
répéter indéfiniment
    avancer de 10 pas
    si sur le bord, rebondir
    attendre 0.05 secondes

// Visiteur (Boucle définie de 3 itérations)
[quand le drapeau vert est cliqué]
répéter (3) fois
    glisser en (0.5) secondes à x: (abscisse x) y: (50)
    glisser en (0.5) secondes à x: (abscisse x) y: (-50)
dire [Coucou !] pendant 2 secondes
```

</Correction>

### 3. Le piège classique : les blocs après une boucle infinie (10 min)

Mise en garde : les blocs placés sous une boucle `répéter indéfiniment` ne s'exécutent **jamais**. Scratch ne permet d'ailleurs pas d'y emboîter de bloc en dessous.

<TeacherTip title="Progression mathématique">
  En 6e, introduisez la notion de variable de comptage (compteur d'itérations i = 1, 2, 3...) pour
  relier la boucle aux suites de nombres.
</TeacherTip>

---

## 📊 Grille d'évaluation

<AssessmentGrid
  criteria={[
    {
      label: "Choisit la boucle adaptée au problème",
      withHelp: "Utilise toujours `répéter indéfiniment` par réflexe",
      autonomous: "Distingue une tâche à durée finie d'une tâche permanente",
      transfer: "Calcule le nombre exact d'itérations pour atteindre une coordonnée",
    },
    {
      label: "Comprend la fin d'exécution d'un script",
      withHelp: "Ne comprend pas pourquoi un bloc sous une boucle infinie est inaccessible",
      autonomous: "Structure son code pour que les actions de fin soient exécutées",
      transfer: "Utilise le bloc `répéter jusqu'à <condition>` (approfondissement)",
    },
  ]}
/>


<LessonNavigation
  prevUrl="/cycle-3/c3-s02-animation-et-parallelisme"
  prevId="C3-S02"
  prevTitle="Animation et parallélisme"
  nextUrl="/cycle-3/c3-s04-coordonnees"
  nextId="C3-S04"
  nextTitle="Coordonnées (X, Y)"
  cycleUrl="/cycle-3"
  cycleTitle="Vue d'ensemble du Cycle 3"
/>
