Faculté des Sciences de Luminy
Algorithmique et programmation en langage C
Série d’exercices n° 6
Fichier « TD 06.doc » (état du 26/09/2012 à 10:46)
Fonctions récursives
1
Ecrivez une fonction récursive qui calcule XN pour X réel quelconque et N entier positif ou nul. Mettez à profit la
remarque suivante :
( )
1
22
1, si 0
et, si est impair, 1 est pair
et, si est pair, est entier
2
N
N
N
N
X X N N
XN
X N
=
× −
=
2
Le nombre de combinaisons
p
n
C
de p objets parmi n peut être calculé par l’expression récursive suivante (qui définit le
triangle de Pascal) :
<<+
==
=
sinon ,0
0 si ,
ou 0 si ,1
1
1
1
npCC
npp
C
p
n
p
n
p
n
Ecrivez une fonction récursive qui calcule
p
n
C
en fonction de n et p.
3
Une chaîne de caractères est un palindrome si elle a moins de deux caractères ou si son premier et son dernier caractères
sont identiques et la sous-chaîne obtenue en les retirant est elle aussi un palindrome : esoperesteicietserepose. Ecrivez
de façon itérative, puis récursive, la fonction
int palindrome(char *s, int debut, int fin)
qui rend 1 si la suite de caractères s
début
, s
début+1
, … s
fin
constitue un palindrome, 0 sinon.
4
A. Ecrivez la fonction récursive
void miroir(void)
qui lit caractère par caractère (par exemple, en utilisant la
fonction
getchar()
) une chaîne terminée par ‘?’ et l’affiche dans l’ordre inverse de celui de la lecture. Exemple
d’utilisation :
main() {
miroir();
}
Exemple d’exécution de ce programme :
Miroir, qui est la plus belle ?
? elleb sulp al tse iuq ,rioriM
B. Ecrivez une version sans variable locale de la fonction
miroir
.
5
Ecrivez une fonction
void ecriture(int nombre, int base);
qui affiche à l’écran l’expression du
nombre
indiqué dans la
base
indiquée. On supposera que
nombre
est positif ou
nul. Dans une première étape, intéressez-vous au cas où la base est 10.
6
Un graphe est défini par la donnée d’un ensemble de points, appelés sommets, et d’un ensemble de segments, appelés
arêtes, dont les extrémités sont des sommets.
On considère un graphe représentant la carte routière d’une certaine région : les sommets
représentent des carrefours, les arêtes des tronçons de route. Tous les tronçons sont à double
sens ; il n’existe pas deux tronçons différents possédant les mêmes extrémités. Chaque tronçon
est affecté d’un nombre qui exprime sa longueur en Km.
Ce graphe est représenté dans un programme par une matrice M définie par
=sinon ,_
existe elle si ,et sommets lesjoignant arêtel' delongueur
,
MAXINT
ji
M
ji
(INT_MAX est un entier invraisemblablement grand) Ecrivez une fonction récursive
void chemin(int dep, int arr)
qui recherche un (des) chemin(s) sans boucles joignant les sommets
dep
et
arr
. Le chemin sera défini par la suite des
sommets qui le constituent, et sera déposé dans un tableau global
chemin
.
A. Dans une première version, votre programme affichera tous les chemins joignant
dep
à
arr
.
B. Modifiez le programme précédent pour qu’il n’affiche qu’un chemin joignant
dep
à
arr
(le premier trouvé).
C. Modifier le programme du A pour qu’il affiche le chemin le plus court joignant
dep
à
arr
.
12
18
20
5
10
20
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !