Cours

Il existe de très nombreux langages de programmation différents. Chaque langage a ses particularités propres, mais certaines ressemblances peuvent également être observées.

Voici un arbre généalogique des principaux langages, tiré des documents d’accompagnement du programme de première :

1. Popularité des principaux langages

L’entreprise néerlandaise TIOBE propose un indice de popularité des principaux langages de programmation. Voici comment cet indice est présenté sur son site :

Citation

L’indice TIOBE Programming Community est un indicateur de la popularité des langages de programmation. L’indice est mis à jour une fois par mois. Les évaluations sont basées sur le nombre d’ingénieurs qualifiés dans l’utilisation de chaque langage dans le monde entier, de cours et de fournisseurs tiers. Les moteurs de recherche populaires tels que Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube et Baidu sont utilisés pour calculer les évaluations. Il est important de noter que l’indice TIOBE ne concerne pas le meilleur langage de programmation ou le langage dans lequel la plupart des lignes de code ont été écrites.

L’indice peut être utilisé pour vérifier si vos compétences en programmation sont toujours à jour ou pour prendre une décision stratégique sur le langage de programmation à adopter lorsque vous commencez à construire un nouveau système logiciel. La définition de l’indice TIOBE peut être trouvée ici.

Voici le classement des dix premiers langages selon l’indice TIOBE en septembre 2023 et le graphique de son évolution :

2. Différentes implémentations d’un même algorithme

Pour découvrir et comparer quelques langages de programmation, nous allons nous intéresser à l’algorithme suivant dont l’objet est de tester si un nombre entier positif \(n\) donné en argument est premier ou non. On procède pour cela en testant la divisibilité par les entiers inférieurs ou égaux à \(\sqrt{n}\). Si \(n\) ne possède aucun diviseur (autre que 1) inférieur ou égal à \(\sqrt{n}\), alors \(n\) est premier.

L’algorithme représenté ci dessous (on traite directement le cas \(n=2\) et on élimine tous les multiples de 2):

Algorithme en pseudo-code
Fonction is_prime(n)
    Début
        Si n = 2, Alors
            Retourne Vrai
        FinSi
        Si n < 2 ou 2 divise n, Alors
            Retourne Faux
        FinSi
        Pour k variant de 3 à la partie entière de racine_carrée(n), avec un pas de 2, Faire
            Si k divise n, alors
                Retourne Faux
            FinSi
        FinPour
        Retourne Vrai
    Fin

Voici maintenant sa traduction dans quelques langages de programmation. À chaque fois, nous avons essayé de suivre au plus près la structure de programmation de l’algorithme en pseudo-code. Dans chaque exemple, une fonction est définie, puis elle est exécutée pour vérifier que le nombre 37 est premier. Le résultat est affiché à l’écran.

Python

Langage Python
from math import sqrt

def is_prime(n):
    if n == 2:
        return True
    if n < 2 or n % 2 == 0:
        return False
    for k in range(3, int(sqrt(n))+1, 2):
        if n % k == 0:
            return False
    return True

