Vous êtes sur la page 1sur 11

Université de Ngaoundéré Année académique 2022/2023

Faculté des sciences Licence 1


Département de Mathématiques et Informatique Parcours Informatique/Mathématiques
TD INTRODUCTION A L’ALGORITHMIQUE (INF131)

I. NOTIONS DE BASE
Exercice 1 : Définitions et questions
1. Définir : Algorithmique, Algorithme, Identificateur, Variable, Type de donnée
2. Dessiner le schéma des étapes de la mise au point d'un programme informatique.
3. Quels sont les caractéristiques d'un bon algorithme
4. A quoi sert une boucle dans un algorithme ?

Exercice 2 : Système d’équation


Écrire un algorithme qui lit six nombres réels a, b, c, d, e et f et calcule la solution du système
ax  by  c
d’équations  .
dx  ey  f

Exercice 3 : Sécurité dans une enceinte


On désire sécuriser une enceinte pressurisée. On se fixe une pression seuil et un volume seuil :
pSeuil=2.3 et vSeuil=7.41.
On demande de saisir la pression et le volume courant de l’enceinte d’écrire un script qui simule le
comportement suivant :
 si le volume et la pression sont supérieurs aux seuils : afficher "arrêt immédiat";
 si seule la pression est supérieure à la pression seuil : afficher "augmenter le volume de
l’enceinte";
 si seul le volume est supérieur au volume seuil : afficher "diminuer le volume".
 sinon afficher " tout va bien".

Exercice 4 : Année est bissextile


Une année est bissextile si elle est multiple de 4, et si de plus elle est multiple de 100 elle doit
aussi être multiple de 400. Par exemple :
 1985 non car elle n’est pas multiple de 4 c’est-à-dire 1985 modulo 4 ≠0 ;
 1996 oui car 1996 modulo 4 =0 et 1996 n’est pas multiple de 100.
 1900 non car elle est multiple de 4 et aussi multiple de 100 cependant elle n’est pas multiple
de 400.
 2000 oui car elle est multiple de 4, aussi multiple de 100 et encore multiple de 400.
Ecrire une fonction qui prend en argument une année, puis renvoie 1 si elle est bissextile et 0 sinon.

Exercice 5 : Schéma conditionnel selon cas vaut


Ecrire un algorithme qui demande un numéro de mois à l’utilisateur (compris entre 1 et 12) et
indique en retour son nom et le nombre de jours dans ce mois. Il s'agit de comparer une valeur à une
liste prédéfinie : le schéma conditionnel selon cas vaut est à utiliser.

Exercice 6 : Schéma conditionnel si ( ) alors


Écrire un algorithme qui utilise trois nombres réels a, b, c et informe si les termes de la liste
L = [a,b,c] sont rangés dans l’ordre croissant, dans l’ordre décroissant ou ni l’un ni l’autre.
Exercice 7: Permutation
1. Ecrire un algorithme qui demande à l’utilisateur de faire entrer 2 nombres réels puis les
permutes en utilisant une variable intermédiaire.
2. Réécrire le même algorithme sans utiliser de variable intermédiaire.
3. Donner les avantages et les inconvenants de ses 2 algorithmes.

1
Université de Ngaoundéré Année académique 2022/2023
Faculté des sciences Licence 1
Département de Mathématiques et Informatique Parcours Informatique/Mathématiques
TD INTRODUCTION A L’ALGORITHMIQUE (INF131)

Exercice 8 : Expressions logiques


1. Ecrire un algorithme qui demande deux nombres à l'utilisateur et qui indique si le produit de ces
deux nombres est négatif, positif ou nul. Attention : On impose de ne pas calculer le produit.
2. Réécrire les trois (03) procédures suivantes sans utiliser des conditions composées.
a) b) c)
procédure F1(x, y, z :entier) procédure F2 (a, b, c, d : entier) procédure F3 (a, b, c, d : entier)
debut debut debut
si (x < y) ou (w < z) alors si (a≠b) et ((c = 5) ou (d = 1)) alors si (a ≠ b) ou ((c = 5) et (d = 1)) alors
écrire ('Bonjour') ; écrire('Bonjour') écrire('Bonjour') ;
sinon sinon sinon
écrire('Bonsoir') ; écrire('Bonsoir') ; écrire('Bonsoir') ;
fsi fsi fsi
fin fin fin

