---
jupytext:
  text_representation:
    extension: .md
    format_name: myst
    format_version: 0.13
kernelspec:
  display_name: Python 3 (ipykernel)
  language: python
  name: python3
---

+++ {"tags": ["locked"]}

# Semaine 1 : introduction à l'informatique et premiers programmes

## [Cours](cours.md)

## [TD : Notion d'algorithme](TD.md)

+++ {"tags": ["locked"]}

## TP : prise en main, premiers programmes avec laby

+++ {"tags": ["locked"]}

**Tout exercice non marqué d'un ♣ est à terminer pour la semaine prochaine.**

+++ {"tags": ["locked"]}

### Introduction

Dans ce premier TP vous allez écrire de petits programmes de façon ludique (faire sortir
une fourmi d'un labyrinthe, etc), occasion d'avoir un premier contact avec quelques
constructions (conditionnelles, boucles, fonctions) que nous approfondirons par la suite.

![image](media/laby3a.png)

Pour cela, nous utiliserons des *feuilles d'exercices interactives `Jupyter`*. `Jupyter`
est une application web qui permet de programmer interactivement dans de nombreux
langages (`Python`, `C++`, ...), un peu comme une super calculatrice, et de rédiger des
documents interactifs.

+++ {"tags": ["locked"]}

### Exercice 1 : Premiers pas avec Jupyter

1. Ouvrez la feuille de travail
   [00-prise-en-main-jupyter.md](00-prise-en-main-jupyter.md).

2. Suivez les instructions qu'elle contient.

+++ {"tags": ["instructor"]}

:::{admonition} Notes aux enseignants
Dans ce TP, il y a beaucoup de petites feuilles. Du coup, si celles-ci ne sont pas
arrêtées explicitement, il y a beaucoup de noyaux simultanés qui tournent. C'est pourquoi
on leur recommande, lorsqu'ils ont fini une fiche, d'utiliser le menu
`Fichier -> Fermer et arrêter`, afin d'éviter de dépasser leur quota de mémoire utilisée.
:::

% +++
%
% ### Exercice 2 : Dépôt de votre travail
%
% % +++ {"tags": ["instructor"]}
% %
% % :::{admonition} Notes aux enseignants
% %
% % Dans l'état actuel, les consignes et la configuration de `Travo` sont
% % très directive : on ne peut extraire l'archive que dans le répertoire
% % `~/IntroProg/Semaine...` (en particulier il faut que le
% % répertoire `IntroProg` ait sa majuscule).  L'expérience des
% % années passées montre que les étudiants ont besoin de quelque chose de
% % directif, mais c'est peut-être exagéré. Faire remonter si les élèves
% % semblent génés par cet aspect directif, par exemple parce qu'ils
% % souhaiteraient légitimement ranger leur répertoire `IntroProg`
% % ailleurs que à la racine de leur répertoire personnel.
% %
% % :::
%
% +++
%
% 1. Revenez au tableau de bord du cours
%
%    :::{admonition} Indication
%    :class: tip
%
%    Recherchez l'onglet ![tableau de bord](media/tableau_de_bord_onglet.png); si vous
%    l'avez fermé, revenez à la
%    [page d'accès au matériel pédagogique](https://Nicolas.Thiery.name/Enseignement/Info111/ComputerLab/)
%    et suivez les instructions.
%    :::
%
% 2. Cliquez sur «Déposer» sur la ligne «Semaine 1».
%
% 3. Sélectionnez votre groupe et validez.
%
% 4. Vous devez voir apparaître "Statut: Dépôt du devoir Semaine1: ✅ terminé" sous le
%    tableau de bord.
%
% 5. Consultez le dépôt `Semaine1` sur GitLab en cliquant sur le lien avec votre nom
%    apparau dans la colonne "Dépot".
%
% 6. Votre travail est maintenant sauvegardé et partagé avec votre enseignant. Vous pouvez
%    y accéder depuis chez vous.
%
% % TODO : consultation de la correction automatique
%
% Pensez à déposer systématiquement votre travail à la fin du TP pour que tout ce que vous
% avez fait soit bien sauvegardé sur le serveur gitlab et consultable par vos enseignants
% et enseignantes.
%
% ::::{admonition} En bref
% :class: hint
%
% **MyDocker** :
%
% - mets à votre disposition un **environnement virtuel** pour travailler sur les feuilles
%   du cours;
% - peut être utilisé depuis n'importe où avec un simple navigateur web;
% - vous sert à réaliser vos TP à l'université et à les continuer / réviser depuis chez
%   vous.
%
% **GitLab** :
%
% - est un service de stockage (géré avec git) où sont hébergés les TP;
% - vous sert à télécharger les feuilles de travail;
% - vous sert à **sauvegarder** votre travail (par exemple en cas de fausse manœuvre ou de
%   problème sur MyDocker);
% - vous sert à **rendre disponible** votre travail pour qu'ils puissent être consultés par
%   vos enseignants et enseignantes (pour vous aider, vous débloquer, ou vérifier votre
%   travail);
% - **En cours de développement :** sert à vous donner un aperçu de votre avancement et un
%   retour automatique sur votre travail.
% ::::

+++ {"tags": ["locked"]}

### Exercice 3 : Premiers programmes en jouant

+++ {"tags": ["instructor"]}

:::{admonition} Notes aux enseignants
- `Laby` n'est pas juste un jeu. Le but est de capitaliser les notions que les élèves
  auront ainsi perçu de manière intuitive, comme l'exécution séquentielle d'un programme,
  les boucles, les conditionnelles, les fonctions, ... Pour donner l'intuition des
  fonctions, ne pas hésiter à faire le parallèle avec le TD (exercice 1 question 2).

- Sur le début de laby, certains ne comprennent pas trop la démo ni ce qu'il faut faire.
  Leur expliquer, par exemple au moyen d'une démonstration au vidéo projecteur
  (2022-2023 : cela a été fait en amphi; probablement pas besoin de le refaire).

- Une erreur fréquente des élèves est d'oublier de mettre `debut();` .

- Penser aussi à les inciter fortement à utiliser les indications (boucle while pour les
  labyrinthes 2a et 2b, fonction pour le 2c...), surtout pour les élèves qui s'en sortent
  pas trop mal.
:::

+++ {"tags": ["locked"]}

Le jeu [`Laby`](https://sgimenez.github.io/laby/) propose plusieurs défis successifs;
pour chacun d'entre eux, le but est de guider pas-à-pas une fourmi vers la sortie d'un
labyrinthe à l'aide d'un programme. Chacun de ces défis sera l'occasion de découvrir ou
manipuler un concept de programmation.

Nous allons utiliser [`Laby-jupyter`](https://github.com/nthiery/laby-jupyter/), une
réimplantation de laby dans Jupyter.

1. Chaque feuille ci-dessous correspond à un défi. Ouvrez les tour-à-tour dans l'ordre et
   suivez les instructions incluses.

   % Déposez votre travail après chaque feuille.

   % Instructions

   - [Prise en main de Laby](01-prise-en-main-laby.md)
   - [À vous de jouer](10-premier-exo.md)
   - [Un caillou dans la chaussure](11-un-caillou.md)
   - [Encore un caillou!](12-encore-un-caillou.md)

   % Boucles while

   - [Que c'est loin ...](20-on-regarde-devant-soi.md)
   - [Le couloir des cailloux](21-beaucoup-de-cailloux.md)

   % Petites fonctions

   - [En zigzag](22-en-zigzag.md)
   - [La spirale infernale](23-la-spirale.md)

   % Conditionnelles

   - [Ahhh des toiles!](30-si-si-si.md)
   - [Toiles et cailloux](31-le-caillou-et-la-toile.md)

2. Résoudre en Python le défi [Chou, chèvre, loup](chou-chevre-loup.md).

3. ♣ Dans l'ordre que vous souhaiterez :

   - Faire les feuilles laby supplémentaires en C++ :

     - [Le Zig-Zag des cailloux](25-le-zig-zag-des-cailloux.md)
     - [Compter les cailloux](43-compter-les-cailloux.md)
     - [Les toiles: par où passer?](50-les-toiles.md)
     - [C'est fou!](53-c-est-fou.md)

   - Reprendre en Python tout ou partie des défis de laby. Pour cela, vous utiliserez le
     tableau de bord pour télécharger le devoir `CoursPython`.

   - Résoudre en Python le [jeu des cruches](cruches.md).

+++ {"tags": ["locked"]}

### Exercice 4 : À faire pour la semaine prochaine

Deux heures supplémentaires de `Laby`! Vous pouvez travailler depuis la salle
libre-service du bâtiment 336 (salle 215, sauf si cours), ou depuis tout dispositif
connecté à internet.

% Dans tous les cas, assurez-vous de télécharger le devoir en début de
% chaque séance et de le déposer régulièrement ensuite. En particulier,
% le déposer avant de vous déconnecter pour que tout ce que vous avez
% fait soit bien sauvegardé.
