Cours:PooTD1 qtcreator : Différence entre versions
(→Écriture d'une classe Complexe) |
|||
(26 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
− | = | + | = Projet QT Creator : classe Vecteur = |
− | + | == Un premier projet == | |
− | + | * Créer un projet C++ (application non-qt) avec QtCreator avec les fichiers suivants: | |
+ | Fichier d'entête <code>vecteur.h</code> : | ||
+ | <source lang="c++"> | ||
+ | #ifndef VECTEUR_H | ||
+ | #define VECTEUR_H | ||
− | <source lang="c++">#include <iostream> | + | class Vecteur |
+ | { | ||
+ | public: | ||
+ | Vecteur(float _x, float _y); | ||
+ | float getX(); | ||
+ | float getY(); | ||
+ | float norme(); | ||
+ | float prodscal(Vecteur v); | ||
+ | void affiche(); | ||
+ | private: | ||
+ | float x; | ||
+ | float y; | ||
+ | }; | ||
+ | |||
+ | #endif // VECTEUR_H | ||
+ | </source> | ||
+ | Fichier d'implémentation <code>vecteur.cpp</code> | ||
+ | <source lang="c++"> | ||
+ | #include "vecteur.h" | ||
+ | #include <iostream> | ||
+ | #include <math.h> | ||
using namespace std; | using namespace std; | ||
− | + | Vecteur::Vecteur(float _x, float _y) | |
− | + | { | |
− | + | x = _x; | |
− | + | y = _y; | |
− | + | } | |
− | + | ||
− | + | float Vecteur::getX() | |
− | + | { | |
+ | return x; | ||
+ | } | ||
+ | |||
+ | |||
+ | float Vecteur::getY() | ||
+ | { | ||
+ | return y; | ||
+ | } | ||
+ | |||
+ | float Vecteur::norme() | ||
+ | { | ||
+ | return sqrt(x*x + y*y); | ||
+ | } | ||
+ | |||
+ | float Vecteur::prodscal(Vecteur v) | ||
+ | { | ||
+ | return x*v.x + y*v.y; | ||
+ | } | ||
+ | |||
+ | void Vecteur::affiche() | ||
+ | { | ||
+ | cout << "{ " << x << " ; " << y << " }" << endl; | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | == Questions == | ||
+ | * Quels sont les attributs de cette classe ? | ||
+ | * Quelles sont ses méthodes ? | ||
+ | * Dessiner le diagramme UML de la classe Vecteur. | ||
+ | * Modifier la fonction <code>main()</code> (dans le fichier <code>main.cpp</code>) pour | ||
+ | ** Créer un vecteur v (par exemple (1,2)) puis l'afficher | ||
+ | ** Calculer et afficher sa norme (utiliser <code>cout</code>) | ||
+ | ** Créer un second vecteur v2 | ||
+ | ** Calculer et afficher le produit scalaire entre v et v2 | ||
+ | |||
+ | = Écriture d'une classe Complexe = | ||
− | int main( | + | * Créer un projet C++ (application non-qt) avec QtCreator. |
+ | * Modifier le projet afin d'ajouter la classe <code>Complexe</code> dotée de ces attributs : | ||
+ | <source lang="c++"> | ||
+ | double re; | ||
+ | double im; | ||
+ | </source> | ||
+ | et de cette méthode : | ||
+ | <source lang="c++"> | ||
+ | void Complexe::affiche() { | ||
+ | cout << re << "+" << im << "i" << endl; | ||
+ | } | ||
+ | </source> | ||
+ | Le programme principal sera le suivant. | ||
+ | <source lang="c++">#include <iostream> | ||
+ | using namespace std; | ||
+ | int main() { | ||
Complexe z1; | Complexe z1; | ||
cout << "coucou" << endl; | cout << "coucou" << endl; | ||
Ligne 23 : | Ligne 98 : | ||
z1.affiche(); | z1.affiche(); | ||
}</source> | }</source> | ||
− | + | Compiler et exécuter le projet. | |
− | + | * Quels sont les attributs de la classe <code>Complexe</code> ainsi définie ? Quelles sont ses méthodes ? | |
− | + | * Ajouter à la classe un constructeur dont voici le squelette : | |
− | |||
<source lang="c++">Complexe (double _re, double _im) { | <source lang="c++">Complexe (double _re, double _im) { | ||
// à compléter | // à compléter | ||
}</source> | }</source> | ||
− | + | * Ajouter à la classe une méthode permettant d’ajouter un nombre complexe : | |
− | + | <source lang="c++">Complexe Complexe::add(Complexe z) { | |
− | |||
− | <source lang="c++">Complexe add(Complexe z) { | ||
// à compléter | // à compléter | ||
}</source> | }</source> | ||
qui permet de retourner un complexe correspondant à l’addition du nombre courant avec un nombre<code>z</code>. Exemple d’utilisation : | qui permet de retourner un complexe correspondant à l’addition du nombre courant avec un nombre<code>z</code>. Exemple d’utilisation : | ||
+ | <source lang="c++"> | ||
+ | Complexe z1{0,1}; | ||
+ | Complexe z2{1,0}; | ||
+ | Complexe z3 = z1.add(z2);</source> | ||
+ | * Ajouter des ''getters'' et des ''setters'' aux attributs. | ||
+ | * Ajouter des méthodes : produit de deux complexes, conjugué, … | ||
+ | * Le cas échéant, vous pouvez reprendre le TD de S1 sur les nombres complexes : [[Cours:TdComplexe]] | ||
− | + | =Corrigé= | |
− | + | [[Cours:PooTD1_qtcreatorCorrection|Une correction possible]] | |
− | |||
− | |||
− | |||
− |
Version actuelle datée du 7 septembre 2023 à 10:20
Sommaire
Projet QT Creator : classe Vecteur
Un premier projet
- Créer un projet C++ (application non-qt) avec QtCreator avec les fichiers suivants:
Fichier d'entête vecteur.h
:
#ifndef VECTEUR_H
#define VECTEUR_H
class Vecteur
{
public:
Vecteur(float _x, float _y);
float getX();
float getY();
float norme();
float prodscal(Vecteur v);
void affiche();
private:
float x;
float y;
};
#endif // VECTEUR_H
Fichier d'implémentation vecteur.cpp
#include "vecteur.h"
#include <iostream>
#include <math.h>
using namespace std;
Vecteur::Vecteur(float _x, float _y)
{
x = _x;
y = _y;
}
float Vecteur::getX()
{
return x;
}
float Vecteur::getY()
{
return y;
}
float Vecteur::norme()
{
return sqrt(x*x + y*y);
}
float Vecteur::prodscal(Vecteur v)
{
return x*v.x + y*v.y;
}
void Vecteur::affiche()
{
cout << "{ " << x << " ; " << y << " }" << endl;
}
Questions
- Quels sont les attributs de cette classe ?
- Quelles sont ses méthodes ?
- Dessiner le diagramme UML de la classe Vecteur.
- Modifier la fonction
main()
(dans le fichiermain.cpp
) pour- Créer un vecteur v (par exemple (1,2)) puis l'afficher
- Calculer et afficher sa norme (utiliser
cout
) - Créer un second vecteur v2
- Calculer et afficher le produit scalaire entre v et v2
Écriture d'une classe Complexe
- Créer un projet C++ (application non-qt) avec QtCreator.
- Modifier le projet afin d'ajouter la classe
Complexe
dotée de ces attributs :
double re;
double im;
et de cette méthode :
void Complexe::affiche() {
cout << re << "+" << im << "i" << endl;
}
Le programme principal sera le suivant.
#include <iostream>
using namespace std;
int main() {
Complexe z1;
cout << "coucou" << endl;
cout << "z1=";
z1.affiche();
}
Compiler et exécuter le projet.
- Quels sont les attributs de la classe
Complexe
ainsi définie ? Quelles sont ses méthodes ? - Ajouter à la classe un constructeur dont voici le squelette :
Complexe (double _re, double _im) {
// à compléter
}
- Ajouter à la classe une méthode permettant d’ajouter un nombre complexe :
Complexe Complexe::add(Complexe z) {
// à compléter
}
qui permet de retourner un complexe correspondant à l’addition du nombre courant avec un nombrez
. Exemple d’utilisation :
Complexe z1{0,1};
Complexe z2{1,0};
Complexe z3 = z1.add(z2);
- Ajouter des getters et des setters aux attributs.
- Ajouter des méthodes : produit de deux complexes, conjugué, …
- Le cas échéant, vous pouvez reprendre le TD de S1 sur les nombres complexes : Cours:TdComplexe