Utilitaires Algorithmes paramétrés [ss01] - Outils

Transcription

Utilitaires Algorithmes paramétrés [ss01] - Outils
Utilitaires Algorithmes paramétrés [ss01] - Outils
Karine Zampieri, Stéphane Rivière, Béatrice Amerein-Soltner
Unisciel
algoprog
Version 9 avril 2015
Table des matières
1 Utilitaires Algorithmes paramétrés / ss01outils (C++, TP)
1.1 Fonction aleatoire (entier pseudo-aléatoire) . . . . . . . . . . . . .
1.2 Fonction evalBool (valeur numérique d’un booléen) . . . . . . . .
1.3 Fonction carre (carré d’un entier) . . . . . . . . . . . . . . . . . .
1.4 Fonction divisible (test de divisibilité) . . . . . . . . . . . . . . . .
1.5 Fonction multiple (test de multiplicité) . . . . . . . . . . . . . . .
1.6 f : prévu pour Fonction fahrenheit (conversion celsius->fahrenheit)
1.7 Fonction aleaEntier (entier aléatoire dans [a..b]) . . . . . . . . . .
1.8 h : prévu pour Fonction aleaReel (réel aléatoire dans [a,b]) . . . .
1.9 Fonction max2r (maximum de deux réels) . . . . . . . . . . . . .
1.10 j : prévu pour min2r . . . . . . . . . . . . . . . . . . . . . . . . .
1.11 Fonction celsius (conversion fahrenheit->celsius) . . . . . . . . . .
1.12 l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.13 Fonction max2i (maximum de deux entiers) . . . . . . . . . . . .
1.14 Fonction min2i (minimum de deux entiers) . . . . . . . . . . . . .
1.15 Procédure ordonner2i (reordre de deux entiers) . . . . . . . . . . .
1.16 Procédure permuter2i (permutation de deux entiers) . . . . . . . .
1.17 Procédure quorest (quotient et reste de la division entière) . . . .
1.18 r : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.19 Fonction signe (signe d’un entier (-1, 0, 1)) . . . . . . . . . . . . .
1.20 Procédure permuter3i (permutation de trois entiers) . . . . . . . .
1.21 Procédure ordonner3i (reordre de trois entiers) . . . . . . . . . . .
1.22 Fonction dansIntervalle (test d’un entier dans [a..b]) . . . . . . . .
1.23 Fonction dansRIntervalle (test d’un réel dans [a,b]) . . . . . . . .
1.24 Procédure echanger3i (permutation de trois entiers) . . . . . . . .
1.25 Fonction cube (cube d’un entier) . . . . . . . . . . . . . . . . . .
1.26 Fonction arrondi1 (arrondi à une décimale) . . . . . . . . . . . . .
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
2
2
2
2
3
3
3
3
3
3
3
4
4
4
4
4
4
5
5
5
6
6
6
6
7
7
Unisciel algoprog – Utilitaires Algorithmes paramétrés / ss01
1
1.1
2
Utilitaires Algorithmes paramétrés / ss01outils (C++,
TP)
Fonction aleatoire (entier pseudo-aléatoire)
Écrivez une fonction aleatoire(n) qui tire et renvoie un entier pseudo-aléatoire dans
[0..n-1].
Outil
C++ La fonction rand() est définie dans la bibliothèque <cstdlib>. Elle renvoie un entier pseudo-aléatoire dans [0..RAND_MAX]. Utilisez le modulo pour projeter l’entier
dans l’intervalle [0..n-1].
De plus, dans votre programme principal, ajoutez l’instruction :
srand(time(0));
Elle initialise le germe du générateur de nombres pseudo-aléatoires avec l’horloge
système. La fonction time est définie dans la bibliothèque <ctime>.
1.2
Fonction evalBool (valeur numérique d’un booléen)
Écrivez une fonction evalBool(b) qui teste et renvoie 1 si un booléen b est Vrai, 0
sinon. Résultats d’exécution.
evalBool(Vrai) ==> 1
evalBool(Faux) ==> 0
1.3
Fonction carre (carré d’un entier)
Écrivez une fonction carre(n) qui calcule et renvoie le carré d’un entier n.
Outil
C++ Utilisez le produit n*n.
1.4
Fonction divisible (test de divisibilité)
Un entier n est divisible par un entier p si (et seulement si) le reste de la division entière
de n par p (c.-à-d. le modulo) est nul.
Écrivez une fonction divisible(n,p) qui teste et renvoie Vrai si un entier n est divisible
par un entier p, Faux sinon.
Outil
C++ L’opérateur mod (reste de la division entière) est noté %.
Unisciel algoprog – Utilitaires Algorithmes paramétrés / ss01
1.5
3
Fonction multiple (test de multiplicité)
Deux entiers sont multiples l’un l’autre si l’un est divisible par l’autre.
Écrivez une fonction multiple(a,b) qui teste et renvoie Vrai si deux entiers a et b sont
multiples l’un l’autre, Faux sinon.
1.6
f : prévu pour Fonction fahrenheit (conversion celsius->fahrenheit)
1.7
Fonction aleaEntier (entier aléatoire dans [a..b])
Écrivez une fonction aleaEntier(a,b) qui calcule et renvoie un entier pseudo-aléatoire
compris dans l’intervalle d’entiers [a..b].
Outil
C++ La fonction rand() est définie dans la bibliothèque <cstdlib>. Elle renvoie un entier pseudo-aléatoire dans [0..RAND_MAX]. Utilisez le modulo pour projeter l’entier
dans l’intervalle [0..n-1].
Aide méthodologique Générez un entier de la longueur de l’intervalle [a..b] (c.à-d. b-a+1) puis ajoutez a.
1.8
h : prévu pour Fonction aleaReel (réel aléatoire dans [a,b])
1.9
Fonction max2r (maximum de deux réels)
Écrivez une fonction max2r(a,b) qui calcule et renvoie le maximum (= le plus grand)
des réels a et b.
1.10
j : prévu pour min2r
1.11
Fonction celsius (conversion fahrenheit->celsius)
L’équivalent Celsius C de F degrés Fahrenheit est :
5
C = (F − 32)
9
Écrivez une fonction celsius(x) qui calcule et renvoie l’équivalent Celsius de x (réel)
degrés Fahrenheit.
Unisciel algoprog – Utilitaires Algorithmes paramétrés / ss01
1.12
l
1.13
Fonction max2i (maximum de deux entiers)
4
Écrivez une fonction max2i(a,b) qui calcule et renvoie le maximum (= le plus grand)
des entiers a et b.
1.14
Fonction min2i (minimum de deux entiers)
Écrivez une fonction min2i(a,b) qui calcule et renvoie le minimum (= le plus petit) des
entiers a et b.
1.15
Procédure ordonner2i (reordre de deux entiers)
Ce problème utilise la procédure permuter2i.
Écrivez une procédure ordonner2i(a,b) qui appelle la procédure permuter2i si b < a
afin de remettre dans l’ordre croissant les contenus des entiers a et b.
Aide simple
Modifiés : les entiers a et b
1.16
Procédure permuter2i (permutation de deux entiers)
Écrivez une procédure permuter2i(a,b) qui permute le contenu des entiers a et b.
Aide simple
Modifiés : les entiers a et b
Rappel de cours
termédiaire.
1.17
Pour permuter deux variables, il faut passer par une variable in-
Procédure quorest (quotient et reste de la division entière)
La division euclidienne est définie par :
∀a, b ∈ N : a = q b + r et 0 ≤ r < b
q est le quotient et r le reste de la division entière de a par b.
Unisciel algoprog – Utilitaires Algorithmes paramétrés / ss01
5
Écrivez une procédure quorest(a,b,quotient,reste) qui calcule le quotient dans quotient
(entier) et le reste dans reste (entier) de la division entière d’un entier a par un entier
b.
Outil
C++ Les opérateurs div (division entière) et mod (reste de la division entière) sont
notés / et %.
Aide simple
Données : les entiers a et b
Résultats : les entiers quotient et reste
1.18
r:
1.19
Fonction signe (signe d’un entier (-1, 0, 1))
Écrivez une fonction signe(n) qui teste et renvoie -1, 0 ou 1 selon qu’un entier n est
strictement négatif, nul, ou strictement positif. Exemples :
signe(5) ==> 1
signe(-8) ==> -1
signe(0) ==> 0
Aide simple
1.20
Le test sur le signe d’un nombre se réalise en le comparant à zéro.
Procédure permuter3i (permutation de trois entiers)
Écrivez une procédure permuter3i(a,b,c) qui permute circulairement (vers la gauche)
les contenus des entiers a, b, c, c.-à-d.
– Le contenu de a va dans c
– Celui de b dans a
– Et celui de c dans b
Aide simple
Modifiés : les entiers a, b et c
Rappel de cours
termédiaire.
Pour permuter deux variables, il faut passer par une variable in-
Unisciel algoprog – Utilitaires Algorithmes paramétrés / ss01
1.21
6
Procédure ordonner3i (reordre de trois entiers)
Ce problème utilise la procédure ordonner2i.
Écrivez une procédure ordonner3i(a,b,c) qui remet dans l’ordre croissant les contenus
des entiers a, b, c, en appelant trois fois la procédure ordonner2i.
Aide simple
Modifiés : les entiers a, b et c
Aide méthodologique
– Ordonnez a et b
– Puis ordonnez b et c
– Puis ordonnez a et b
1.22
Fonction dansIntervalle (test d’un entier dans [a..b])
Écrivez une fonction dansIntervalle(n,a,b) qui teste et renvoie Vrai si un entier n
est dans l’intervalle [a..b] d’entiers, Faux sinon. Exemples :
dansIntervalle(2,4,6) ==> Faux
dansIntervalle(4,-2,6) ==> Vrai
1.23
Fonction dansRIntervalle (test d’un réel dans [a,b])
Écrivez une fonction dansRIntervalle(x,a,b) qui teste et renvoie Vrai si un réel x est
dans l’intervalle [a,b] de réels, Faux sinon.
1.24
Procédure echanger3i (permutation de trois entiers)
Ce problème utilise la procédure permuter2i.
Écrivez une procédure echanger3i(a,b,c) qui permute circulairement vers la gauche
les contenus des entiers a, b, c (c.-à-d. le contenu de a va dans c, celui de b dans a et
celui de c dans b) en utilisant deux fois la procédure permuter2i. (Faites attention à la
position des paramètres !)
Unisciel algoprog – Utilitaires Algorithmes paramétrés / ss01
7
Aide simple
Modifiés : les entiers a, b et c
1.25
Fonction cube (cube d’un entier)
Écrivez une fonction cube(n) qui calcule et renvoie le cube d’un entier n.
Outil
C++ L’opérateur d’exponentiation sur les entiers n’existant pas, le cube de n sera
calculé directement par n*n*n.
1.26
Fonction arrondi1 (arrondi à une décimale)
Écrivez une fonction arrondi1(x) qui calcule et renvoie l’arrondi à une décimale d’un
réel x.

bx ∗ 10 + 0.5c/10 si x ≥ 0
arrondi1 (x) = 
bx ∗ 10 − 0.5c/10 sinon
Outil
C++ La fonction de troncature trunc(x) est définie dans la bibliothèque <cmath>.