France IOI
Formats des fichiers sources

Dans la plupart des problèmes de ce site, on vous demande d'écrire un programme qui lit des données sur l'entrée standard, et affiche une solution en fonction de ces données, sur la sortie standard. Lire sur la sortie standard revient à lire des données tapées au clavier, et écrire sur la sortie standard revient à écrire à l'écran. Vous devez donc utilisez les fonctions correspondantes de votre langage.

Attention : suivant le système d'exploitation, les fins de lignes peuvent être représentées de eux manières différentes dans l'entrée. Sous Windows, une fin de ligne est représentée par deux caractères, '\r' puis '\n', alors que sous Linux, seul le caractère '\n' est utilisé ('\r' correspond au caractère de code ASCII 13, et '\n' correspond au code ASCII 10). Pour que vos programmes fonctionnent sur notre serveur, ils doivent gérer les deux formats. Tenez-en compte dans les cas où vous lisez les caractères un par un.

Exemples dans les différents langages

Le programme le plus simple basé sur le principe de lecture sur l'entrée standard / écriture sur la sortie standard, consiste à lire un entier et de l'afficher tel quel.

Voici comment écrire ce programme dans chacun des langages gérés par notre site, pour qu'il soit compilable et testable par notre serveur d'évaluation. Basez-vous sur ces exemples pour écrire vos programmes.

Langage C :

#include <stdio.h>
int main()
{
   int valeur;
   scanf("%d", &valeur);
   printf("%d\n", valeur);
   return 0;
}
Langage C++ : (les entrées-sorties C++ sont jusqu'à 10 fois plus lentes que les fonctions scanf et printf de C. Évitez donc de les utiliser.)
#include <iostream>
using namespace std;
int main()
{
   int valeur;
   cin >> valeur;
   cout << valeur << endl;
   return 0;
}
Langage Pascal :
var valeur : Integer;
begin
   readln(valeur);
   writeln(valeur);
end.
Langage OCaml : (les deux premières lignes servent à avaler les espaces entres les nombres lors de la lecture de plusieurs nombres à la suite)
let read_int () = Scanf.scanf " %d" (fun x->x);;
let read_float () = Scanf.scanf " %f" (fun x->x);;

let valeur = read_int() in
print_int valeur;
print_newline();;

let valeur_bis = read_int() in
Printf.printf "%d\n" valeur_bis;;

Pour travailler avec des nombres qui ne tiennent pas dans l'intervalle -1073741824 à 1073741823, il faut utilier le module Big_int ou le module Num (décrit dans le manuel de référence). Voici comment lire et afficher de tels nombres :

      (* avec Big_int *)
let read_big_int() = Scanf.scanf " %s" Big_int.big_int_of_string;;
let print_big_int x = Printf.printf "%s" (Big_int.string_of_big_int x);;
let a = read_big_int() in
print_big_int a;

      (* avec Num *)
let read_num() = Scanf.scanf " %s" Num.num_of_string;;
let print_num x = Printf.printf "%s" (Num.string_of_num x);;
let a = read_num() in
print_num a;
Langage Java :
import java.io.*;
public class Main
{
   public static void main(String[] args)  throws IOException
   {
      StreamTokenizer entree= new StreamTokenizer(
         new InputStreamReader(System.in));
      entree.nextToken();
      int valeur = (int)entree.nval;
      System.out.println(valeur);
   }
}
Langage Eiffel :
class MAIN_CLASS
creation main

feature
   main is
   -- Programme principal
     do
       io.read_integer;
       io.put_integer(io.last_integer);
   end;
end -- class MAIN_CLASS