Voir les cours et résoudre les problèmes en :
Le C est un langage de programmation impératif conçu pour la programmation système. Inventé au début des années 1970 avec UNIX, C est devenu un des langages les plus utilisés. De nombreux langages plus modernes se sont inspirés de sa syntaxe. Il privilégie la performance sur la simplicité de la syntaxe. [En savoir plus]
Le C++ est un langage de programmation impératif. Inventé au début des années 1980, il apporte de nouveaux concepts au langage C (les objets, la généricité), le modernise et lui ajoute de nombreuses bibliothèques. C++ est devenu l'un des langages les plus utilisés. Sa performance et sa richesse en font le langage de prédilection pour les concours. [En savoir plus]
Pascal est un langage de programmation impératif inventé dans les années 1970 dans un but d'enseignement. Quoiqu'encore utilisé à cette fin, l'absence de bibliothèque standard en limite son utilisation malgré une grande efficacité. Sa syntaxe a été reprise par d'autres langages plus modernes avec plus ou moins de succès. [En savoir plus]


Remarque : Les cours pour ce langage ne sont disponibles que jusqu'au chapitre 4, « Lecture de l'entrée ». Les corrections sont toutefois toujours fournies.
OCaml est un langage de programmation fonctionnel inventé au milieu des années 1990. Il permet aussi une programmation impérative ou objet. Il permet d'écrire des programmes courts et faciles à vérifier et est ainsi utilisé pour certains systèmes embarqués très sensibles comme ceux des avions. Il est utilisé dans l'enseignement en classes préparatoires aux grandes écoles. [En savoir plus]


Remarque : Les cours pour ce langage ne sont disponibles que jusqu'au chapitre 4, « Lecture de l'entrée ». Les corrections sont toutefois toujours fournies.
Java est un langage de programmation impératif et orienté objet. Inventé au début des années 1990, il reprend en grande partie la syntaxe du langage C++ tout en la simplifiant, au prix d'une performance un peu moins bonne. S'exécutant dans une machine virtuelle, il assure une grande portabilité et ses très nombreuses bibliothèques en font un langage très utilisé. On lui reproche toutefois la « verbosité » de son code. [En savoir plus]


Remarque : Pour un débutant souhaitant apprendre Java, nous conseillons fortement de commencer par JavaScool, plus facile à apprendre, bien que fortement similaire.
Java's Cool (alias JavaScool) est conçu spécifiquement pour l'apprentissage des bases de la programmation. Il reprend en grande partie la syntaxe de Java sur laquelle il s'appuie, mais la simplifie pour un apprentissage plus aisé. La plateforme JavaScool est accompagnée d'un ensemble d'activités diverses de découverte de la programmation. [En savoir plus]
Python est un langage de programmation impératif inventé à la fin des années 1980. Il permet une programmation orientée objet et admet une syntaxe concise et claire qui en font un langage très bien adapté aux débutants. Étant un langage interprété, il n'est cependant pas aussi performant que d'autres langages. [En savoir plus]

Notez que si les difficultés que nous évoquons vous paraissent très mineures pour l'instant, les méthodes expliquées ci-après seront une bonne ressource lorsque vous serez confronté à des problèmes complexes (notamment à partir du niveau 3). Nous vous en donnerons ainsi plusieurs au fil de votre progression.

Organiser un algorithme pour soi-même