Exercice 9 : Identifier un triangle


Les longueurs des côtés d’un triangle sont stockées dans les variables réelles a, b et c. Pour que a, b
et c soient effectivement correctes, la somme de deux quelconque des trois nombres doit être
strictement supérieure au troisième. Écrire un algorithme qui lit trois nombres réels a, b et c et
détermine si a, b et c sont effectivement les côtés d’un triangle. Si oui, alors écrire le message «
Triangle » dans le cas contraire écrire le message « Pas un triangle ».

Exercice 10 : Equation du 2nd degré


Écrire un algorithme qui lit trois nombres réels a, b et c puis calcule les solutions réelles de
l’équation quadratique ax²  bx  c  0 .

Exercice 11 Poster sa lettre


Les tarifs d’affranchissement d’une lettre sont les suivants : en-dessous de 20g : 280 FCFA, à partir
de 20g, mais en-dessous de 50g : 440 FCFA, à partir de 50g : 670 FCFA. Écrire un algorithme qui lit
le poids d’une lettre et imprime le montant de l’affranchissement de la lettre.

Exercice 12 : Boisson alcoolisée


− Si un conducteur a entre 0.5 et 0.8 gramme d'alcool par litre de sang, il a un retrait de
permis de 6 mois et une amende de 2000 francs par décigramme au dessus de 0.5 gramme,
0.5 gramme inclus.
− Si le conducteur a entre 0.8 et 1 gramme d'alcool dans le sang, il a un retrait de permis de 24
mois et une amende de 3000 francs par décigramme au dessus de 0.5 gramme, 0.5 gramme
inclus.
− Au-delà de 1 gramme, le conducteur repasse son permis et paye une amende de 5 000 francs.
Un litre d'alcool pur pèse 800 grammes. Un homme adulte possède environ 8 litres de sang. Une
bouteille d'alcool à 45° possède 45% d'alcool.
À titre indicatif, un verre de 10 cl de boisson alcoolisée à 10° donne une alcoolémie de 0.1 g par litre
de sang.

Écrire un algorithme qui calcule l'amende à payer et le temps de retrait de permis, la quantité de
boisson et la teneur en alcool de chaque boisson étant saisies.

2
Université de Ngaoundéré Année académique 2022/2023
Faculté des sciences Licence 1
Département de Mathématiques et Informatique Parcours Informatique/Mathématiques
TD INTRODUCTION A L’ALGORITHMIQUE (INF131)

Exercice 13 : Le jour d’une date


On veut écrire un algorithme pour calculer le jour de l’année connaissant le mois, le jour du mois et
l’année. Par exemple, si l’entrée de l’algorithme est « 2 7 1983 » la sortie de l’algorithme serait « le
2/7/1983 est le 38ème jour de l’année 1983 ».

Exercice 14 : Les boucles


On souhaite réaliser la saisie du numéro d’un mois (compris entre 1 et 12) avec vérification. Le
principe est que si la saisie est incorrecte, le programme affiche un message expliquant l’erreur de
saisie et demande à l’utilisateur de ressaisir la donnée.
 On utilisera un Répéter pour réaliser la saisie contrôlée.
 Utiliser un TantQue pour réaliser la saisie contrôlée.

Exercice 15 : Suite
Soit (un) n ∊ IN la suite définie par u0 = 1 et la relation de récurrence : un+1 = 3un − 1
valable pour tout n ∈ N. Soit n ∈ N.
1. Ecrire un algorithme qui affiche la valeur de un.
n
2. Ecrire un algorithme qui affiche la valeur de la somme Sn définie par Sn   ui .
i 0

Exercice 16: Série des nombres


Écrire un algorithme qui lit une suite de nombres positifs se terminant par –1 et détermine le plus
grand de ces nombres ainsi que sa position dans la liste.

Exercice 17 : Série des nombres


