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]

Utilisation d'une ligne de commande Linux sous Windows

Pour pouvoir faire fonctionner les scripts, il faut que le chemin d'accès à votre compilateur soit dans le PATH. Par défaut, c'est automatiquement le cas avec MinGW, mais pas avec Caml.

Pour tester si votre compilateur est dans le PATH, ouvrez la fenêtre « Exécuter » (accessible dans le menu principal, ou raccourci clavier Super+R), puis tapez le nom de votre compilateur: gcc ou bien g++ ou bien ocamlc.

Si une fenêtre noire s'ouvre et se referme instantanément, c'est que tout est bon. Sinon, vous aurez un message d'erreur vous indiquant que le programme n'a pas été trouvé. Dans ce cas, reportez vous à la section correspondante (plus bas dans le cours) pour savoir comment modifier le PATH.

Pour lancer le "shell", c'est-à-dire la ligne de commande compatible avec la syntaxe Linux, lancez le programme C:\Programs\MinGW\msys\1.0\msys.bat. Nous vous conseillons d'ajouter ce programme dans le menu démarrer. La fenêtre suivante s'affiche.

Il vous faut alors vous déplacer vers votre dossier de travail. Par exemple, on va supposer qu'il s'agit de C:\script, mais ça pourrait être autre chose. (Par contre n'utilisez pas "Mes documents", ni un chemin que contient des espaces, car ça compliquerait tout). Pour changer de dossier, utilisez la commande "cd". Prenez garde à bien remplacer les antislashes par des slashes, conformément à la convention Linux.

Pour tester l'exécution de scripts, nous allons mettre en place le script qui exécute un programme sur un ensemble de fichier tests. Le script en question est décrit en détails dans le cours Travailler efficacement avec le compilateur et le shell disponible sur le site France-IOI.

Commencez par copier le contenu du script ci-dessous dans le fichier C:\script\all.sh.

   g++ -Wall -O2 -o output.exe $1
   for test_in in *.in; do
      echo Solving $test_in ...;
      ./output.exe < $test_in > `basename $test_in .in`.out;
   done

Si vous utilisez C, il faut changer la première ligne en

   gcc -o output.exe $1

Si vous utilisez Caml, il faut changer la première ligne en

   ocamlc -o output.exe $1

Et si vous utilisez Caml avec Ocamlopt, il faut changer la première ligne en

   ocamlopt -o output.exe $1

Ensuite on va créer un programme nommé C:\script\dup.cpp (ou C:\script\dup.c si vous faîtes du C) avec le contenu suivante:

   #include <cstdio>

   int main() {
      int x;
      scanf("%d\n", &x);
      printf("%d\n", x);
      return 0;
   }

Pour Caml, on mettra dans C:\script\dup.ml le texte suivante

   let x = read_int() in
   print_int x

Pour terminer, on va créer deux fichiers tests, nommés C:\script\test1.in et C:\script\test2.in, le premier contenant juste l'entier 1 et le second contenant juste l'entier 2. À ce stade, on dispose donc des fichiers suivants (l'extension du fichier dup pouvant varier selon le langage de programmation):

Nous sommes maintenant prêt à exécuter le script. Pour cela, on invoque le script ./all.sh sur l'argument dup.cpp (ou autre selon le nom de votre programme), en séparant les deux par un espace.

La commande ls permet de voir que deux fichiers test1.out et ont été créés. La commande cat permet de voir le contenu d'un fichier. Pratique également, la commande cat *.out permet de voir le contenu de tous les fichiers d'extension .out à la fois.

Une autre astuce très utile est la redirection de l'entrée et de la sortie standard. Par exemple, pour envoyer le contenu d'un fichier sur l'entrée standard du programme output.exe, il faut écrire :

  output.exe < test1.in

Pour envoyer la sortie standard du programme dans un fichier, il faut écrire :

  output.exe > test1.out

Et bien sûr, on peut combiner les deux :

  output.exe < test1.in > test1.out

Enfin, gardez en tête que le raccourci Ctrl+C permet d'interrompre l'exécution d'un programme à tout instant.

Installation du compilateur Ocamlopt

Si vous compilez avec ocamlopt à la place de ocamlc, vos programmes iront ainsi significativement plus vite. En effet, ocamlopt produit des programmes en codes natifs, comme GCC, et évite ainsi l'utilisation d'un interpréteur de bytecode qui doit simuler les instructions une par une.

Pour l'instant, la compilation native avec Ocaml 3.11 ou supérieure est problématique sous Windows. Pour cela, nous allons installer une version antérieure qui marche tout aussi bien (et même mieux, en l'occurence) pour ce que l'on souhaite faire.

Si vous avez déjà installé OCaml, renommez le dossier C:\Program Files\Objective Caml en C:\Program Files\Objective Caml Recent pour éviter les conflits. (Vous pouvez aussi supprimer le dossier si vous voulez).

Téléchargez la version Ocaml 3.10.2 ici.

Installez cette version dans C:\Program Files\Objective Caml, comme normalement.

Maintenant, pour que ocamlopt marche, il est nécessaire d'installer MinGW. C'est très simple, il suffit de suivre le tutoriel proposé dans ce même chapitre.

Une fois que c'est fait, il ne reste plus qu'à dire à Notepad++ d'utiliser ocamlopt à la place de ocamlc. Pour cela, dans Notepad++, tapez sur F6 pour faire apparaître la ligne de compilation, et remplacez-y ocamlopt par ocamlc. N'oubliez pas de sauvegarder les changements (bouton "Save") dans le profil courant.

Modification du PATH

Modifier le PATH est utile soit parce que l'installation automatique a échouée (possiblement car vous n'aviez pas les droits administrateurs), soit parce que tout simplement vous avez envi que les compilateurs ("gcc", "g++" ou "ocamlc") soient accessibles directement par leur nom, sans avoir besoin de donner le chemin complet.

