Programmation impérative

I. Présentation

Vous avez osé entrer ici ? Félicitations ! Du coup, nous allons commencer en douceur.

La programmation impérative, vous connaissez ? Non ? Pourtant, c'est ce que vous faites depuis des années chaque fois que vous écrivez un programme (ou presque). En effet, la plupart des langages de programmation (c'est notamment le cas de Python) sont des langages impératifs.

Dans la programmation impérative, un programme est une succession d'instructions qui peuvent modifier l'état de la mémoire et qui peuvent interagir avec des effets de bord (affichage à l'écran, lecture au clavier, etc.).

Un programme impératif est principalement constitué de séquences d'instructions permettant de modifier l'état de la mémoire (affectation) et d'instrutions permettant de modifier le flux d'exécution : tests, boucles. On peut aussi trouver des instructions de "branchement", (goto).

II. Quelques exemples

Nous allons regarder l'implantation d'un algorithme calculant le n-ieme terme de la suite de Fibonacci itérativement dans différents langages impératifs.

A. Version Python

def fibo(n):
    if n <= 0:
        print("valeur incorrecte")
        return -1
    val = 0
    if n == 0 or n == 1:
        val = 1
    else:
        ua = 1
        ub = 1
        for indice in range(2, n+1):
            ua, ub = ub, ua + ub
        val = ub
    return val

n = int(input("Saisissez un indice : "))
resultat = fibo(n)

print("fibo(" + str(n) + ") = " + str(resultat))
  

B. Version Java

import java.io.Console;

public class Fibo {
    private static int fibo(int n) {
	int retour;
	if (n == 0 || n == 1) {
	    retour = 1;
	} else {
	    int ua = 1;
	    int ub = 1;
	    for (int i = 2; i <= n; i++) {
		int tmp = ua;
		ua = ub;
		ub = ua + tmp;
	    }
	    retour = ub;
	}
	return retour;
    }
    
    public static void main(String... args) {
	Console console = System.console();
	console.printf("Saisissez un indice : ");
	String saisie = console.readLine();
	int valeur = Integer.parseInt(saisie);
	int resultat = fibo(valeur);
	console.printf("fibo(%d) = %d\n", valeur, resultat);
    }
}

N.B. : Vous pouvez tester ce programme en le recopiant dans la page web suivante : Interpréteur Java en ligne (il faut juste changer le public class Fibo en public class Main.

C. Version Kotlin

fun fibo(n: Int): Int {
    var retour: Int
    when(n) {
        0, 1 -> retour = 1
        else -> {
            var ua = 1
            var ub = 1
            for (i in 2..n) {
                var tmp = ua
                ua = ub
                ub = ua + tmp
            }
            retour = ub
    	}
    }
    return retour
}

    
fun main() {
    print("Saissez un indice : ")
    var saisie = readLine()
    var valeur: Int?
    valeur = saisie?.toIntOrNull()
    if (valeur != null) {
        var resultat = fibo(valeur)
        println("Fibo(${valeur}) = ${resultat}")
    }
}

N.B. : pour tester la version Kotlin, vous pouvez la recopier dans l'interpréteur en ligne de Kotlin. Par contre, la fonction readLine() ne marchera pas ; il faudra simuler son exécution en mettant à la place directement la chaîne de caractères contenant l'indice sensé être saisi.

D. Version en BASIC

Le BASIC (Beginner's All-purpose Symbolic Instruction Code)) est un langage développé en 1963 et qui, comme son nom l'indique, était plutôt dédié aux débutants. Ce langage n'a jamais été standardisé, et il en existe de multiples versions (jusqu'au Visual Basic de Microsoft, qui n'a plus grand chose à voir avec le BASIC initial). Dans ce langage, les fonctions n'existent pas (il faut utiliser à la place des GOSUB... RETURN, et les lignes d'un programme doivent être numérotés. Par ailleurs, l'absence de la notion de bloc d'instruction oblige à utiliser les GOTO à haute dose. Voici un exemple de calcul d'un terme de la suite de Fibonacci, programme que vous pouvez exécuter en vous rendant sur cette page :

10 INDICE = 6
20 GOSUB 100
30 PRINT R
40 END
100 IF INDICE > 1 THEN GOTO 200
110 R = 1
120 RETURN
200 UA = 1
210 UB = 1
220 FOR I = 2 TO INDICE+1
230 TMP = UA
240 UA = UB
250 UB = UA + TMP
260 NEXT I
270 R = UB
280 RETURN