---
jupytext:
  text_representation:
    extension: .md
    format_name: myst
    format_version: 0.13
kernelspec:
  display_name: C++17
  language: C++17
  name: xcpp17
---

# Exercice 2

:::{exercice} Boucles et conditionnelles
:points: 13
:::

{raw:latex}`\ `

:::{question}
---
points: 3
temps: 2
objectives:
  remember: ['boucle while']
---
:::

Rappelez la syntaxe et la sémantique de la boucle `while` :

BEGIN SOLUTION

Syntaxe:
```
while ( condition ) {
    bloc d instructions
}
```
Sémantique:
1. évaluer la condition
2. si la condition est vraie
    2.1. exécuter le bloc d'instructions
    2.2. recommencer en 1

END SOLUTION

:::{endquestion}
:::

:::{question}
---
points: 3
temps: 3
objectives:
  apply: ["boucle for", "compteur", "modulo"]
---
:::

Écrivez les lignes de code permettant d'afficher tous les nombres de 3
à 1789 inclus :

```{code-cell}
:tags: [remove-cell]
#include <iostream>
using namespace std;
```

```{code-cell}
/// BEGIN SOLUTION
for (int i = 3; i <= 1789; i++ ) {
    cout << i << endl;
}
/// END SOLUTION
```

... De même pour tous les nombres de 3 à 1789 qui ne sont
multiples ni de 7 ni de 13 :

```{code-cell}
/// BEGIN SOLUTION
for (int i = 3; i <= 1789; i++ )
    if ( i % 7 != 0 and i % 13 != 0 )
        cout << i << endl;
/// END SOLUTION
```

:::{endquestion}
:::

:::{question}
---
points: 4
temps: 4
objectives:
  apply: ['boucle for', 'accumulateur', 'définition de fonction', 'appel de fonction']
---
:::

On suppose définie la fonction `puissance` documentée ci-dessous :

```{code-cell}
/** La fonction puissance
 *  @param x un nombre réel (double)
 *  @param k un nombre entier positif
 *  @return la k-ième puissance x^k de x
 **/
```

```{code-cell}
:tags: [remove-cell]
double puissance(double x, int k){
    double resultat = 1; 
    for ( int i = 1; i <= k; i++ ){
        resultat *= x; 
    }
    return resultat; 
}
```

En utilisant la fonction `puissance`, définissez une fonction nommée
`sommePuissances` qui prend en paramètres un réel $x$ et un entier $n$
et qui renvoie la somme des $n$ premières puissances de $x$. Par
exemple, `sommePuissances(3, 5)` calcule : $3^0 + 3^1 + 3^2 + 3^3 + 3^4$.

```{code-cell}
/// BEGIN SOLUTION
double sommePuissances(double x, int n) {
    double resultat = 0;
    for ( int k = 0; k < n; k++ )
        resultat += puissance(x, k);
    return resultat;
}
/// END SOLUTION
```

:::{endquestion}
:::

:::{question}
---
points: 3
temps: 5
objectives:
  apply: ['fonction récursive']
---
:::

Donnez une définition récursive de la fonction `puissance` :

```{code-cell}
/// BEGIN SOLUTION
double puissanceRecursive(double x, int k) {
    if ( k == 0 )
        return 1;
    else
        return x * puissanceRecursive(x, k-1);
}
/// END SOLUTION
```

:::{endquestion}
:::

:::{endexercice}
:::
