Où l'on cherche à exprimer formellement un problème et à établir les liens entre les différentes formes d'énoncés.
Pour chacun des problèmes suivants :
Le plus petit nombre (x) d'un tableau t de n nombres.
| 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 |
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;
}
Le quotient q de la division euclidienne de deux nombres entiers a et b
| q(a, b) = | 0 si a < b 1 + q(a-b, b) sinon |
int quot(int a, int b){
int q = 0;
if (a >= b) q = 1 + quot(a-b, b);
return q;
}
Le plus grand diviseur (p) d'un tableau t de n nombres
| 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 |
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);
}
—-
La racine carrée (r) d'un nombre carré n
Le tri d'un tableau t de n nombres (on nomme u le tableau trié).
Mêmes questions que précédemment pour le problème suivant :
É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 | + | + | + | + | + | ||||||
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.