Parcours15 modules, du premier programme aux arbres binaires

Apprenez le C.
Comprenez la machine.

Des exercices en C qui vous font comprendre ce qui se passe vraiment : la mémoire, les pointeurs, la compilation. Vous ne recopiez pas, vous comprenez pourquoi ça marche.

// 01 — en pratique

Écrivez. Soumettez. Obtenez un verdict.

Chaque exercice part d’un énoncé clair. Vous écrivez votre solution, elle est compilée et testée, et quand ça ne passe pas, vous savez exactement pourquoi.

  • Des tests visibles pour vous guider, des tests cachés pour valider
  • Des messages d’erreur expliqués, pas juste affichés
  • Un résultat en quelques secondes
exercice-01 / hello.c
#include <stdio.h>

int main(void)
{
    printf("Hello, World!\n");
    return 0;
}

soumission reçuehello.c

en file d’attentejob #4812

compilationgcc -std=c11 -Wall

tests visibles3/3

tests cachés5/5

tests_passed+50 XP

// 02 — verdicts

Six verdicts possibles. Zéro ambiguïté.

Chaque soumission reçoit exactement un statut, avec ce qu’il faut pour comprendre et corriger.

tests_passed

Exercice validé

Tous les tests passent, visibles comme cachés. L’exercice est validé et votre progression sauvegardée.

✓ 8/8 tests réussis

tests_partial

Presque !

Certains tests passent, d’autres non. Les tests visibles vous montrent où chercher.

5/8 · test 6 : attendu 42, obtenu 41

compilation_error

Le compilateur a parlé

gcc refuse votre code. Le message d’erreur complet s’affiche, ligne et colonne comprises.

hello.c:5:5: error: expected ';' before 'return'

runtime_error

Plantage à l’exécution

Le programme compile mais s’arrête brutalement : segfault, division par zéro, signal anormal.

SIGSEGV · Segmentation fault

timeout

Trop long

Le programme dépasse le temps autorisé. Une boucle qui ne s’arrête jamais, peut-être ?

killed · temps limite dépassé

constraint_violation

Règle non respectée

Le résultat est juste, mais l’exercice imposait une contrainte : pas de boucle for, pas de variable globale…

interdit : for (ligne 7)

// 03 — parcours

Un module après l’autre. Un examen pour débloquer le suivant.

  1. 01disponible

    La base des bases

    Ce qu’est le C, votre premier programme, les variables et les fonctions.

    • main
    • gcc
    • int
  2. 02verrouillé

    Écrire à l’écran

    Afficher des caractères et des nombres avec write seul, octet par octet.

    • write
    • while
    • if
  3. 03verrouillé

    Pointeurs, chaînes et tableaux

    Comprendre les adresses, modifier une variable à distance, parcourir des chaînes et des tableaux.

    • &
    • *
    • []
  4. 04verrouillé

    Manipuler les chaînes

    Copier, tester et transformer des chaînes de caractères, puis regarder la mémoire en hexadécimal.

    • strcpy
    • toupper
    • 0x
  5. 05verrouillé

    Comparer et assembler des chaînes

    Comparer deux chaînes, les mettre bout à bout et chercher un mot dans un texte.

    • strcmp
    • strcat
    • strstr
  6. 06verrouillé

    Nombres et bases

    Transformer un texte en nombre, et écrire ou lire un nombre dans n’importe quelle base.

    • atoi
    • base 2
    • base 16
  7. 07verrouillé

    La récursivité

    Des fonctions qui s’appellent elles-mêmes, la pile des appels, et quelques classiques des mathématiques.

    • pile
    • factorielle
    • backtracking
  8. 08verrouillé

    Les arguments d’un programme

    Recevoir des informations au lancement du programme, avec argc et argv.

    • argc
    • argv
    • tri
  9. 09verrouillé

    La mémoire dynamique

    Réserver de la mémoire pendant que le programme tourne avec malloc, et la rendre avec free.

    • malloc
    • free
    • split
  10. 10verrouillé

    En-têtes, macros et structures

    Partager des déclarations entre fichiers, laisser le préprocesseur remplacer du texte, et regrouper des données.

    • .h
    • #define
    • struct
  11. 11verrouillé

    Bibliothèques et Makefile

    Regrouper ses fonctions dans une bibliothèque et automatiser la compilation avec un Makefile.

    • .a
    • ar
    • Makefile
  12. 12verrouillé

    Lire des fichiers

    Ouvrir, lire et fermer un fichier, et signaler les erreurs comme les commandes du système.

    • open
    • read
    • errno
  13. 13verrouillé

    Les pointeurs sur fonctions

    Passer une fonction en paramètre à une autre, pour qu’elle l’applique à chaque élément d’un tableau.

    • foreach
    • map
    • tri
  14. 14verrouillé

    Les listes chaînées

    Ranger des données dans des maillons reliés, et apprendre à les ajouter, parcourir, retirer et trier.

    • ->
    • NULL
    • free
  15. 15verrouillé

    Les arbres binaires

    Ranger des données dans un arbre, le parcourir de plusieurs façons, et garder des données triées.

    • left
    • right
    • parcours

// 04 — progression

Chaque exercice compte. Montez en rang, gagnez des titres.

Chaque exercice validé rapporte de l’expérience. Montez en rang, débloquez des titres et des succès, et retrouvez tout sur votre profil.

Votre profil

rang : Initié · Rookie

expérience1240 / 2 261 XP

prochain rang : Codeur

exercices
14
série
6 j
succès
4/10
  1. Noob
  2. Apprenti
  3. Explorateur
  4. Initié
  5. Codeur
  6. Expert
  7. Maître
  8. Grand Maître
  9. Omniscient

Hello, World!

Valider votre tout premier exercice.

débloqué

Zéro warning

Réussir un exercice sans le moindre avertissement de gcc.

débloqué

Chasseur de segfault

Corriger un runtime_error et repasser au vert.

débloqué

Du premier coup

Réussir un exercice dès la première soumission.

débloqué

Premier examen

Réussir un examen de fin de module.

verrouillé

Sans fuite

Réussir un exercice qui alloue de la mémoire en libérant chaque malloc.

verrouillé

// 05 — sécurité

Votre code tourne dans une boîte noire.

Chaque soumission obtient son propre conteneur, créé pour elle et détruit juste après. Votre code ne touche jamais le serveur principal.

  • Conteneur éphémère, jamais réutilisé
  • Aucun accès réseau, mémoire et CPU limités
  • Tests cachés exécutés hors du conteneur
  • Compilation pilotée par la plateforme, aucun Makefile exécuté
runner / sandbox
# une soumission = un conteneur
docker run --rm \
  --network none \
  --memory 64m \
  --cpus 0.5 \
  --ulimit nproc=50 \
  --read-only --tmpfs /tmp \
  --user nobody \
  runner/gcc-alpine

exit 0conteneur détruit

Prêt à comprendre
la machine ?

Créez votre compte et attaquez le premier module. Aucun prérequis, juste l’envie de comprendre ce qui se passe sous le capot.

rawcode — Apprenez le langage C