0% ont trouvé ce document utile (0 vote)
25 vues3 pages

Exo 14

Transféré par

Lamine
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
25 vues3 pages

Exo 14

Transféré par

Lamine
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Travaux Dirigés

Algorithmique et Programmation en C (ANSI)


Exercice 14 – Calcul de puissance rapide

10 juin 2025

Exercice 14 – Calcul de puissance rapide


Objectif
Écrire une fonction qui reçoit comme paramètres un réel x et un
entier n ≥ 0, et retourne xn en utilisant la méthode d’exponentiation
rapide décrite à l’aide des suites (yi ), (pi ) et (zi ) :
– p0 = n, pi+1 = ⌊pi /2⌋
– y0 = x, yi+1 = yi2
– z0 = 1, zi+1 = zi × yi si pi est impair, sinon zi
La suite (pi ) s’annule à partir d’un certain rang, et la valeur zi
correspondante est alors xn .

Algorithme en pseudo-code
Entrée : x réel, n entier ≥ 0
Sortie : xn calculé efficacement
1. z ← 1, y ← x, p ← n
2. Tant que p > 0 faire
– Si p est impair alors z ← z × y
– y ←y×y
– p ← ⌊p/2⌋

1
TD Algorithmique 2

3. Retourner z

Programme C ANSI

1 # include < stdio .h >


2
3 double puissance ( double x , int n ) {
4 double z = 1.0;
5 double y = x ;
6 int p = n ;
7
8 while ( p > 0) {
9 if ( p % 2 == 1) {
10 z *= y ;
11 }
12 y *= y ;
13 p /= 2;
14 }
15
16 return z ;
17 }
18
19 int main () {
20 double x , res ;
21 int n ;
22
23 printf ( " Entrez ␣ un ␣ reel ␣ x ␣ : ␣ " ) ;
24 scanf ( " % lf " , & x ) ;
25
26 printf ( " Entrez ␣ un ␣ entier ␣ n ␣ >= ␣ 0 ␣ : ␣ " ) ;
27 scanf ( " % d " , & n ) ;
28
29 if ( n < 0) {
30 printf ( " Erreur ␣ : ␣ l ’ exposant ␣ doit ␣ etre ␣ >= ␣ 0.\ n ") ;
31 return 1;
32 }
33
34 res = puissance (x , n ) ;
35 printf ( " Resultat ␣ : ␣ %.5 lf ^% d ␣ = ␣ %.5 lf \ n " , x , n , res ) ;
36
37 return 0;
38 }

Listing 1 – Calcul de puissance rapide


TD Algorithmique 3

Exemple d’exécution
Entrez un réel x : 2
Entrez un entier n >= 0 : 10
Résultat : 2.00000^10 = 1024.00000

Vous aimerez peut-être aussi