Comme vous avez dû le voir, nous utilisons souvent du pseudo-code pour exprimer les opérations et les algorithmes : quand nous présentons de nouvelles instructions, dans les conseils automatiques, ainsi que dans les corrections des problèmes. Si les ordinateurs ne peuvent pas comprendre ces instructions (à l'heure actuelle du moins), le pseudo-code nous aide à mieux visualiser, à organiser des instructions pour nous avant d'écrire un programme rigoureux qu'une machine pourra interpréter.

En effet, lorsque l'on veut trouver la solution à un problème qui ne se rapproche pas de ce que l'on connaît déjà, il est très difficile de s'organiser complètement dans sa tête et d'écrire directement les bonnes instructions en langage de programmation. Il est bien plus agréable de passer par différentes étapes, où l'on identifie et l'on pose les grandes parties du problème pour se repérer, puis progressivement, on se rapproche de ce que l'on peut programmer.

Cas pratique

Prenons par exemple la situation suivante. C'est un souterrain que vous a décrit le Grand Sorcier et que vous avez schématisé : vous devez aller chercher le coffre qui s'y trouve, car il contient les objets magiques avec lesquels le sorcier exerce ses pouvoirs et est admiré par ses fidèles.

Vous êtes à l'entrée avec votre robot. Celui-ci doit donc aller chercher la clé au bout du souterrain (dans les chemins nauséabonds), puis ouvrir la porte avec cette clé, prendre le gros coffre qui se trouve derrière, et vous le ramener. Rien que la phrase est compliquée ! Organisons cette suite de tâches :

Aller chercher la clé
Ouvrir la porte
Prendre le coffre
Ramener le coffre

Maintenant, détaillons :

Aller à droite jusqu'au bout
Aller en haut jusqu'au bout
Aller à gauche jusqu'au bout
Prendre la clé

Aller à droite jusqu'...

C'est un peu lourd, non ? On va réduire un peu l'écriture, pour aller plus vite :

À droite -> au bout
En haut -> au bout
À gauche -> au bout
Clé

À droite -> au bout
En bas -> au bout
À gauche -> au chemin de la porte
En haut -> à la porte
Porte
Coffre

En bas -> au bout
À gauche -> à l'entrée

Remarquez que pour passer d'une étape à l'autre, on s'appuie sur le schéma de l'énoncé pour compléter notre pseudo-code. Le revoici pour vous aider à mieux suivre :

À présent, on arrive aisément à un pseudo-code très proche du programme final :

8 fois
   À droite
5 fois
   En haut
4 fois
   À gauche
Prendre la clé

4 fois
   À droite
5 fois
   En bas
6 fois
   À gauche
4 fois
   En haut
Ouvrir la porte
En haut
Prendre le coffre

5 fois
   En bas
2 fois
   À gauche

qui est :

for loop in range(8):
   droite()
for loop in range(5):
   haut()
for loop in range(4):
   gauche()
ramasser()

for loop in range(4):
   droite()
for loop in range(5):
   bas()
for loop in range(6):
   gauche()
for loop in range(4):
   haut()
ouvrir()
haut()
ramasser()

for loop in range(5):
   bas()
gauche()
gauche()
   

Étape par étape, avec d'autres supports

À vous de déterminer ces différentes étapes dont vous avez besoin pour trouver la solution. Si vous aviez été à notre place, vous auriez peut-être combiné les deux dernières étapes en une seule, avec des instructions comme « à droite 8 fois ». Il n'est pas tolérable d'écrire un programme de manière approximative, et de le soumettre en se disant qu'il sera peut-être bon. Si le déroulement de votre programme ne vous est pas clair, formulez votre idée générale sur un support et travaillez-la jusqu'à la rendre déterministe. Vous serez alors certain que ce que vous avez codé est juste avant de le soumettre, moyennant quelques étourderies.

Ainsi, nous vous encourageons à vous organiser sur une feuille de papier, ou à l'aide d'un logiciel de votre ordinateur si vous préférez, avant d'écrire votre programme. Cela vous sera essentiel pour résoudre des problèmes bien plus complexes dans les calculs et les opérations que ce que nous avons vu jusqu'à présent, par exemple dans les niveaux suivants et notamment dans les concours.

Des notations optimales pour vous

Il est probable que nos notations en pseudo-code vous paraissent un peu longues : en effet, nous voulons nous assurer d'être compris par tous nos lecteurs. Quand vous brouillonnez sur papier, vous pouvez bien sûr employer des notations plus courtes, et même profiter de la flexibilité du support : utiliser des symboles ou de petits dessins à la place des mots ; comme des flèches pour les directions. Soyez toutefois certain de bien vous comprendre lorsque vous devez relire votre algorithme !

Si vous devez vous-même décrire un algorithme à quelqu'un d'autre, un pseudo-langage pourra souvent être bien plus efficace qu'un langage de programmation. Ce sera notamment le cas avec quelqu'un n'ayant jamais programmé !

Pensez à vous inscrire pour valider les cours et résoudre les exercices.