vendredi 10 novembre 2017

Entrée/Sorties, un mécanisme de base pour tous les systèmes

Chaque algorithme (ou programme) est un système. L'ordinateur est, comme toute autre machine, un système. Par cela, nous voulons dire qu'il prend des éléments en entrée et nous donne des éléments en sortie; ces derniers sont obtenus à partir des premiers qui subissent un traitement.


Les traitements appliqués dépendent directement des objectifs du système. Ainsi, la majorité des algorithmes (ou programmes) attend quelque chose en entrée, applique les différents traitements et donne quelque chose en sortie. Ces notions feront partie du quotidien de développement.

L'exemple le plus simple est un programme qui calcul la somme de deux entiers. Essayons de l'écrire sans Entrées/Sorties. Le programme sera de la forme :

En Pascal :

Program Somme;
Var
    a, b, c : Integer;
Begin
    a := 10;
    b := 20;
    c := a + b;
End.

En Java :

public class Exemple {
   public static void main(String[] args) {
      int a, b, c;
      a = 10;
      b = 20;
      c = a + b;
   }
}

Les deux codes sont corrects. Mais, après compilation et exécution, on n'obtient rien. Les deux programmes définissent les variables, donnent des valeurs et calculent la somme, néanmoins, sans aucune interaction avec l'utilisateur.


On se demande sur l'utilité d'un tel programme.
Pour améliorer le programme, nous allons lui demander d'afficher le résultat, c'est à dire, de nous donner une sortie pour voir qu'est ce qu'il a fait. Le programme deviendra :

En Pascal :

Program Somme;
Var
    a, b, c : Integer;
Begin
    a := 10;
    b := 20;
    c := a + b;
    WriteLn(c);
End.

En Java :

public class Exemple {
   public static void main(String[] args) {
      int a, b, c;
      a = 10;
      b = 20;
      c = a + b;
      System.out.println(c);
   }
}

Maintenant, l'exécution du programme ne passe pas inaperçue. Nous avons quelque chose qui s'affiche; c'est la sortie du programme. Chaque langage possède sa propre méthode pour donner la sortie. Dans nos deux cas, on "imprime" quelques chose sur l'écran, cette surface qui est le périphérique de sortie principal.



Maintenant, le programme nous dit "30". Nous pouvons dire qu'il fonctionne, contrairement à la première fois où on n'avez aucune idée.
Une deuxième exécution du programme ? Bien, il nous donne aussi 30.
Une troisième? Il nous donne une autre 30. Mais...nous voulons autre chose, nous avons appris que la somme de 10 et 20 est belle et bien 30; et pour les autres nombres ?
Dans son état actuel, le programme nous donnera toujours le même résultat. Il nous faut un moyen pour lui parler, pour lui donner des nouvelles valeurs pour le calcul. Il faut lui permettre de récupérer des Entrées.

En Pascal :

Program Somme;
Var
    a, b, c : Integer;
Begin
    ReadLn(a);
    ReadLn(b);
    c := a + b;
    WriteLn(c);
End.

En Java :


import java.util.Scanner;

public class Exemple {
   public static void main(String[] args) {
      int a, b, c;
      Scanner entree = new Scanner(System.in);
      a = entree.nextInt();
      b = entree.nextInt();
      c = a + b;
      System.out.println(c);
   }
}

Essayons ce dernier code :


Rien ne se passe ! Le programme ne rend même pas la main au système ! On dirai que le programme est bloqué !
Vous avez raison; il est bloqué. En réalité, il vous attend ! Vous l'avez ordonné de récupérer l'entrée, de lire à partir du clavier, alors, il vous attend. En lui donnant les valeurs 25  et 60, l'une après l'autre, on obtient :


Si on exécute le programme une deuxième fois, nous aurons la possibilité de donner deux nouvelles valeurs en entrée et d'obtenir leur somme en sortie. A ce stade, notre programme est interactif; il nous entend et il nous parle.