Table des matières

Raisonner pour programmer

Où l'on cherche à exprimer formellement un problème et à établir les liens entre les différentes formes d'énoncés.

Quelques problèmes classiques

Pour chacun des problèmes suivants :

(1)

Description

Le plus petit nombre (x) d'un tableau t de n nombres.

données et résultat
énoncé qualifiant le résultat
énoncé définissant le résultat
x(a) = a s'il s'agit d'un tableau à un seul élément
x(a::t) = x(t) si x(t) < a
a sinon

2)

énoncé exécutable en C
int
min (int *t, int n){
    int x=t[0], i;
    for (i=1;i<n;i++){
        if (x>t[i]) x = t[i];
        }
    return x;
    }

(2)

Description

Le quotient q de la division euclidienne de deux nombres entiers a et b

données et résultat
énoncé qualifiant le résultat
énoncé définissant le résultat
q(a, b) = 0 si a < b
1 + q(a-b, b) sinon
énoncé exécutable en C
int quot(int a, int b){
    int q = 0;
    if (a >= b) q = 1 + quot(a-b, b);
    return q;
}

(3)

Description

Le plus grand diviseur (p) d'un tableau t de n nombres

données et résultat
énoncé qualifiant le résultat
énoncé définissant le résultat
p(a) = a
p(a::t) = pgcd(a, p(t))
pgcd(a, b) = b : si a = 0 (ou a = b)
pgcd(a-b, b) : si a > b
pgcd(b, a) : si a < b
énoncé exécutable en C
int 
divComm(int *t, int n){
int i=0, p=t[0];
for (i=1; i< n ; i++) [p = pgcd(p,t[i]);
}
return p;
}

int pgcd(int a, int b){
    if (a==0) return b;
    if (a>b) return pgcd(a-b, b);
    if (b>a) return pgcd(b, a);
    }

—-

(4) : à rendre le 18/02

ma copie (privée)

Description

La racine carrée (r) d'un nombre carré n

données et résultat
énoncé qualifiant le résultat
énoncé définissant le résultat
énoncé exécutable en C

(5)

Description

Le tri d'un tableau t de n nombres (on nomme u le tableau trié).

données et résultat
énoncé qualifiant le résultat
énoncé définissant le résultat
énoncé exécutable en C

"La plus petite somme"

Mêmes questions que précédemment pour le problème suivant :

Description

Étant donnée un tableau t de n nombres, le résultat s est la plus petite somme d'éléments consécutifs dans t.

Exemple :

indice 0 1 2 3 4 5 6 7 8 9 10
élément 1 -2 3 -1 -5 -4 1 0 -2 5 -1
s = -11 + + + + +
données et résultat
énoncé qualifiant le résultat
énoncé définissant le résultat
énoncé exécutable en C
1) \left[\left[0, n-1\right]\right] est la notation choisie pour indiquer les entiers de 0 à n-1 pour éviter confusion avec un intervalle continu fermé, et peut aussi être écrit \left[0.. n-1\right]
2)a::t est notation empruntée de Caml–je crois–signifiant un élément a suivi d'un tableau t, qui peut être un seul élément.