Aller au contenu

Version PDF

Chapitre 1 : algorithme et programme⚓︎

Objectifs

À la fin du chapitre, on doit savoir :

  • distinguer algorithme et programme
  • donner au moins trois exemples de langages de programmation
  • distinguer langage compilé et langage interprété

Algorithme et ordinateur⚓︎

Définition

Un algorithme est une suite finie d'instructions non ambiguës, exécutables mécaniquement, qui transforme des données d'entrée en un résultat de sortie après un nombre fini d'étapes.

Exercice 1 : algorithme d'addition

  1. Effectuer l'addition des nombres 9870756 et 4321807.
  2. Décrire l'algorithme que vous avez utilisé

Définition

Un ordinateur est une machine composée notamment :

  • d'une unité de calcul ou processeur, qui exécute des opérations arithmétiques et logiques ;
  • d'une mémoire, qui stocke des données et des programmes qui sont des traductions d'algorithmes ;
  • de dispositifs d'entrée et de sortie.

Un ordinateur est programmable, c'est-à-dire qu'il peut exécuter différents programmes, dans la limite de sa mémoire, de sa puissance de calcul et du temps disponible.

Exercice 2 : d'où viennent les ordinateurs

  1. Un smartphone est-il un ordinateur ? Et le programmateur d'une machine à laver ?
  2. Quelle est l'origine du mot ordinateur en français ?
  3. Quelle machine imaginée par Charles Babbage au dix-neuvième siècle est un précurseur de nos ordinateurs .
  4. Quel anglais a défini précisément dans les années 1930 la machine théorique qui sert de modèle à nos ordinateurs ?

Langage de programmation⚓︎

Définition

Un langage de programmation traduit un algorithme exprimé en langage humain dans un programme compréhensible par un ordinateur. Un programme est au départ un texte ou code source qui est traduit en langage machine par un autre programme appelé compilateur. Il existe une multitude de langes de programmation adaptés à des usages différents. Un langage de programmation est intermédiaire entre :

  • le langage humain, pratique mais souvent ambigu ;
  • le langage machine, directement exécutable par le processeur de l'ordinateur mais très difficile à écrire directement.

Exemple : diversité des langages de programmation

Les trois programmes ci-dessous permettent tous d'afficher 'Bonjour' mais sont écrits dans trois langages différents.

En Python :

🐍 Script Python
print("Bonjour")

En JavaScript :

JavaScript
console.log("Bonjour");

En C :

C
#include <stdio.h>

int main() {
    printf("Bonjour\n");
    return 0;
}

Compilation et interprétation⚓︎

Définition

Un compilateur est un programme qui traduit un code source en un autre langage, souvent en langage machine, avant l'exécution du programme.

Dans un langage compilé, la traduction est généralement faite avant l'exécution.

Un interpréteur est un programme qui prend en charge l'exécution d'un programme source, instruction après instruction ou après une traduction intermédiaire.

Dans un langage interprété, on lance généralement le programme à l'aide d'un interpréteur.

Exemples de langages compilés ou interprétés

Langage Compilé Interprété
C oui non
Rust oui non
Python en partie, vers du bytecode oui
Java en partie, vers du bytecode oui, par la machine virtuelle Java
JavaScript parfois, à la volée oui

Attention

La distinction entre langage compilé et langage interprété est utile, mais simplifiée. En réalité, beaucoup de langages modernes utilisent des mécanismes mixtes : traduction intermédiaire, compilation à la volée, machine virtuelle ... Par exemple l'interpréteur Python compile le code source Python en bytecode qui est exécuté sur une machine virtuelle.

Exercice 3 : du code source au bytecode

On souhaite observer les étapes intermédiaires utilisées par Python pour exécuter un programme.

  1. Créer un fichier nommé bonjour.py contenant le code suivant :

    🐍 Script Python
    print("bonjour")
    
  2. Exécuter le programme depuis un terminal :

    Bash
    python3 bonjour.py
    

    Vérifier que le message "bonjour" s'affiche.

  3. Générer le bytecode Python avec la commande :

    Bash
    python3 -m compileall bonjour.py
    

    Vérifier qu'un dossier __pycache__ a été créé.

  4. Observer le fichier de bytecode contenu dans __pycache__.

    Par exemple :

    Bash
    cat __pycache__/bonjour*.pyc
    

    ou avec un éditeur hexadécimal comme Okteta.

    Que remarque-t-on ? Le fichier obtenu est-il un fichier texte lisible directement ?

  5. Afficher une représentation lisible du bytecode avec la commande :

    Bash
    python3 -m dis bonjour.py
    

    Repérer dans l'affichage les instructions correspondant à l'appel de la fonction print.