Utilisez le raccourci clavier "WIN + PAUSE" pour ouvrir les propriétés système (la touche PAUSE se trouve tout en haut à droite des claviers; sur les portables il faut généralement utiliser la touche FN pour y acccéder). (On peut également y accéder par l'objet "Système" depuis le panneau de configuration).

Dans l'onglet "Avancé", clicker sur "Variables d'environements".

Pour régler le PATH pour les compilateurs GCC et G++, il faut éditer la ligne PATH.

Ensuite, prennez soin de ne rien effacer (sinon vous aurez des problèmes sur votre ordinateur), et ajoutez à la fin de la ligne valeur le texte suivant, en supposant que vous voulez rendre "gcc" et "g++" accessibles. Le point-virgule sert à séparer le texte précédent du texte que l'on est en train d'ajouter.

   ;C:\programs\mingw\bin

Si vous voulez ajouter le compilateur Caml, c'est un peu plus compliqué. Il faut d'abord créer une variable nommée OCAMLLIB (seulement dans le cas où cette variable n'existe pas déjà) comme montré ci-dessous, en lui donnant la valeur

   C:\Program Files\Objective Caml\lib

Et ensuite il faut modifier le PATH en ajoutant tout à la fin de la ligne valeur le texte ci-dessous.

   ;C:\Program Files\Objective Caml\bin

Simplification des lignes de commandes dans Notepad++

Lorsque votre compilateur se trouve dans le PATH, les lignes de compilations se simplifient significativement. Ainsi, pour C/C++ vous pouvez utiliser :

   g++ -Wall -O2 -o output.exe $(FULL_CURRENT_PATH) && ./output.exe
Et pour Caml vous pouvez utiliser (avec ocamlc ou ocamlopt) :
   ocamlopt -o output.exe $(FULL_CURRENT_PATH) && ./output.exe

Problèmes courants

   Cannot find gcc  (ou g++)
Le compilateur gcc n'est pas visible dans le PATH. Voyez la section modification du PATH pour corriger cela.
   Cannot find ocamlc
Le compilateur ocamlc n'est pas visible dans le PATH. Voyez la section modification du PATH pour corriger cela.
   Cannot find pervasives.cmi
Cette erreur se produit si la variable OCAMLLIB n'est pas enregistré correctement. Voyez la section modification du PATH pour définir OCAMLLIB en C:\Program Files\Objective Caml\lib.
   Cannot find ocamlrun
Cette erreur se produit si "ocamlrun.exe" n'est pas visible dans le PATH. Voyez la section modification du PATH pour changer le PATH et y inclure C:\Program Files\Objective Caml\bin.
   Cannot find as
La compilation avec ocamlopt échoue car le compilateur de code assembleur n'est pas accessible. Cela est du au fait que C:\programs\mingw\bin n'est pas enregistré correctement dans le PATH. Voir la section modification du PATH pour résoudre le problème.
Pensez à vous inscrire pour valider les cours et résoudre les exercices.