C 6
C 6
C 6
Un livre de Wikibooks.
Exercices en langage C++/IHM/Les classes
Aller à : Navigation, rechercher
Modifier
Exercices en langage C++
Les classes
private:
unsigned int largeur;
unsigned int hauteur;
};
Rectangle::~Rectangle()
{
}
void Rectangle::afficher()
{
for(unsigned int i=0; i < hauteur; i++)
{
for(unsigned int j=0; j < largeur; j++)
cout << "*";
cout << endl;
}
}
int main()
{
Rectangle monRectangle(0,0);
char choix = '0';
unsigned int value;
while(true)
{
do
{
cout << " Rectangle - Menu" << endl;
cout << "1 - Modifier largeur du rectangle" << endl;
cout << "2 - Modifier hauteur du rectangle" << endl;
cout << "3 - Calculer les propriétés du rectangle" << endl;
cout << "4 - Afficher le rectangle" << endl;
cout << "5 - Quitter" << endl;
switch(choix)
{
case '1':
cout << "Nouvelle largeur : ";
cin >> value;
monRectangle.setLargeur(value);
break;
case '2':
cout << "Nouvelle hauteur : ";
cin >> value;
monRectangle.setHauteur(value);
break;
case '3':
cout << "Périmètre : " << monRectangle.perimetre() << endl;
cout << "Surface : " << monRectangle.surface() << endl;
break;
case '4':
monRectangle.afficher();
break;
case '5':
exit(0);
break;
default:
cout << "Erreur ! Choix invalide." << endl;
exit(1);
}
}
return 2;
}
pour cela nous allons supposer que les éléments à empiler sont de type int.
Le programme main comprend la définition d'une classe pile et un programme de test qui crée
deux piles p1 et p2,empile dessus des valeurs
Solution
[ Masquer ]
#include<iostream.h>
class pile
int *tab;
int max;
~pile();
int full();
int empty ();
EXERCICE 3:Fichier
Imaginons une application qui traite des fichiers. Ces fichiers vont être lus en mémoire, traités
puis sauvegardés. Une fois lu en mémoire, un fichier a deux caractéristiques, une adresse à
partir de laquelle se situe le fichier et une longueur, ce qui se concrétisera par un pointeur et
une longueur en nombre d’octets. Imaginons la classe "Fichier" avec un constructeur et un
destructeur et les trois méthodes suivantes:
-la méthode "Remplit" qui va remplir arbitrairement cet espace (ces remplissages arbitraires
sont la preuve de la bonne gestion mémoire car l’accès à une zone non déclarée provoque une
violation d’accès),
Puis écrivons un programme maître qui instancie notre classe par new, appelle nos trois
méthodes et détruit l’objet par delete.
Solution
[ Masquer ]
#include <iostream.h>
class Fichier
char* P;
Fichier();
~Fichier();
void Remplit();
void Affiche();
};
// constructeur
Fichier::Fichier()
P=NULL;
Lg=0;
// destructeur
Fichier::~Fichier()
delete P;
// méthode Creation
Lg=L;
return true;
// Méthode Remplit
void Fichier::Remplit()
// Méthode Affiche
void Fichier::Affiche()
void main(void)
if (f->Creation(10))
f->Remplit();
f->Affiche();
delete f;
EXERCICE1(TP3):
réaliser une classe point permettant de manipuler un point d'un plan.on prévoira:
-un point est définit par ses coordonnées x et y (des membres privés)
-un constructeur (vous pouvez également implémenter les trois types de constructeur)
-une fonction membre déplace effectuant une translation définie par ses deux arguments dx et
dy (double)
-une fonction membre affiche se contentant d'afficher les coordonnées cartésiennes du point.
-une fonction membre saisir se contentant de saisir les coordonnées cartésiennes du point.
-une fonction membre distance effectuant calculant la distance entre deux point.
on écrira séparément:
Solution
[ Masquer ]
//ficher source
#include <iostream.h>
#include <math.h>
class point
{
double x;
double y;
public:
point();
point(double,double);
point(point &);
~point();
double get_x();
double get_y();
void set_x(double x1);
void set_y(double y1);
point deplace(double dx, double dy);
void affiche();
void saisir();
double distance(point &);
point milieu(point &);
};
point::point()
{}
point::point(double a,double b)
{
x=a;
y=b;
}
point::point(point &p)
{
set_x(p.get_x());
set_y(p.get_y());
}
point::~point()
{}
double point::get_x()
{
return x;
}
double point::get_y()
{
return y;
}
void point::set_x(double a)
{
x=a;
}
void point::set_y(double a)
{
y=a;
}
point point::deplace(double dx,double dy)
{
set_x(get_x()+dx);
set_y(get_y()+dy);
return *this;
}
double point::distance (point &p)
{
double p1,x1,x2;
x1=(get_x()-p.get_x())*(get_x()-p.get_x());
x2=(get_y()-p.get_y())*(get_y()-p.get_y());
//p1=sqrt(((get_x()-p.x)*((get_x()-p.x))+((get_y()-p.y)*(get_y()-
p.y)));
p1=sqrt(x1+x2);
return p1;
}
void point::affiche()
{
cout<<"les coordonnées sont:"<<endl;
cout<<"x="<<get_x()<<endl;
cout<<"y="<<get_y()<<endl;
}
void point::saisir()
{
cout<<"donnée les coordonnées:"<<endl;
cout<<"x="<<endl;
cin>>x;
cout<<"y="<<endl;
cin>>y;
}
point point::milieu(point &p)
{
point p1;
p1.x=(get_x()+p.get_x())/2;
p1.y=(get_y()+p.get_y())/2;
return p1;
}
//programme d'essai(main)
#include<iostream.h>
#include "pointt.h"
void main()
{point p(1,1);
point x(5,5);
point c;
p.affiche();
p.deplace(5,5);
p.affiche();
cout<<"la distance est : "<<p.distance(x);
c=p.milieu(x);
c.affiche();
}
Le fait qu'il ne peut varier que par pas de 1 (incrémentation ou décrémentation). On convient
qu'une décrémentation d'un compteur nul est
sans effet.
Il s'agit de créer une classe Compteur pour rendre le service demandé. On écrira en outre un
petit programme de test qui :
Solution
[ Masquer ]
/*************************************************************/
Compteur :: Compteur() {
_valeur = 0;
}
/*************************************************************/
void Compteur :: incr() {
_valeur ++;
}
/*************************************************************/
void Compteur :: decr() {
if (_valeur>0) _valeur--;
}
/*************************************************************/
int Compteur :: valeur() {
return _valeur;
}
#include <iostream.h>
#include "Compteur.h"
/*************************************************************/
int main () {
Exercice 5 :
1/ On voudrait gérer les étudiants d’une institution à l’aide d’une classe Etudiant définie par :
- float moyenne (), retourne comme résultat la moyenne des notes d’un étudiant.
- int admis (), retourne comme résultat la valeur 1, si un étudiant est admis et la valeur 0,
sinon. Un étudiant est considéré comme étant
- int exae_quo (Etudiant E), retourne comme résultat la valeur 1, si deux étudiants ont la
même moyenne et la valeur 0, sinon.
institution qui sont les étudiants en dernière année d’études. Ces étudiants possèdent en effet
un attribut supplémentaire : note_memoire,
- float moyenne (), retourne comme résultat la moyenne des notes d’un étudiant en maîtrise
- int admis (), retourne comme résultat la valeur 1, si un étudiant est admis et la valeur 0,
sinon. Un étudiant en maîtrise est considéré
comme étant admis lorsque, d’une part, la moyenne de ses notes est supérieure ou égale à 10
et d’autre part la note obtenue pour son mémoire
Solution
[ Masquer ]
1/
class Etudiant
{ private:
float tabnotes[10] ;
public :
void saisie () ;
void affichage () ;
float moyenne() ;
int admis() ;
} ;
{ int i ;
{ int i ;
cout << "La note N°" << i << "est " <<
tabnotes[i]<< endl ;
{ int i ;
float som = 0;
som + = tabnotes[i] ;
return (som/10)
2/
b)
{ private:
float note_memoire ;
public :
void saisie () ;
void affichage () ;
int admis() ;
} ;
{ Etudiant ::saisie () ;
{ Etudiant :: affichage () ;
Récupérée de «
http://fr.wikibooks.org/wiki/Exercices_en_langage_C%2B%2B/IHM/Les_classes »
Catégorie : Exercices en langage C++ (livre)