Exercice 1 :
Ecrire un sous programme qui reçoit un nombre réel, comme paramètre, teste s’il est négatif,
positif ou nul et affiche le résultat à l’écran.
Prévoir un algorithme appelant ce sous programme.
Procedure signe(a :réel);
Debut
Si a>0 alors
Ecrire (‘le nombre est positif’)
Sinon
Si a<0 alors
Ecrire (‘le nombre est negatif’)
Sinon
Ecrire (‘le nombre est nul’) ;
Finsi
Finsi
fin
Algorithme determination signe ;
Var
X : réel ;
Debut
Ecrire(‘Entrer un nombre réel ‘) ;
Lire(x) ;
Signe(X) ;
fin
Exercice 2 : Ecrire un algorithme en utilisant une fonction pour sommer des éléments d'un
tableau d'entiers
Solution
Type : tab=tableau (50) :entier
fonction somme( T:tab, max_indice: entier):entier;
variable s, i:entier;
début
s0;
pour i 1 à max_indice
ss+T[i]
finpour
retourne(s)
fin
Algorithme Exo2
Variable Som, n,i : entier
T:tab
Debut
Lire (n);
pour i 1 à n
lire (T[i]) ;
fin pour
somsomme(T,n) ;
ecrire (’’la somme des éléments du tableau est : ‘’,som) ;
Fin
Exercice 3 :
Ecrire deux fonctions : une de calcul de moyenne d’un tableau et l’autre pour extraire le
minimum des éléments dans un tableau.
Exercice 4 :
Ecrire une fonction qui calcule le nombre d’occurrences d’un élément donné dans un tableau.
Exercice 5 : Ecrire sous forme d’une procédure la somme de deux matrices réelles
Algorithme Somme_Matrices
Type M=tableau [1..2,1..3] de entier
Variables : A, B, C : M ; i, j en entier
Procédure lecture (S X :M)
Début
Pour i de 1 à 2 Faire
Pour j de 1 à 3 Faire
Lire X(i,j)
Fin Pour
Fin Pour
Fin
Procedure calcul (E A,B:M, S C :M)
Debut
Pour i de 1 à 2 Faire
Pour j de1 à 3 Faire
C[i, j] 2*A[i,j]-3*B[i,j]
Ecrire ("C[", i, j, "]"=C[i,j])
Fin Pour
Fin Pour
Fin
Debut
Lecture(A)
Lecture(B)
Calcul(A,B,C)
Exercice 6 : Ecrire un algorithme qui permet à l’aide d’une procédure appelée lecture et une
fonction appelée calcul de :
- Saisir un tableau T(20) d’entiers.
- Calculer P le nombre des éléments pairs.
- Calculer R le nombre des éléments impairs.
- Afficher P et R.
Solution
Algorithme pairs_impairs
Type mat=tableau [1..2,1..4] de entier
Variable Tableau : M en mat
i, j, P, R en entier
Procedure lecture (S M :mat)
Début
Pour i de 1 à 2 Faire
Pour j de 1 à 4 Faire
Ecrire ("M [", i, j, "]")
Lire M(i,j)
Fin Pour
Fin Pour
Fin
Procedure calcul (E M :mat, S P,R :entier)
Debut
P0 ; R0 ;
Pour i de 1 à 2 Faire
Pour j de 1 à 4 Faire
Si (M[i,j]mod2 =0) Alors PP+1
Sinon RR+1
Fin Si
Fin Pour
Fin Pour
Fin
Debut
Lecture (M)
Calcul (E,P,R)
Ecrire (" le nombre d éléments pairs P = ", P)
Ecrire (" le nombre d éléments pairs R = ", R)
fin
Exercice 7 :
Ecrire un traitement qui informe si un tableau envoyé en argument est formé ou non
d'éléments tous rangés en ordre croissant.
Solution
Fonction TableauCroissant(T, n)
Variable i en Numérique
Variable Flag en Booléen
Début
Flag ← VRAI
i ← 0
TantQue Flag et i < n-1
Flag ← T(i) < T(i+1)
i ← i+1
FinTantQue
Renvoyer Flag
FinFonction
UNIVERSITE HASSAN II – MOHAMMEDIA CASABLANCA
FACULTE DES SCIENCES BEN M’SIK
ANNEE UNIVERSITAIRE 2014-2015
TD d’Algorithmique II : Série 2
Exercice 1 :
Ecrire une fonction récursive qui permet le calcul du carré d’un entier positif.
Exercice 2(correction dans le cours) : Ecrire de manière récursive une fonction qui donne le
plus grand commun diviseur (pgcd) de deux entiers.
Trouver les relations de récurrence en utilisant une méthode de détermination du pgcd basée
sur la soustraction
Exercice 3 (dans le cours)
Reproduire l’exercice du calcul du nombre d’occurrences d’un élément donné dans un tableau
sous la forme d’une fonction récursive.
Début Fonction Occurence (i: ENTIER, T:TAB, n:ENTIER, X:ENTIER):Entier
Si (i<=n) Alors
Si (T[i]=X) Alors
Occurence <-- 1 + Occurence(i+1,T,n,X)
Sinon
Occurence <-- Occurence(i+1,T,n,X)
FinSi
FinSI
Fin Occurence
Exercice 4 :
Ecrire une fonction récursive qui teste l'existence d'une lettre donnée dans une chaîne de
caractères donnée.
1
UNIVERSITE HASSAN II – MOHAMMEDIA CASABLANCA
FACULTE DES SCIENCES BEN M’SIK
ANNEE UNIVERSITAIRE 2014-2015
Exercice 5 (correction dans le cours)
On appelle palindrome une chaîne de caractère qui donne la même chaîne selon que l'on la
lise de gauche à droite ou inversement. Autrement dit, le premier caractère est égal au dernier
caractère, le deuxième caractère est égal à l'avant dernier caractère, etc.
Une définition récursive d'un palindrome est:
· La chaîne vide est un palindrome.
· La chaîne constituée d'un seul caractère est un palindrome.
· aXb est un palindrome si a = b et si X est un palindrome.
Ecrire une fonction récursive qui teste si une chaîne de caractères et qui renvoie vrai si elle
palindrome et faux si elle ne l’est pas.
2
UNIVERSITE HASSAN II – MOHAMMEDIA CASABLANCA
FACULTE DES SCIENCES BEN M’SIK
ANNEE UNIVERSITAIRE 2014-2015
TD d’Algorithmique II : Série 3
Exercice 1 :
On souhaite mémoriser des noms des personnes dans un fichier nommé « personne.dat »
On vous demande alors de créer les sous-programmes qui suivent :
Une procédure de création du fichier qui contient les noms des personnes.
Une procédure d’affichage des noms de personnes.
Une fonction qui permet de chercher un nom passe en argument et qui renvoie vrai si
ce dernier est existant et faux sinon.
Une procédure qui copie les noms sans compter le nom passe en paramètre.
Ecrire le programme principal faisant appel aux différents sous-programmes.
1
UNIVERSITE HASSAN II – MOHAMMEDIA CASABLANCA
FACULTE DES SCIENCES BEN M’SIK
ANNEE UNIVERSITAIRE 2014-2015
2
UNIVERSITE HASSAN II – MOHAMMEDIA CASABLANCA
FACULTE DES SCIENCES BEN M’SIK
ANNEE UNIVERSITAIRE 2014-2015
3
UNIVERSITE HASSAN II – MOHAMMEDIA CASABLANCA
FACULTE DES SCIENCES BEN M’SIK
ANNEE UNIVERSITAIRE 2014-2015
TD d’Algorithmique II : Série 4
Exercice 1 :
let f x y =
let r = ref 0 and s = ref y in
while !s > 0 do
r := !r+x ;
s := !s-1 ; def divEucl(a,b): # Division euclidienne de a par b
done ; q=0
s := y-1 ; r=a
let t = ref !r in while (r >= b):
while !s > 0 do r=r-b
r := !r+ !t ; q=q+1
s := !s-1 ; return q, r # r_esultat attendu : a = q.b+r avec
done ; 0<=r<b
!r ; ;
Solution
Solution
1
UNIVERSITE HASSAN II – MOHAMMEDIA CASABLANCA
FACULTE DES SCIENCES BEN M’SIK
ANNEE UNIVERSITAIRE 2014-2015
Exercice 2 : Algorithme 2 : Calcul de xn
Fonction puissance(n :entier,x :réel) :réel
c :entier
début
c=n
p=1
tant que c>0 faire
p=p*x
c=c-1
retourne p
finfonction
solution
2
UNIVERSITE HASSAN II – MOHAMMEDIA CASABLANCA
FACULTE DES SCIENCES BEN M’SIK
ANNEE UNIVERSITAIRE 2014-2015