Programmation C++
Master M2 Informatique --- Feuille n° 1
Exercice n° 1
a)
Écrire une fonction hop de sorte que l'on puisse écrire le code suivant:
int main() {
int x;
hop(x)=4;
std::cout << x << std::endl; // affiche 4
return 0;
}
b) De même, écrire une fonction hip de sorte que l'on puisse écrire
int main() {
int t[6];
hip(t,3)=5;
std::cout << t[3] << std::endl; // affiche 5
return 0;
}
Exercice n° 2
a)
Écrire une fonction byte_print dont l'argument est un long
et qui affiche la valeur de chacun des octets de ce long, séparée
de la suivante par un point.
b) Écrire une fonction byte_swap dont les deux arguments sont des
pointeurs void*, et qui échange les valeurs des octets situés
à ces adresses.
c) Écrire une fonction big_to_little dont l'argument est un long
et qui inverse l'ordre des octets dans cet argument.
d) L'instruction std::cout << std::hex; configure le flot de sortie standard
de sorte que lorsqu'un entier sera envoyé dans le flot, il sera affiché en base hexadécimale.
On souhaite ajouter une instruction uniquement au début de byte_print, pour que le flot de
sortie standard soit configuré pour afficher les entiers en hexadécimal
et qu'à la sortie de la fonction il soit reconfiguré pour
afficher les entiers en décimal. Attention, interdiction de
rajouter une instruction à la fin de la fonction.
e) Créer une bibliothèque de sorte qu'on puisse écrire
#include"long_manip.hh"
int main() {
long a=343366337L;
byte_print(a);
big_to_little(a);
byte_print(a);
return 0;
}
Ce programme doit afficher
Mode hexadecimal
c1.5a.77.14
14.77.5a.c1
f) Rendre inline la fonction big_to_little.
Exercice n° 3
On considère les suites dont la définition par récurrence est u[n+2]=u[n+1]+u_[n].
Écrire une fonction f de sorte, que, si n, x et y sont des entiers
(positifs),
- f(n) retourne u[n] pour u[0]=u[1]=1,
- f(n,x) retourne u[n] pour u[0]=1 et u[1]=x,
- f(n,x,y) retourne u[n] pour u[0]=x et u[1]=y.