Écrire un algorithme qui lit une suite de nombres réels se terminant par –1 et afficher le nombre des
réels positifs, nuls et négatifs dans la série. On suppose que le dernier nombre lu (c’est-à-dire -1) fait
partie de la série.

Exercice 18 : Nombre parfait


Un nombre est dit « parfait » s'il est égal à la somme de tous ses diviseurs sauf lui-même. Écrire
l'algorithme qui indique si un nombre saisi au clavier est parfait ou non.

Exercice 19 : Suite de Fibonacci


Le chercheur médiéval Leonardo (Fibonacci) da Pisa, a proposé la suite infinie dans laquelle chaque
terme est la somme des deux termes précédents. Le nème nombre de Fibonacci est défini
récursivement de la manière suivante :
– Si n est égal à 0 ou à 1 alors le nème nombre de Fibonacci est égal à n,
– Si n est supérieur ou égal à 2 alors le nème nombre de Fibonacci est égal à la somme des deux
nombres de Fibonnaci précédents.
Écrire un algorithme qui calcule et imprime les 100 premiers nombres de Fibonacci.

Exercice 20 : Calcul de sin (x)


On aimerait calculer sin (x) jusqu’à l’ordre N donné. Sachant que le développement limité de
3 5 7 9 2 n 1
x 2 n1
sin( x)  x  x  x  x  x  ...  (1)  x ... Pour cela on pose Un   1 
n n

3! 5! 7! 9! (2n  1)! ( 2n  1)!


1. Donner la valeur de U0 ; U1 ; U2 ; U3 .
2. Monter que sin (x) à l’ordre N est égale à S=U0 + U1 + U2 + . . .+ UN.

3
Université de Ngaoundéré Année académique 2022/2023
Faculté des sciences Licence 1
Département de Mathématiques et Informatique Parcours Informatique/Mathématiques
TD INTRODUCTION A L’ALGORITHMIQUE (INF131)

U n1
3. Trouver la relation r entre deux termes consécutifs de la suite Un en calculant r  .
Un
4. Ecrire un algorithme qui demande à l’utilisateur de faire entrer la valeur de x puis calcule
et affiche la valeur de sin(x) jusqu’à l’ordre N=50.
5. Quel est le nombre de fois que votre algorithme exécute les opérateurs × (multiplication)
et / (division).

Exercice 21 : La pendule
1. Ecrivez un algorithme qui demande sous forme de nombres l'heure qu'il est (un nombre pour les
heures, un pour les minutes et un pour les secondes). Cet algorithme indiquera ensuite s'il s'agit
d'une heure valide ou non.
2. Ecrire un algorithme qui lit une heure et il affiche l’heure qu’il sera dans dix- huit (18) secondes
plus tard. Par exemple, si l'utilisateur tape 21, 32 et 12, l'algorithme doit répondre : "Dans 18
secondes, il sera 21 heures 32 minutes 30 secondes".
NB : On suppose que l'utilisateur entre une heure valide. Pas besoin donc de la vérifier.

Exercice 22 : Phrase
Ecrire un algorithme qui lit une suite de caractère représentant une phrase et affiche le mot le plus
long et le nombre des mots lus. On rappel que deux consécutifs mots sont séparés par un seul espace
" " et la phrase se termine par un point.

Exercice 23 : Boucle tant que et la boucle pour


On veut calculer an pour un nombre réel a et un entier positif n.
1. Ecrire deux versions de cet algorithme, la première version utilisera la boucle tantque, la
deuxième utilisera la boucle pour.
2. Evaluer en fonction de a et/ou de n le nombre de tour de boucle nécessaire pour calculer an avec
n
chacun de vos algorithmes. On veut maintenant calculer a
i 0
i

3. Ecrire un algorithme Somme-Puissances qui utilise l’algorithme puissance. Evaluer en fonction


n
de a et/ou de n le nombre de tour de boucle nécessaire pour calculer  a i .
i 0
n
4. Ecrire une deuxième version de l’algorithme permettant de calculer a
i 0
i
en cherchant cette fois-

ci à optimiser le nombre de tour de boucle.

Exercice 24 : Plus Grand Commun Diviseur


Calcul du Plus Grand Commun Diviseur (PGCD) de deux entiers strictement positifs
3. Par l’algorithme d’Euclide :
Le PGCD de a et b est égal à b si ce dernier divise a, sinon le PGCD de a et b est égal au
PGCD de b et de r (où r représente le reste de la division euclidienne de a par b).
a. Ecrire l’algorithme PGCD en utilisant l’opérateur modulo.
b. Que se passe-t-il si a < b ?
4. Par soustraction :
Si a = b, alors PGCD = a, sinon on recommence avec le couple formé par la différence entre
le plus grand et le plus petit.
a. Ecrire l’algorithme correspondant en utilisant une boucle tant que.
b. Donner une majoration du nombre de tests de comparaison.

4
Université de Ngaoundéré Année académique 2022/2023
Faculté des sciences Licence 1
Département de Mathématiques et Informatique Parcours Informatique/Mathématiques
TD INTRODUCTION A L’ALGORITHMIQUE (INF131)

II. LES OBJETS COMPOSÉS

Exercice 1 : Nombre d’occurrence


Soit un tableau d’entier donc les éléments sont déjà triés.
1. Ecrire un algorithme qui permet d’afficher tous les éléments donc le nombre d’occurrence
dépasse trois (03).
2. Ecrire un algorithme qui permet d’afficher le nombre des éléments donc le nombre d’occurrence
dépasse trois (03).
3. Ecrire un algorithme qui affiche le nombre d’occurrence de chaque élément dans le tableau.

Exercice 2 : Vecteur d’éléments ordonnés


1. Modifier le tri par bulles pour obtenir un vecteur trié par ordre décroissant.
2. Modifier le tri par sélection pour obtenir un vecteur trié par ordre décroissant.
3. Modifier le tri par insertion pour obtenir un vecteur trié par ordre décroissant.
4. Écrire un algorithme pour calculer la réunion de deux ensembles représentés par des vecteurs.
5. Écrire un algorithme pour calculer l’intersection de deux ensembles représentés par des vecteurs.
6. Écrire un algorithme pour calculer la différence ensembliste de deux ensembles représentés par
des vecteurs.
7. Écrire un algorithme pour calculer la différence symétrique de deux ensembles représentés par
des vecteurs.

Exercice 3 : Matrice
Soient A et B 2 matrices réelles de m lignes et n colonnes et D une matrice réelle de n lignes de p
colonnes
1. Écrire un algorithme qui calcule et affiche la somme des matrices A et B.
2. Écrire un algorithme qui calcule et affiche le produit des matrices A et D.
3. Écrire une fonction qui prend en entrée A et retourne le plus grand élément de cette matrice.
4. Écrire une procédure qui prend en entrée A et retourne en paramètre le plus grand élément de
cette matrice ainsi sa position ligne/colonne.

Exercice 4 : Exécution d’un algorithme


Algorithme SansNom
const N=200 ;
type Vecteur =TABLEAU [1..N] de réel ;
var i, j, Nbre : entiers ; Val : réel ;
Tab : Vecteur ;
Permut : booléen ;
début
ecrire("Donner le Nombre des éléments dans le Tableau") ;
lire(Nbre) ;
j=1 ;
répéter
PermutFaux ;
pour i  1 à Nbre-j faire
si (Tab[i] < Tab[i+1]) alors
Val Tab[i] ; Tab[i] Tab[i+1] ; Tab[i+1]Val ;
PermutVrai ;
finsi
fpr
jj+1 ;
jusqu’à (Permut=Faux)
fin

5
Université de Ngaoundéré Année académique 2022/2023
Faculté des sciences Licence 1
Département de Mathématiques et Informatique Parcours Informatique/Mathématiques
TD INTRODUCTION A L’ALGORITHMIQUE (INF131)

La suite d’actions (ValTab[i] ; Tab[i] Tab[i+1]; Tab[i+1]Val ;) constitue une (01)


