Cours:PooTD1 qtcreator : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
(Écriture d'une classe Complexe)
 
(26 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
== TD1 : découverte du C++ et de QT Creator ==
+
= Projet QT Creator : classe Vecteur =
  
# Suivre l’explication sur la création d’un projet C++ avec QtCreator.
+
== Un premier projet ==
# Modifier le <code>main.cpp</code> avec le code suivant. Compiler et exécuter le 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;
  
class Complexe {
+
Vecteur::Vecteur(float _x, float _y)
     public :
+
{
        double re;
+
    x = _x;
        double im;
+
    y = _y;
        void affiche() {
+
}
            cout << re << "+" << im << "i" << endl;
+
 
        }
+
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(int argc, char *argv[]) {
+
* 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>
<ol start="3" style="list-style-type: decimal;">
+
Compiler et exécuter le projet.
<li><p>Quels sont les attributs de la classe <code>Complexe</code> ainsi définie ? Quelles sont ses méthodes ?</p></li>
+
* Quels sont les attributs de la classe <code>Complexe</code> ainsi définie ? Quelles sont ses méthodes ?
<li><p>Ajouter un constructeur dont voici le squelette :</p></li></ol>
+
* 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>
<ol start="6" style="list-style-type: decimal;">
+
* Ajouter à la classe une méthode permettant d’ajouter un nombre complexe :
<li>Ajouter une méthode permettant d’ajouter un nombre complexe</li></ol>
+
<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]]
  
<source lang="c++">Complexe z1(0,1};
+
=Corrigé=
Complexe z2(1,0);
+
[[Cours:PooTD1_qtcreatorCorrection|Une correction possible]]
Complexe z3 = z1.add(z2);</source>
 
<ol start="7" style="list-style-type: decimal;">
 
<li>Ajouter des ''getters'' et des ''setters'' aux attributs</li>
 
<li>Ajouter des méthodes : produit de deux complexes, conjugué, …</li></ol>
 

Version actuelle datée du 7 septembre 2023 à 10:20

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 fichier main.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

Corrigé

Une correction possible