Licence d’Informatique

TD d’IP : Feuille 2

Boucles

Objet

• Boucles.

• Tableaux.

• Styles de programmation.

Exercice 1 :

a- Ecrire en C une fonction fibonacci prenant en entrée un entier n et renvoyant comme résultat fibonacci(n).

b- Décrire le contenu des différents fichiers nécessaires pour utiliser cette fontion depuis la ligne de commande en respectant les principes présentés lors du TD1.

c- Expliquer pourquoi le code proposé en correction de la question a- produit les résultats suivants, visiblement faux pour 47 :

> fibonacci 43
433494437
> fibonacci 44
701408733
> fibonacci 45
1134903170
> fibonacci 46
1836311903
> fibonacci 47
-1323752223

d- Modifier la solution proposée précédemment pour prendre en compte ce problème avec assert.

Exercice 2 : Dans cet exercice, n désigne la taille du tableau manipulé.

a- Ecrire une fonction position prenant en entrée un tableau d’entiers t et un entier i et renvoyant la première position de i dans t.

b- Ecrire une fonction qui recherche le plus petit couple (i, j) tel que t[i] est pair, t[j] est impair et i + j = n − 1.

c- Soit m la moyenne des éléments présents dans le tableau. Rechercher le premier élément x de t tel que x − m soit positif et minimum. d- La longueur d’un chemin dans un tableau est calculée comme suit :

– Partir d’un élément du tableau

– A chaque étape, ajouter à la longueur du chemin la valeur de l’élément courant et se déplacer sur l’élément ayant pour indice cette valeur.

– S’arrêter si la valeur de l’élément est en dehors des bornes des indices du tableau. e- Même question que pour d-, mais avec une matrice et le protocole suivant : si v est la valeur

de l’élément courant et i, j ses indices, se positionner en m[v][i].

Exercice 3 : Programmer un module diviseurs offrant les services suivants :

• donner la liste des diviseurs d’un entier n ;

• tester si un entier est premier. Le module doit être programmé de façon à ce que les diviseurs d’un nombre ne soient par recalculés plusieurs fois.