permutation. Les actions (Tab[i]<Tab[i+1]) et (Permut=faux) font deux (02) comparaisons. On
suppose que les comparaisons et les permutations sont les seules opérations dont il faut tenir compte
pour évaluer le temps d’exécution de l’algorithme SansNom.
1. Soit Tab, un vecteur contenant dans l’ordre des indices croissants les valeurs réelles suivantes :
20, 60, 22, 5, 11, 4, 2, 20, 9, 11, 8, 2.
a. Quel est le contenu du vecteur Tab quand j=2 et i=10.
b. Quelle est la valeur de Val et de Permut pour j=4 et i=8.
c. Quel est le contenu du vecteur Tab quand j =8 et i=5 ?
d. Est-il possible d’avoir j=10 et i=5 ? Justifier.
2. Donner le résultat final de l’algorithme SansNom. Que fait cet algorithme?
3. Pour une valeur quelconque de N, quel est le nombre de comparaison et le nombre de
permutation nécessaire pour exécuter l’algorithme SansNom?

Exercice 5 : Enregistrement
Au département de mathématique de l’université de Ngaoundéré, un étudiant est caractérisé par
son matricule, Nom, Prénom, Date de naissance et sont lieu de naissance. Une année académique a
deux(2) sessions comportant chacune six (06) unités d’enseignement.
1. Définir une structure de donnée permettant de stocker les notes des étudiants.
2. Ecrire un algorithme permettant d’enregistrer les notes des étudiants de L1 et L2.
3. A partir de 2) afficher les noms des étudiants qui ont validé tous les UE ;
4. A partir de 2) afficher les noms des étudiants qui ont validé une seule UE ;
5. A partir de 2) afficher les noms des étudiants qui n’ont pas validé d’UE ;
6. A partir de 2) afficher les noms des étudiants qui ont une moyenne générale >= 10.

Exercice 6 : Le Temps
Le temps est une structure composé d’heure, de minute et de seconde (h : m : s).
1. Définir une structure enregistrement qui représente le temps.
2. Ecrire une fonction qui prend en entrée un temps t1 et affiche 1 si c’est un temps valide et 0
sinon.
3. Ecrire une procédure qui prend en entrée un temps et affiche le temps qui sera dans 8 s
4. Ecrire une fonction qui prend en paramètre deux temps t1 et t2 et renvoie la somme de ces
deux temps.
5. Ecrire une fonction qui prend en paramètre deux temps t1 et t2 et renvoie 1 s’ils sont égaux et
0 sinon.

Exercice 7 : Renverser un tableau


