Le but de cette série d'exercices est de vous faire pratiquer les fonctions en C++ : prototypage, définition, appel...
Cliquez ici si vous souhaitez faire cet exercice.
Copiez (avec la souris : sélectionnez le texte puis cliquez le bouton du milieu dans Emacs) le contenu suivant dans un fichier portee.cc et compilez-le (ne prêtez pas attention aux «Warnings») et lancez l'exécution.
#include <iostream>
using namespace std;
int variable(10);
int main()
{
{
int variable(5);
cout << "Un, la variable vaut : " << variable << endl;
}
{
cout << "Deux, la variable vaut : " << variable << endl;
}
for (int variable(0); variable < 3; ++variable) {
cout << "Trois, la variable vaut : " << variable << endl;
}
cout << "Quatre, la variable vaut : " << variable << endl;
for (variable = 0; variable < 3; ++variable) {
cout << "Cinq, la variable vaut : " << variable << endl;
}
cout << "Six, la variable vaut : " << variable << endl;
return 0;
}
Écrivez un programme proto.cc dans lequel vous définissez une fonction demander_nombre() respectant le prototype suivant :
int demander_nombre();Cette fonction doit demander à l'utilisateur un entier et le renvoyer.
Écrivez les fonctions suivantes, et testez-les en les appelant dans la fonction main de votre programme sur des exemples:
min2 qui reçoit deux arguments de type double et retourne le plus petit d'entre eux. Le type de retour devra donc être double.
min3 qui prend trois arguments de type double et retourne le plus petit d'entre eux. Comment utiliser la fonction min2 du point précédent pour écrire le corps de min3 en une ligne ?
Écrivez le programme echange.cc dans lequel vous devez écrire (prototype + définition) une fonction echange qui :
Vous essayerez votre fonction avec le code main suivant :
int main()
{
int i(10);
int j(55);
cout << "Avant: i=" << i << " et j=" << j << endl;
echange(i,j);
cout << "Après: i=" << i << " et j=" << j << endl;
return 0;
}
Si votre fonction est correcte, le programme affichera:
Avant: i=10 et j=55 Après: i=55 et j=10
On vous donne les deux fonctions suivantes:
void etoiles(int nb_etoiles)
{
for(int i(0); i < nb_etoiles; ++i) {
cout << '*';
}
}
void espaces(int nb_espaces)
{
for(int i(0); i < nb_espaces; ++i) {
cout << ' ';
}
}
*
***
*****
*
***
*
***
*****
*
***
*****
*******
*
Vous devrez modifier un peu la fonction écrite au point 1. afin que votre sapin ressemble à celui dessiné ci-dessus.
*
***
*****
***
*****
*******
*****
*******
*********
|||
(PGDC = plus grand diviseur commun)
Écrivez le programme pgdc.cc qui :
La méthode utilisée est l'algorithme d'Euclide.
On procédera par itération, comme suit (en notant x / y le quotient et x % y le reste de la division entière de x par y) :
| 0 : initialisation | u0 = 1 | v0 = 0 | ||
|---|---|---|---|---|
| x1 = a | y1 = b | u1 = 0 | v1 = 1 | |
| ... | ... | ... | ... | |
| i+1 : itération | xi+1 = yi | yi+1 = xi % yi | ui+1 = ui-1 - ui(xi / yi) | vi+1 = vi-1 - vi(xi / yi) |
| ... | ... | ... | ... | |
| Valeurs finales | xk-1 | yk-1 != 0 | uk-1 | vk-1 |
| k : condition d'arrêt quand yk = 0 | p = xk | yk = 0 | inutile | inutile |
C'est-à-dire que l'on va calculer de proche en proche les valeurs de x, y, u et v. En calculant à chaque fois les nouvelles valeurs en fonction des anciennes (et en faisant bien attention à mémoriser ce qui est nécessaire à un calcul correct, voir les indications ci-dessous).
Par exemple, yi+1 = xi % yi veut dire : "la nouvelle valeur de y vaut l'ancienne valeur de x modulo l'ancienne valeur de y".
Programmez ces calculs dans une boucle, qui s'execute tant que la condition d'arrêt n'est pas vérifiée.
Pensez à initialiser correctement vos variables avant d'entrer dans la boucle.
Vu les dépendances entre les calculs, vous aurez besoin de définir (par exemple) les variables : x, y, u, v et q=x/y, r=x%y, prev_u, prev_v, new_u et new_v.
Vous mettrez ces variables à jour à chaque itération, à l'aide des formules de la ligne i+1 et des relations temporelles évidentes entre elle (par exemple prev_u = u).
Testez si y est non nul avant d'effectuer les divisions !
Entrez un nombre entier supérieur ou égal à 1 : 654321
Entrez un nombre entier supérieur ou égal à 1 : 210
Calcul du PGDC de 654321 et 210
x y u v
210 171 1 -3115
171 39 -1 3116
39 15 5 -15579
15 9 -11 34274
9 6 16 -49853
6 3 -27 84127
3 0 70 -218107
PGDC(654321,210)=3
Le but de cet exercice est d'écrire un programme cos.cc qui calcule une approximation de la fonction cosinus cos(x) (pour x dans [0, 2*pi])
![]() |
![]() |
![]() |