Avant de commencer les exercices décrits dans cette série, créez le répertoire ~/Desktop/myfiles/cpp/serie15 et travaillez dans ce répertoire.
Par ailleurs, à partir de maintenant les séries sont organisées en 2 parties :
Le but de cet exercice est de reprendre l'exemple du cours illustrant les classes et les objets avec la classe Rectangle.
Cliquez ici si vous souhaitez faire cet exercice.
Le but de cet exercice est d'écrire une classe représentant les cercles.
Écrivez un programme Cercle.cc dans lequel vous définissez une classe Cercle ayant comme attributs privés le rayon du cercle (de type double), et les coordonnées de son centre.
Déclarez ensuite les méthodes «get» et «set» correspondantes, par exemple :
void getCentre(double& x, double& y) const { ... } void setCentre(double x, double y) { ... } ...
NOTE :
ceci n'est qu'un exemple parmi d'autres. Si
vous préférez d'autres prototypes pour ces méthodes, libre à vous
d'implémenter votre solution.
Ajoutez ensuite les méthodes (faisant partie de l'interface) :
La méthode retournera true si le test est positif, et false dans le cas contraire.
Dans le main(), instanciez deux objets de la classe Cercle, affectez des valeurs de votre choix à leur attributs et testez vos méthodes surface et estInterieur.
Remarque : Depuis C++20 (-std=c++20), la constante π est disponible dans la bibliothèque numbers, dans l'espace de noms std::numbers ; p.ex. :
#include <numbers> using namespace std; ... cout << numbers::pi << endl;
Si vous compilez dans une norme antérieure à C++20, la constante π est
souvent définie comme M_PI
dans le
module cmath (#include <cmath>
au début de votre
programme).
Mais comme elle n'est pas officiellement dans le standard, il se peut que votre compilateur ne l'ajoute pas (surtout si on demande expressément un standard avec l'option -std=c++-11
).
Ajoutez alors simplement la ligne suivante en tout début de votre programme, avant même les #include
:
#define _USE_MATH_DEFINES
Si cela ne fonctionne pas non plus, une dernière solution consiste à simplement ajouter les lignes suivantes en début de votre programme, mais après
les #include
et le using namespace std;
cette fois :
#ifndef M_PI #define M_PI 3.14159265358979323846 #endif
Dans cet exercice, nous vous demandons d'élaborer un programme orienté objet de manière indépendante pour la première fois. Nous avons donc organisé l'exercice en 2 parties :
On souhaite ici écrire un programme « simulant » le tour de magie élémentaire suivant :
Un magicien demande à un spectateur d'écrire sur un papier son âge
et la somme qu'il a en poche (moins de 100 francs).
Il lui demande ensuite de montrer le papier à son assistant, qui doit le
lire (sans rien dire), puis effectuer secrètement le calcul
suivant : multiplier l'âge par 2, lui ajouter 5, multiplier le
résultat par 50, ajouter la somme en poche, et soustraire le nombre
de jours que contient une année,
puis finalement donner le résultat à haute voix.
En ajoutant mentalement (rapidement !) 115 au chiffre reçu, le
magicien trouve tout de suite l'âge et la somme en poche (qui
étaient restés secrets).
Modéliser ce tour de magie, en définissant au moins les classes
(simples) Magicien
, Assistant
et Spectateur
.
Il pourrait également être utile de disposer d'une classe
Papier
.
L'instance de Spectateur
devra demander son âge à
l'utilisateur du programme ainsi que la somme d'argent en
poche, et s'assurer qu'une valeur correcte est entrée (entre 0 et 99).
Essayer de faire une modélisation la plus exacte possible ; faire notamment usage des droits d'accès là où cela semble pertinent. Pour chaque méthode, effectuer un affichage à l'écran de l'opération en cours et de l'acteur qui la réalise.
Note : Il existe de nombreuses variantes possibles. Commencer par un modèle très simple, et le faire évoluer pour se rapprocher de la situation « réelle » décrite.
[Spectateur] (j'entre en scène) Quel âge ai-je ? 35 Combien d'argent ai-je en poche (<100) ? 112 Combien d'argent ai-je en poche (<100) ? 12 [Spectateur] (je suis là) [Magicien] un petit tour de magie... [Spectateur] (j'écris le papier) [Spectateur] (je montre le papier) [Assistant] (je lis le papier) [Assistant] (je calcule mentalement) [Assistant] J'annonce : 3397 ! [Magicien] - hum... je vois que vous êtes agé de 35 ans et que vous avez 12 francs en poche !
Voici quelques indications en vrac qui peuvent vous être utiles. Ne les lisez pas si vous voulez être complètement indépendant (but premier de l'exercice)...
Cliquez ici pour montrer/cacher les indications
Le but de cet exercice est d'implémenter de façon élémentaire une classe représentant les coordonnées dans l'espace (3D).
Dans le fichier Point3D.cc
, définir la classe
Point3D
représentant un point dans l'espace par ses trois
coordonnées, et possédant les méthodes suivantes :
init
», permettant d'initialiser les trois coordonnées d'un objet
Point3D
à partir de trois valeurs de type double
reçus en paramètres ;
affiche
», permettant l'affichage de coordonnées d'un objet
Point3D
;
compare
», permettant de comparer (tester l'égalité des
coordonnées) l'objet courant à un autre objet de
type Point3D
passé en paramètre.Dans le main
, créer trois points (trois instances) dont deux avec des
coordonnées identiques
et tester les deux méthodes précédentes.
main()
)Point3D point1; Point3D point2; Point3D point3; point1.init(1.0, 2.0, -0.1); point2.init(2.6, 3.5, 4.1); point3 = point1; cout << "Point 1 :"; point1.affiche(); cout << "Point 2 :"; point2.affiche(); cout << "Le point 1 est "; if (point1.compare(point2)) { cout << "identique au"; } else { cout << "différent du"; } cout << " point 2." << endl; cout << "Le point 1 est "; if (point1.compare(point3)) { cout << "identique au"; } else { cout << "différent du"; } cout << " point 3." << endl;
Comme dans l'exercice 2, nous vous demandons dans cet exercice d'élaborer un programme orienté objet de manière indépendante. Nous l'avons donc à nouveau organisé en deux parties :
Sur la base du programme de l'exercice précédent, écrire un nouveau programme triangles.cc qui permet à l'utilisateur d'entrer les coordonnées (x, y et z) des sommets d'un triangle (en 3D). Le programme affiche ensuite le périmètre du triangle ainsi qu'un message indiquant s'il s'agit ou non d'un triangle isocèle.
sqrt
de cmath
)
de ( (x1 - x2)2 +
(y1 - y2)2 +
(z1 - z2)2 )
Construction d'un nouveau point Veuillez entrer x : 0 Veuillez entrer y : 0 Veuillez entrer z : 0 Construction d'un nouveau point Veuillez entrer x : 2.5 Veuillez entrer y : 2.5 Veuillez entrer z : 0 Construction d'un nouveau point Veuillez entrer x : 0 Veuillez entrer y : 5 Veuillez entrer z : 0 Périmètre : 12.071067811865476 Ce triangle est isocèle !
Voici quelques indications en vrac qui peuvent vous être utiles. Ne les lisez pas si vous voulez être complètement indépendant (but premier de l'exercice)...
Cliquez ici pour montrer/cacher les indications
Pour faire la partie concernant le projet, voir ici.