Écrire une PROCEDURE / FONCTION qui renverse un tableau (la première valeur devient la
dernière, la deuxième l'avant dernière, etc.). Par exemple, si le tableau est trié en ordre croissant au
début à la fin d’exécution de la PROCEDURE / FONCTION il est trié en ordre décroissant.

Exercice 9 : Manipulation de tableau


Soit Tab un tableau disposant de n nombres réels.
1. Ecrire une fonction qui prend en paramètre d’entrée les variables Tab et N et renvoie 1 si le
tableau est trié et 0 sinon.
2. Ecrire une procédure qui prend en paramètres d’entrées les variables Tab et N et en
paramètres sorties les variables POS et NEG. Les variables POS et NEG doivent
contenir respectivement le nombre de réels strictement positifs et le nombre de
réels strictement négatifs du tableau TAB.

6
Université de Ngaoundéré Année académique 2022/2023
Faculté des sciences Licence 1
Département de Mathématiques et Informatique Parcours Informatique/Mathématiques
TD INTRODUCTION A L’ALGORITHMIQUE (INF131)

III. LES SOUS-PROGRAMMES


Exercice 1 : Compte de voyelles
Définir une fonction qui compte le nombre de voyelles d’un tableau t de N caractères.

Exercice 2 : Tableau
Soit un tableau de taille MAX et disposant de N entiers. ( N  MAX )
1. Définir une fonction SOMME qui fait la somme des éléments du tableau.
2. Définir une procédure SUPPRIME qui supprime l’élément situé à la position k (1  k  N ) du
tableau.
3. Définir une procédure SUPPRIMEVAL qui cherche et supprime le premier élément VAL trouvé
dans le tableau.
4. Définir une procédure INSERTVAL qui insert l’élément VAL à la position k (1  k  N ) du
tableau.

Exercice 3 : Recherche dans un tableau


1. Définir une fonction qui retourne l'indice du premier réel supérieur à x d’un tableau tab, passés
en paramètres. Si x n'est pas présent, elle retourne –1.
2. Définir une fonction qui retourne vrai si le tableau t contient plus d’entiers pairs que d’entiers
impairs.
3. Définir une fonction qui retourne le 2ème plus petit entier d’un tableau t.

Exercice 4: Hörner
Soit P(x) un polynôme de degré n = 3. P(x) peut s'écrire sous la forme suivante :
P( x)  a0  a1 x  a 2 x 2  a3 x 3  a0  x(a1  a 2 x  a3 x 2 )  a0  x(a1  x(a 2  xa3 )) . On peut utiliser cette
forme pour calculer l'image d'un réel x0 par P. C'est la méthode de Hörner.
1. Ecrire l’algorithme qui lit les coefficients et calcule P(X0) où X0 est lu au clavier.
2. Tester cet algorithme avec P(X) = 2 - 4X + 3X2 + 2X3 - 0,5X4 et X0 = 7.
3. Ecrire ce polynôme sous la forme présentée en introduction puis déterminer le nombre
d'opérations effectuées (additions et multiplications) pour calculer P(7).
4. Compter le nombre d'opérations effectuées pour le calcul suivant : P(7) = 2 - 4×7 + 3×72 + 2×73 -
0,5×74

Exercice 5 : Suite de Syracuse


 un
 si un est pair
La suite de Syracuse est définie par u0  IN et pour tout n  IN, un 1   2
+


3un  1 si un est impair
1. Calculer les premiers termes de la suite pour u0 =1 ; u0 =3 et u0 =7. On ne sait pas à l'heure
actuelle s'il existe un entier u0 pour lequel cette suite n'atteint jamais 1.
2. Écrire un programme demandant u0 et n à l'utilisateur et affichant toutes les valeurs u1, u2... un.
3. Écrire un programme demandant u0 à l'utilisateur et affichant toutes les valeurs u1, u2... uN où N
est le plus petit entier k  IN+ tel que uk=1.
4. Modifier votre programme pour qu'il affiche en plus N et le plus grand élément de la séquence
(u0,…, uN)

7
Université de Ngaoundéré Année académique 2022/2023
Faculté des sciences Licence 1
Département de Mathématiques et Informatique Parcours Informatique/Mathématiques
TD INTRODUCTION A L’ALGORITHMIQUE (INF131)

Exercice 6 : Nombre des chiffres


1. Ecrire une fonction NbreChiffres qui retourne le nombre de chiffre d’un entier passé en
paramètre. NB : Tenir compte des entiers négatifs.
2. Ecrire une procédure min&max qui saisit nbr valeurs (nbr est un paramètre non nul du sous-
programme) et qui renvoie (par le biais des paramètres) le minimum, le maximum et la moyenne
des valeurs saisies.
3. Ecrire un algo. qui demande à l’utilisateur d’entrer un entier positive (uneVal), puis :
a. Indique à l’utilisateur si uneVal est un nombre à 3 chiffres,
b. Affiche la factorielle de uneVal,
c. Calcule la racine carrée de uneVal,
Vous devrez pour cela, bien sûr faire appel aux sous-algorithmes définis en 1) et 2)

Exercice 7 : Saisie de nombres Premiers


1. Ecrire une fonction PREMIER qui teste su un nombre est premier ou non.
2. Ecrire une procédure qui utilise la fonction PREMIER pour créer un tableau des N premiers
nombres premiers. Indications :
 Un nombre N est premier s’il n’admet aucun diviseur ]1, N ]
 La fonction SQRT(N) permet de renvoyer la racine carrée du nombre N.

Exercice 8 : les nombres palindromes