print(is_prime(37)

C, C++

Dans le script ci-dessous, écrit en C, on retrouve le même algorithme. Le code fonctionne en C ou en C++ (on peut considérer que C est un sous-ensemble de C++). Cliquer ici pour tester ce code en ligne :

Langage C
#include <stdio.h>
#include <stdbool.h>
#include <math.h>

bool is_prime(unsigned int n)
{
    unsigned int k;
    if (n == 2) return true;
    if (n < 2 || n % 2 == 0) return false;
    for (k = 3; k <= sqrt(n) + 1; k += 2)
        if (n % k == 0) return false;
    return true;
}

int main()
{
    unsigned int number = 91;
    bool result = is_prime(number);

    if (result)
        printf("%u est un nombre premier.\n", number);
    else
        printf("%u n'est pas un nombre premier.\n", number);

    return 0;
}

C#

La même chose en C# Cliquer ici pour tester ce code en ligne :

Langage C#
using System;

class Program
{
    static bool is_Prime(int n)
    {
        if (n == 2) return true;
        if (n < 2 || n % 2 == 0) return false;
        for (int k = 3; k <= Math.Sqrt(n) + 1; k += 2)
            if (n % k == 0) return false;
        return true;
    }

    static void Main()
    {
        int number = 91;
        bool result = is_Prime(number);

        if (result)
            Console.WriteLine($"{number} est un nombre premier.");
        else
            Console.WriteLine($"{number} n'est pas un nombre premier.");

        // Attendre une saisie pour que la console ne se ferme pas immédiatement
        Console.ReadLine();
    }
}

Java

Passons à Java Cliquer ici pour tester ce code en ligne :

Langage Java
class PrimeTest {

    static boolean isPrime(int n) {
        if (n == 2) return true;
        if (n < 2 || n % 2 == 0) return false;
        for (int k = 3; k <= Math.sqrt(n) + 1; k += 2)
            if (n % k == 0) return false;
        return true;
    }

    public static void main(String[] args) {
        int number = 37;
        boolean result = isPrime(number);

        if (result)
            System.out.println(number + " est un nombre premier.");
        else
            System.out.println(number + " n'est pas un nombre premier.");
    }
}

Javascript

Voici maintenant un peu de Javascript Cliquer ici pour tester ce code en ligne :

Langage Javascript
function is_prime(n) {
  if (n == 2) {
    return true;
  } else if ((n < 2) || (n % 2 == 0)) {
    return false;
  } else {
    for (var k = 3; k <= Math.sqrt(n); k += 2) {
      if (n % k == 0)
        return false;
    }
    return true;
  }
}

console.log(is_prime(37))

Basic

En Basic (version visual Basic) Cliquer ici pour tester ce code en ligne :

Langage Visual Basic
Module MainModule

    Function is_prime(n As Integer) As Boolean
        If n = 2 Then
            is_prime = True
        ElseIf n < 2 Or n Mod 2 = 0 Then
            is_prime = False
        Else
            is_prime = True
            For k = 3 To CInt(Math.Sqrt(n)) + 1 Step 2
                If n Mod k = 0 Then
                    is_prime = False
                    Exit For
                End If
            Next
        End If
    End Function

    Sub Main()
        Dim number As Integer = 37
        Dim result As Boolean = is_prime(number)

        If result Then
            Console.WriteLine(number & " est un nombre premier.")
        Else
            Console.WriteLine(number & " n'est pas un nombre premier.")
        End If

        ' Attendre une saisie pour que la console ne se ferme pas immédiatement
        Console.ReadLine()
    End Sub

End Module

Fortran

En Fortran Cliquer ici pour tester ce code en ligne :

Langage Fortran
PROGRAM Main
  IMPLICIT NONE

  LOGICAL :: result
  INTEGER :: number

  number = 91
  result = is_prime(number)

  IF (result) THEN
    WRITE(*, *) number, " est un nombre premier."
  ELSE
    WRITE(*, *) number, " n'est pas un nombre premier."
  END IF

CONTAINS

  FUNCTION is_prime(n)
    LOGICAL :: is_prime
    INTEGER, INTENT(IN) :: n
    INTEGER :: k

    IF (n == 2) THEN
      is_prime = .TRUE.
    ELSE IF (n < 2 .OR. MOD(n, 2) == 0) THEN
      is_prime = .FALSE.
    ELSE
      is_prime = .TRUE.
      DO k = 3, INT(SQRT(REAL(n))) + 1, 2
        IF (MOD(n, k) == 0) THEN
          is_prime = .FALSE.
          EXIT
        END IF
      END DO
    END IF

  END FUNCTION is_prime

END PROGRAM Main

Pascal

En Pascal Cliquer ici pour tester ce code en ligne :

Langage Pascal
program PrimeTest;

function is_prime(n: integer): boolean;
var
  k: integer;
begin
  if n = 2 then
    is_prime := true
  else if (n < 2) or (n mod 2 = 0) then
    is_prime := false
  else begin
    is_prime := true;
    k := 3;
    while k <= trunc(sqrt(n)) + 1 do begin
      if n mod k = 0 then begin
        is_prime := false;
        exit;
      end;
      k := k + 2;
    end;
  end;
end;

var
  number: integer;
  result: boolean;
begin
  number := 91;
  result := is_prime(number);

  if result then
    writeln(number, ' est un nombre premier.')
  else
    writeln(number, ' n''est pas un nombre premier.');

  readln;
end.

OCaml

Pour finir, en OCaml Cliquer ici pour tester ce code en ligne :

Langage OCaml
let is_prime n =
  if n = 2 then true
  else if n < 2 || n mod 2 = 0 then false
  else begin
    let reponse = ref true in
    for k = 3 to 1 + int_of_float (sqrt (float_of_int n)) do
      if n mod k = 0 then
        reponse := false
    done;
    !reponse
  end
;;

let () =
  let number = 91 in
  let result = is_prime number in
  if result then
    Printf.printf "%d est un nombre premier.\n" number
  else
    Printf.printf "%d n'est pas un nombre premier.\n" number
;;
Exercice

Notre langage d’étude est Python. Repérer, dans les dix programmes ci-dessous des points communs et des différences. Vous présenterez vos résultats dans un tableau et vous effectuerez ce travail en présentant brièvement chacun des langages cités (date de création, domaine d’application, …).

Compléments

  • Le site RosettaCode.org propose un très grand nombre d’algorithmes traduits dans un très grand nombre de langages. Les programmes présentés ici en sont inspirés, avec quelques modifications.
  • La page Wikipedia “Hello, World!” program présente le fameux programme affichant la phrase “Hello, World!” à l’écran dans de très nombreux langages de programmation.