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