Un nombre sera dit « palindrome » s’il peut se lire de gauche à droite et de droite à gauche en
représentant le même nombre. Les nombres suivants sont palindromes : 425524, 121, 3, etc.
1. Ecrire une fonction extrait qui reçoit un entier (nb) en paramètre et qui :
• retourne –1 et ne modifie pas nb si nb<10
• retourne le 1er chiffre de nb et modifie nb en retirant le chiffre de plus fort poids. Par
exemple extrait(4657) retourne 4 et nb vaut au retour 657.
2. Ecrire, en utilisant la fonction précédente une fonction « booléenne » palindrome qui recevant un
entier en paramètre retourne vrai ou faux selon que cet entier est un palindrome ou non
3. Ecrire un programme principal qui teste la première puis la deuxième fonction.

Exercice 9 : Simulation d’un algorithme

Algorithme devinette procédure deviner (V1:entier, var V2:entier, var Rep: bool)
var Essai, Prec: entier ; début
ok : booléen ; ecrire ("début deviner : ", V1, V2) ;
début si (V2 mod 2 = 0) alors
Prec  9 ; V2V2 / 2 ;
répéter sinon
ecrire ("Principal : une donnée SVP : ") ; V2  V2 + (V2 + 1)/2 ;
lire (Essai) ; fsi
ok faux ; Rep  (V1 = V2);
deviner(essai, Prec, ok) ; V1 0 ;
ecrire ("Principal : ", essai, Prec) ; ecrire ("fin deviner : ", V1, V2) ;
jusqu’à (ok) fin
fin

1. Quels sont les affichages de devinette lorsque les données saisies sont 11, 11, 11, 11, ... ?
2. Quelles sont les lignes qui peuvent être supprimées sans que le fonctionnement général de
l'algorithme ne soit modifié?

8
Université de Ngaoundéré Année académique 2022/2023
Faculté des sciences Licence 1
Département de Mathématiques et Informatique Parcours Informatique/Mathématiques
TD INTRODUCTION A L’ALGORITHMIQUE (INF131)

IV. RECURSIVITÉ

Exercice 1: Chaîne de caractères

1. Ecrire une fonction récursive qui inverse une chaîne de caractères.


2. Ecrire une procédure récursive qui inverse une chaîne de caractères.
3. Ecrire une fonction récursive qui prend en entrée une chaîne de caractères sous la forme d'une
somme algébrique de réels, par ex. "− 1,37 +40 -10,08 +7-244" et qui évalue cette somme
algébrique.

Exercice 2: Conversion binaire

1. Ecrire une fonction récursive qui retourne la notation binaire d'un entier naturel. Par exemple
: 25 → 11001.
2. Ecrire une fonction récursive qui retourne la notation décimale d'un nombre binaire. Par
exemple : 11001 → 25.

Exercice 3: Fonction de Morris

Voici la fonction de Morris :


function morris (m, n: integer): integer
begin
if m = 0 then
result := 1
else
result:= morris(m - 1, morris(m, n));
end;
Expliquer pourquoi l'appel de Morris(1,0) ne se termine pas !

Exercice 4 : Somme de deux entiers

Proposer un algorithme récursif de calcul de la somme de deux entiers naturels a et b en supposant que les
seules opérations de base dont vous disposez sont :

− l'ajout de 1 à un entier a : a + 1 ;
− le retrait de 1 à un entier a : a − 1 et
− les comparaisons à 0 d'un entier a : a = 0, a > 0 et a < 0.
Comment étendre cette fonction aux entiers de signe quelconque ?

Exercice 5: Produit de deux entiers

Proposer un algorithme récursif de calcul du produit de deux entiers naturels a et b en


supposant que les seules opérations de base dont vous disposez sont :
− la somme de deux entiers a et b : a + b ;
− le retrait de 1 à un entier a : a – 1 et
− la comparaison à 0 d'un entier a : a = 0.

9
Université de Ngaoundéré Année académique 2022/2023
Faculté des sciences Licence 1
Département de Mathématiques et Informatique Parcours Informatique/Mathématiques
TD INTRODUCTION A L’ALGORITHMIQUE (INF131)

Exercice 6: Puissance entière d'un nombre réel


Proposer un algorithme récursif de calcul de la puissance n-ième (n ∈ IN) d'un nombre réel a en supposant que
les seules opérations de base dont vous disposer sont :

− le produit de deux réels a et b: a × b ;


