Université Cadi Ayyad
Faculté des Sciences Semlalia Marrakech
Département d’Informatique
TD4- Algorithmique I
Module informatique SMIA-S2
2020-2021
Procédures et Fonctions
Solution
Exercice 1 :
1. Ecrire une procédure Pairproc qui prend en argument un entier
et qui affiche le message « nombre pair » si le nombre est pair
et « nombre impair » sinon.
Ecrire le programme principal pour tester cette procédure
Procedure Pairproc (a :Entier)
Si (a % 2 = 0) alors
Ecrire ("Le nombre",a, " est pair")
Sinon
Ecrire ("Le nombre",a, " est impair")
Finsi
FinProcedure
Algorithme PairImpair
Var x : Entier
Début
Ecrire (" Veuillez saisir un nombre entier :")
Lire(x)
Pairproc(x)
Fin
2. Ecrire un algorithme qui donne le volume d’un cylindre de
rayon r et de hauteur h en faisant appel à une fonction aire qui
prend r comme paramètre qui retourne l’aire d’un cercle.
Fonction AirCylindre (r :Reel) : Reel
Const PI ! 3.14 : Reel
Var a : Reel
a ! PI * r * r
retourne(a)
FinFonction
Algorithme VolumeCylindre
Var r, h, vol : Reel
Début
Ecrire (" Veuillez saisir le rayon et la hauteur du cylindre :")
Lire(r, h)
Vol ! h * AirCylindre(r)
Ecrire (" Le volume du cylindre est :",vol)
Fin
Exercice 2 :
1. Ecrire une fonction max2 qui retourne le maximum de deux
entiers.
a. En utilisant si et sinon
Fonction max2 (a : entier, b : entier) : entier
Si (a > b) alors
retourne (a)
Sinon
retourne (b)
Finsi
FinFonction
b. Sans utilisation de sinon
Fonction max2 (a : entier, b : entier) : entier
Si (a > b) alors
retourne (a)
Finsi
Si (b >= a) alors
retourne (b)
Finsi
FinFonction
2. Ecrire une fonction max3 qui retourne le maximum de trois
entiers en faisant appel à max2 qui retourne le maximum de
deux entiers
Fonction max3 (a : entier, b : entier, c : entier) : entier
Si (a > max2 (b,c) ) alors
retourne (a)
Sinonsi (b > max2 (a,c)) alors
retourne (b)
sinon
retourne (c)
Finsi
FinFonction
3. Ecrire un programme PREMIERS affichant les nombres premiers
inférieurs à 100. On utilisera une fonction Premier prenant un
nombre entier et retournant vrai si le nombre est premier, faux
sinon.
Fonction Premier (a : entier) : Booléen
Var test, i : Entier
test ! 0
Pour i ! 2 jusqu'à a-1
Si (a mod i = 0) alors
test ! 1
Finsi
Finpour
Si (test = 1) alors
retourne (faux)
Sinon
retourne (vrai)
Finsi
FinFonction
Algorithme PREMIERS
Var n : Entier
Debut
Pour n allant de 2 jusqu'à 100
Si (Premier (n) = vrai)
Ecrire (n, "est premier")
Finsi
Finpour
Fin
4. Écrire une fonction fact qui renvoie la factorielle d’un nombre n :
n! et une fonction puissance qui calcule la puissance nième d’un
nombre x : xn
Fonction Fact (n : entier) : Entier
Var fct, i : Entier
Si (n = 0) alors
fct ! 1
Sinon
fct ! 1
pour i allant de 1 jusqu'à n
fct ! fct * i
Finpour
Finsi
retourne (fct)
FinFonction
Fonction Puissance (X : entier, n : Entier) : Entier
Var puiss, i : Entier
puiss ! 1
Pour i allant de 1 jusqu'à n
puiss ! puiss * x
Finpour
retourne (puiss)
FinFonction
5. Ecrire un algorithme qui calcule la somme des puissances p-ième
des entiers et qui utilise la fonction puissance précédemment
définie :
Algorithme Somme_puissance
Var p, n, S, i : Entiers
Début
i!0
Ecrire (" Entrer la puissance p et le nombre n :")
Lire(p,n)
S!0
Pour i allant de 1 jusqu'à n
S ! S + Puissance(i,p)
Finpour
Ecrire(" La somme des puissances est : ", S)
Fin
Exercice 3 :
Ecrire une fonction calPGDC qui prend comme paramètres deux
nombres a et b et qui renvoie le plus grand commun diviseur de a et b
(avec a>=b). On utilisera le fait que si b=0 alors PGDC(a,b)=a et sinon,
en appelant r le reste de la division euclidienne de a par b (a mod b)
alors le pgdc de a et de b est aussi le pgdc de b et de r
Ecrire un programme TEST qui permet de tester cette fonction
Fonction calPGDC (a : Entier, b : Entier) : Entier
Var r, x, y : Entier
Si (a > b) alors
x!a
y!b
Sinon
x!b
y!a
Finsi
Si (y = 0) alors
retourne(x)
Sinon
r ! x mod y
Tantque (r != 0) faire
x!y
y!r
r ! x mod y
Fintantque
retourne(y)
Finsi
FinFonction
Algorithme TEST
Var n, m : entier
Début
Ecrire (" entrer deux nombres")
Lire(n,m)
Ecrire(" Le PGDC de ", n, " et ", m, " est : ", calPGDC (n,m))
Fin