Exercices à résoudre 1. Écrire un programme qui lit d’abord un nombre entier positif N, puis, N nombres entiers, et qui affiche leur somme, leur produit et leur moyenne. Concevez ce programme en utilisant une structure (i) while (ii) do – while (iii) for. Laquelle des trois variantes est la plus naturelle pour ce problème ? 2. Calculez par des soustractions successives le quotient entier et le reste de la division entière de 2 entiers positifs entrés au clavier. 3. Calculez la factorielle d’un entier naturel N sachant que 0! = 1. 4. Lire un nombre naturel quelconque et afficher celui-ci en sens inverse. Ex. : Entrée : 1234 5. Sortie : 4321. Écrire un programme qui permet d’afficher le graphique d’un polynôme f(x) de degré n évalué à l’aide de la règle de Horner. Les coefficients du polynôme sont lus dans l’ordre suivant : an, an-1, …, a1, a0. Le graphique sera tracé pour des valeurs de x allant de u à v (u, u + 1, u + 2, …, v) où u et v sont 2 entiers saisis à l’écran. Pour chaque valeur de x entre u et v, il s’agit d’afficher sur une même ligne f(x) étoiles. On suppose que f(x) ≥ 0 pour chaque valeur de x entre u et v. Exemple : f(x) = x2 + 2 x + 1 avec u = 0 et v = 4. * **** ********* **************** ************************* 6. Écrire un programme qui affiche le nième nombre de Fibonacci. La suite de Fibonacci est définie comme suit : 1, 1, 2, 3, 5, 8, 13, 21, … ou encore, de façon plus succincte, f1 = f2 = 1, fn = fn-1 + fn-2 n ≥ 3. 7. Un palindrome est un nombre, un mot ou une phrase qui reste identique quelque soit le sens dans lequel on le lit. Par exemple, chacun des nombres à cinq chiffres suivants est un palindrome : 12321, 55555, 45554 et 11611. Écrivez un programme capable de lire un entier à cinq chiffres et pouvant déterminer si cet entier est un palindrome ou non. 8. Calculez la valeur de à partir de la série infinie = 4 – 4/3 + 4/5 – 4/7 + 4/9 – 4/11 + … Affichez une approximation de à d décimales près où le paramètre d est saisi au clavier. 9. (Triplets de Pythagore) Un triangle droit peut posséder des côtés qui sont tous des entiers. La série des trois valeurs d’entiers des côtés d’un triangle droit s’appelle triplet de Pythagore. Ces trois côtés doivent satisfaire la relation qui dit que la somme des carrés de deux des côtés est égale au carré de l’hypoténuse. Trouvez les triplets de Pythagore pour cote1, cote2 et hypotenuse (les valeurs ne doivent pas dépasser 500). Utilisez une boucle for imbriquée qui essaie toutes les possibilités. 10. Écrivez un programme qui affiche le motif de losange ci-dessous. Chaque côté du losange est formé de n étoiles (n est entré au clavier). n=5 * *** ***** ******* ********* ******* ***** *** * 11. Lire un nombre entier naturel d’au plus 4 chiffres et le traduire en français. Ex. : 254 devient deux cent cinquante quatre. 12. Écrivez un programme traçant une régression linéaire : une ligne correspondant à la meilleure approximation d’un ensemble de points. Vous devez lire l’entier N désignant le nombre de points; puis, les coordonnées des N points (xi, yi), i = 1, 2, …, N. La régression linéaire est une ligne dont l’équation est : y = y + m (x -x), où m = xi yi – nxy xi2 – nx 2 x est la moyenne des xi et y est la moyenne des yi. 13. Pour trouver le zéro d’une fonction f(x) dont la dérivée est connue, on peut utiliser la méthode itérative de Newton-Raphson. Il s’agit de calculer : xk+1 = xk – f(xk) / f '(xk). Cette méthode parvient au même algorithme de recherche de la racine carrée d’un nombre. Trouver la racine carrée de a revient à trouver un zéro pour f(x) = x2 – a. Cette méthode généralise donc le calcul de la racine nième. Écrire un programme calculant la racine nième d’un nombre à virgule flottante. Les valeurs de a et de n sont saisies au clavier. 14. Notre objectif est d’effectuer une approximation de la fonction f(x) = ax, a > 0 constante connue, au moyen de la série convergente : S(x) = 1 + (x ln a) / 1! + (x ln a)2 / 2! + … + (x ln a)N / N! Pour toute valeur de x, cette série est telle que S(x) tend vers ax, quand N tend vers l’infini. Les points particuliers suivants doivent être pris en compte afin d’effectuer une approximation correcte : - Précision de l’approximation : Étant donné que le terme (x ln a)N / N! tend vers zéro quand N tend vers l’infini, l’approximation est d’autant meilleure qu’un plus grand nombre de termes est calculé. Les termes de la série devront être calculés jusqu’à ce que (x ln a)N / N! soit inférieur à un nombre arbitrairement petit « epsilon », indiqué en paramètre, qui fixera la précision de l’approximation. - Convergence de la série : Bien que toujours convergente, la série converge beaucoup plus lentement lorsque x est négatif (dans ce cas, les termes de la série sont de signe alterné). Afin d’éviter cet inconvénient, on utilisera le fait que a-x = 1 / ax, et on n’effectuera l’approximation que pour x ≥ 0. - Calcul efficace du Nième terme de la série : Posons T(N) le Nième terme de la série = (x ln a)N / N!, il s’ensuit que T(0) = 1 et T(N) = T(N – 1) * x / N * ln a N ≥ 1. En observant la relation de récurrence précédente entre les termes successifs, le calcul de chacun des termes de la série peut être effectué beaucoup plus efficacement. 14. Écrire un programme permettant d’évaluer la fonction f(x) suivante pour une valeur de x donnée. f(x) = 5 si x (0, 3.5] [-1, -0.5] x – 2 si x ≥ 4 0 sinon. -----------------------------------------