− le retrait de 1 à un entier a : a – 1 et ;
− la comparaison à 0 d'un entier a : a = 0.

Exercice 7 : Fonction 91 de McCarthy


n  10 si n  100
f(n)  
 f ( f (n  11)) sinon

1. Que vaut f(96) ;


2. Donner une forme non récursive de cette fonction.

Exercice 8: Palindromes
Un palindrome est un mot dont les lettres lues de gauche à droite sont les mêmes que celles
lues de droite à gauche. Les mots radar, elle, été, ici sont des palindromes.

Proposer deux fonctions, une récursive et l’autre itérative, qui prennent en entrée un mot et le nombre de
caractère de la chaine et renvoie 1 si le mot est un palindrome.

Exercice 9: Les tableaux


1. Donner une version récursive du calcul de la somme des éléments d'un tableau.
2. Donner un algorithme récursif de l'inversion de l'ordre des éléments d'un tableau.

Exercice 10: Recherche récursive


Décrire un algorithme permettant de trouver le minimum et le maximum d’un ensemble quelconque de n
nombre sans faire plus de 3n comparaisons. Justifier votre réponse.
2

Exercice 11 : Compter Les Voyelles


On se propose de compter le nombre de voyelles d’un mot, de façon récursive.

1. Ecrire fonction EstVoyelle (car lettre) : booléen permettant de savoir si un caractère est ou non une
voyelle.
2. Ecrire une méthode récursive nombreVoyelles() qui prend en argument une chaîne de caractères. Dans
le cas où la chaîne passée en paramètres est réduite à la chaîne vide, on arrête la récursion. Dans le cas
où la chaîne a au moins une lettre, on regarde si sa première lettre est une voyelle ou pas et, dans
chaque cas, on réalise un appel récursif adéquat à nombreVoyelle. On va supposer qu’une chaîne vide
est symbolisée par ‘\0’.

10
Université de Ngaoundéré Année académique 2022/2023
Faculté des sciences Licence 1
Département de Mathématiques et Informatique Parcours Informatique/Mathématiques
TD INTRODUCTION A L’ALGORITHMIQUE (INF131)

Exercice 12 : Tours de HANOÏ


Le problème des tours de Hanoï consiste à déplacer N disques de diamètres différents d’une tour de départ à
une tour d’arrivée en passant par une tour intermédiaire et ceci en un minimum de coups, tout en respectant les
règles suivantes :

 on ne peut déplacer plus d’un disque à la fois,


 on ne peut placer un disque que sur un autre disque plus grand que lui ou sur un emplacement vide.

Algorithme Hanoi (n : entier, A : caractère, B : caractère, C : caractère)


début
si n = 1 alors
écrire("déplacer ", A, " vers ", C)
sinon
Hanoi(n-1, A, C, B) ;
écrire("déplacer ", A, " vers ", C)
Hanoi(n-1, B, A, C) ;
fin si
fin

1. Exécuter Hanoi(2, ’a’, ’b’, ’c’), Hanoi(3, ’a’, ’b’, ’c’) et Hanoi(4, ’a’, ’b’, ’c’).
2. Démontrer par récurrence que le nombre de déplacements est 2n – 1.

Exercice 13: Analyse des algorithmes de tri


Donner les versions récursives des algorithmes de tri suivants :

1. Le tri par insertion.


2. Le tri par bulle.
3. Le tri par sélection.

Exercice 14 : Insertion dans un tableau.

Soit Tab, un tableau qui contient n valeurs réelles. En supposant que le tableau est le trié dans l’ordre
croissant. On aimerait insérer un nombre réel x dans le vecteur de telle manière que le tableau Tab reste trié.

Exemple :

Soit le tableau Tab 4 5 5 7 9 11 20 de 7 nombres triés dans


lequel on désire insérer le nombre x=10. Le résultat est un tableau Tab de 8
nombres toujours triés : 4 5 5 7 9 10 11 20
Ecrire une procédure récursive qui prend comme paramètre le tableau Tab, l’entier n (le nombre d’éléments
du Tab) et un nombre réel x, et elle effectue l’insertion de x dans le tableau Tab.

11

Vous aimerez peut-être aussi