Pages

mercredi 2 avril 2014

Exercices corrigés en langage C++ : Les fichiers

Exercices corrigés en langage C++ : Les fichiers
langage c++
Exercice 1 : 

Ecrire un programme qui écrit dans le fichier exemple.txt le texte:
Hello world!
Voici un programme illustrant l'écriture dans un fichier

Correction exercice 1 : 

#include <iostream>
#include <fstream>

int main (int argc, char * argv[]) {
  std::ofstream myfile;
  char * filename = "example.txt";
  myfile.open (filename, std::ios::out);
  if(myfile.is_open())
  {
      myfile << "Hello world \n";
      myfile << "Voici un programme illustrant l'écriture dans un fichier \n";
  }
  else
  {
      std::cout << "Erreur à l'ouverture du fichier "<< filename << std::endl;
  }
  myfile.close();
  return 0;
}


Exercice 2 : 

Ecrire un programme qui lit le fichier example.txt définit dans l'exemple précédent et affiche son contenu :
Vous devriez obtenir :
Hello world!
Voici un programme illustrant l'écriture dans un fichier

Correction exercice 2 : 

#include <iostream>
#include <fstream>
#include <string>

int main () {
  std::string line;
  char * filename = "example.txt";
  std::ifstream myfile (filename, std::ios::in);
  if (myfile.is_open())
  {
    while (! myfile.eof() )
    {
      getline (myfile,line);
      std::cout << line << std::endl;
    }
    myfile.close();
  }

  else std::cout << "Erreur à l'ouverture du fichier " << filename << std::endl;; 

  return 0;
}


Exercice 3 : 

Proposez un programme qui écrit en binaire une chaîne de caractère suivant de la liste des entiers de 0 à 1000 :
Liste des entiers de 1 à 1000
0
1
2
...
1000


Correction exercice 3 : 


#include <iostream>
#include <fstream>

int main (int argc, char * argv[]) {
  std::ofstream myfile;
  char * filename = "exampleBinary.txt";
  myfile.open (filename, std::ios::out | std::ios::binary);
  if(myfile.is_open())
  {
      myfile.write("Liste des entiers de 1 à 1000",29*sizeof(char));
      for(int i = 0 ; i <= 1000 ; i++)
      {
          myfile.write((char*)&i,sizeof(int));
      }
  }
  else
  {
      std::cout << "Erreur à l'ouverture du fichier "<< filename << std::endl;
  }
  myfile.close();
  return 0;
}


Exercice 4 : 

Proposez un programme qui lit le fichier écrit en binaire de l'exercice précédent et affiche son contenu. Vous devriez obtenir :
Liste des entiers de 1 à 1000
0
1
2
...
1000

Correction exercice 4 : 

#include <iostream>
#include <fstream>

int main (int argc, char * argv[]) {
  std::ifstream myfile;
  char * filename = "exampleBinary.txt";
  char buffer[29];
  int value;
  myfile.open (filename, std::ios::in | std::ios::binary);
  if(myfile.is_open())
  {
      myfile.read(buffer,29*sizeof(char));
      std::cout << buffer << std::endl;
      for(int i = 0 ; i <= 1000 ; i++)
      {
          myfile.read((char*)&value,sizeof(int));
          std::cout << value << std::endl;
      }
  }
  else
  {
      std::cout << "Erreur à l'ouverture du fichier "<< filename << std::endl;
  }
  myfile.close();
  return 0;
}

Read More

Exercices corrigés en langage C++ : Les classes

Exercices corrigés en langage C++ : Les classes
langage c++
Exercice 1 : 

 Ecrire un programme utilisant une classe rectangle dont le constructeur prend deux paramètres, largeur et hauteur et qui offre les fonctions suivantes :
  • calcul du périmètre
  • calcul de la surface
  • affichage
ainsi que les accesseurs et mutateurs triviaux (lecture et modification de la largeur et de la hauteur).

Correction exercice 1 : 

#include<iostream>
#include <cstdlib>
 
using namespace std;
 
class Rectangle
{
public:
  Rectangle(unsigned int initLargeur, unsigned int initHauteur);
  ~Rectangle();
  unsigned int getLargeur() const { return largeur; };
  unsigned int getHauteur() const { return hauteur; };
  unsigned int perimetre() const { return 2*(largeur+hauteur); };
  unsigned int surface() const { return largeur * hauteur; };
  void setLargeur(unsigned int newLargeur) { largeur = newLargeur; };
  void setHauteur(unsigned int newHauteur) { hauteur = newHauteur; };
  void afficher();
 
private:
  unsigned int largeur;
  unsigned int hauteur;
};
 
Rectangle::Rectangle(unsigned int initLargeur, unsigned int initHauteur)
{
  largeur = initLargeur;
  hauteur = initHauteur;
}
 
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;
 
      cin >> choix;
    }while(choix < '1' || choix > '5');
 
    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;
}


Exercice 2 : 

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 "Creation" qui va allouer un certain espace à partir du pointeur P,
-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),
-la méthode "Affiche" qui va afficher la zone mémoire pointée par P.
Puis écrivons un programme maître qui instancie notre classe par new, appelle nos trois méthodes et détruit l’objet par delete.

Correction exercice 2 : 

#include <iostream.h>
 
// déclaration de la classe Fichier
 
class Fichier
 
{
 
char* P;
 
unsigned int Lg;
 
public:
 
Fichier();
 
~Fichier();
 
bool Creation(unsigned int);
 
void Remplit();
 
void Affiche();
 
};
 
// constructeur
 
Fichier::Fichier()
 
{
 
P=NULL;
 
Lg=0;
 
}
 
// destructeur
 
Fichier::~Fichier()
 
{
 
delete P;
 
}
 
// méthode Creation
 
bool Fichier::Creation(unsigned int L)
 
{
 
if((P=(char*)malloc(L))==NULL) return false;
 
Lg=L;
 
return true;
 
}
 
// Méthode Remplit
 
void Fichier::Remplit()
 
{
 
for(unsigned int i=0;i<Lg;i++) P[i]='a';
 
}
 
// Méthode Affiche
 
void Fichier::Affiche()
 
{
 
for(unsigned int i=0;i<Lg;i++) cout<<P[i];
 
}
 
//-----Programma maître (main)--------------
 
void main(void)
 
{
 
Fichier* f=new Fichier();
 
if (f->Creation(10))
 
{
 
f->Remplit();
 
f->Affiche();
 
}
 
delete f;
 
}


Exercice 3 : 

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.
-une fonction membre milieu donnant le milieu d'un segment.
on écrira séparément:
-un ficher source constituant la déclaration et la définition de la classe.
-un petit programme d'essai (main) gérant la classe point.

Correction exercice 3 : 


#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(); 
 
 
}


Exercice 4 : 

On souhaite implémenter une classe représentant un compteur entier. Un tel objet se caractérise par :
Une valeur entière, positive ou nulle, nulle à l'origine.
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 :
1. créera un compteur et affichera sa valeur;
2. l'incrémentera 10 fois, puis affichera à nouveau sa valeur;
3. le décrémentera 20 fois, puis affichera une troisième fois sa valeur
La sortie de ce programme doit donner (quelque chose comme) "0 10 0"

Correction exercice 4 : 


Fichier Compteur.h : déclaration de la classe Compteur

class Compteur {  protected:  /* i.e. visible des classes dérivées */
  int _valeur;  public:              /* i.e. l'interface de la classe */
  Compteur();                   /* le constructeur, invoque a la création */
  void incr();
  void decr();
  int valeur();                 /* permet un accès "read-only" a l'attribut */
};



Fichier Compteur.C : implémentation de la classe Compteur
 
#include <iostream.h>
#include "Compteur.h"
 
/*************************************************************/
Compteur :: Compteur() {
  _valeur = 0;
}
 
/*************************************************************/
void Compteur :: incr() {
  _valeur ++;
}
 
/*************************************************************/
void Compteur :: decr() {
  if (_valeur>0) _valeur--;
}
 
/*************************************************************/
int Compteur :: valeur() {
  return _valeur;
}
 
Fichier testCompteur.C : programme principal
 
#include <iostream.h>
#include "Compteur.h"
 
/*************************************************************/
int main () {
 
  Compteur c;                   // automatiquement égal a 0 par le constructeur
 
  cout << c.valeur() << endl;
  for (int i=0; i<10; i++)
    c.incr();
  cout << c.valeur() << endl;   // le compteur est passe à 10
  for (int i=0; i<20; i++)      // "i" est local au "for" !!!
    c.decr();
  cout << c.valeur() << endl;   // le compteur est redescendu à 0
 
  return 0;                     // pour l'OS
}


Exercice 5 : 

1/ 
On voudrait gérer les étudiants d’une institution à l’aide d’une classe Etudiant définie par :
les attributs suivants :
- nom : nom d’un étudiant
- prénom: prénom d’un étudiant
- tabnotes : tableau contenant les notes d’un étudiant, sachant qu’un étudiant a au total 10 notes.
les méthodes suivantes :
- void saisie (), permettant la saisie d’un étudiant
- void affichage (), permettant l’affichage d’un étudiant
- 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
admis lorsque la moyenne de ses notes est supérieure ou égale à 10.
- 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.
Ecrire la classe Etudiant dans le langage C++.
2/ 
On voudrait maintenant représenter, à l’aide d’une nouvelle classe Etudiant_en_Maitrise, certains étudiants particuliers dans cette
institution qui sont les étudiants en dernière année d’études. Ces étudiants possèdent en effet un attribut supplémentaire : note_memoire,
qui représente la note de leur mémoire de fin d’études.
Les méthodes à associer à cette classe sont les suivantes :
- void saisie (), permettant la saisie d’un étudiant en maîtrise
- void affichage (), permettant l’affichage d’un étudiant en maîtrise
- 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
de fin d’études est supérieure ou égale à 10.
- int exae_quo (Etudiant_en_Maitrise E), retourne comme résultat la valeur 1, si deux étudiants ont d’une part la même moyenne et d’autre
part, la même note de mémoire et retourne la valeur 0, sinon.
a)
    Quelles sont les méthodes qui sont à redéfinir dans la classe Etudiant_en_Maitrise ?
b) 
    Ecrire la classe Etudiant_en_Maitrise dans le langage C++.

Correction exercice 5 : 

1)

 
class Etudiant
 
{ private:
 
            char nom[50], prenom[50];
 
            float tabnotes[10] ;
 
  public :
 
            void saisie () ;
 
            void affichage () ;
 
            float moyenne() ;
 
            int admis() ;
 
            int exae_quo (Etudiant E) ;
 
} ;
 
void Etudiant ::saisie ()
 
{ int i ;
 
            cout << "Donner le nom :" ;
 
            cin >> nom ;
 
            cout << "Donner le prénom :" ;
 
            cin >> prenom ;
 
            cout << "Saisie des notes \n" ;
 
            for (i = 0 ; i < 10 ; i++)
 
            {
 
                        cout << "Donner la note N°" << i<< " : " ;
 
                        cin >> tabnotes[i] ;
 
            }
 
}
 
void Etudiant ::affichage ()
 
{ int i ;
 
            cout << "Le nom :"<<nom<< endl ;
 
            cout << "Le prénom :" <<prenom<< endl ;
 
            for (i = 0 ; i < 10 ; i++)
 
                        cout << "La note N°" << i << "est " << tabnotes[i]<< endl ;
 
}
 
float Etudiant ::moyenne()
 
{ int i ;
 
  float som = 0;
 
            for (i = 0 ; i < 10 ; i++)
 
                        som + = tabnotes[i] ;
 
            return (som/10)
 
}
 
int Etudiant ::admis()
 
{ if (moyenne() >= 10) return (1); else return (0);}
 
int Etudiant ::Exae_quo(Etudiant E)
 
{ if (moyenne() == E.moyenne()) return (1); else return (0);}



2/
 
a) 

Les méthodes qui sont à redéfinir dans la classe Etudiant_en_Maitrise sont : saisie, affichage, admis et esae_quo.


b)
 
       
 
class Etudiant_en_Maitrise : public Etudiant
 
{ private:
 
            float note_memoire ;
 
  public :
 
            void saisie () ;
 
            void affichage () ;
 
            int admis() ;
 
            int exae_quo (Etudiant_en_Maitrise E) ;
 
} ;
 
void Etudiant_en_Maitrise ::saisie ()
 
{          Etudiant ::saisie () ;
 
cout << "Donner la note du mémoire :" ;
 
            cin >> note_memoire ;
 
}
 
void Etudiant_en_Maitrise ::affichage ()
 
{          Etudiant :: affichage () ;
 
cout << "La note du mémoire :" << note_memoire<< endl ;
 
}
 
int Etudiant_en_Maitrise ::admis()
 
{ if ((moyenne() >= 10) && (note_memoire >=10))return (1); else return (0);}
 
int Etudiant_en_Maitrise ::Exae_quo(Etudiant E)
 
{ if ((moyenne() == E.moyenne()) && (note_memoire == E.note_memoire)) return (1); else return (0);}




Read More

Exercices corrigés en langage C++ : Les fonctions

Exercices corrigés en langage C++ : Les fonctions
langage c++
Exercice 1 : 

Ecrire une fonction distance ayant comme paramètres 4 doubles xa,ya et xb,yb qui représentent les coordonnées de deux points A et B et qui renvoie la distance AB. Tester cette fonction.



Correction exercice 1 :

#include<iostream>
using namespace std;
#include<cmath>

double distance(double xa, double ya, double xb, double yb)
{
double dx,dy;
dx=xa-xb;
dy=ya-yb;
return sqrt(dx*dx+dy*dy);
}

int main()
{
double x1,y1,x2,y2,d;

cout<<"Tapez l'abscisse de A : ";cin>>x1;
cout<<"Tapez l'ordonnée de A : ";cin>>y1;
cout<<"Tapez l'abscisse de B : ";cin>>x2;
cout<<"Tapez l'ordonnée de B : ";cin>>y2;

d=distance(x1,y1,x2,y2);

cout<<"La distance AB vaut : "<<d<<endl;
return 0;
}


Exercice 2 : 

Ecrire une fonction f ayant comme paramètres un double x et un booléen ok et qui renvoie un double par un return. La fonction renvoie par un return la racine carrée de (x-1)*(2-x). La fonction renvoie par l'intermédiaire de la variable ok la valeur true si la fonction est définie au point x, false sinon. Tester cette fonction.



Correction exercice 2 :

#include<iostream>
using namespace std;
#include<cmath>

double f(double x, bool &ok)
{
double r=0;

if(x>=1 && x<=2){r=sqrt((x-1)*(2-x));ok=true;}
        else ok=false;
return r;
}

int main()
{
double x,y;
bool ok;
cout<<"Tapez x :";cin>>x;
y=f(x,ok);
if(ok)cout<<"f(x) vaut :"<<y<<endl;
        else cout<<"x n'est pas correct"<<endl;
return 0;
}


Exercice 3 : 

Ecrire une fonction f ayant en paramètre un entier et qui renvoie par un return un booléen : true si l'entier est premier false sinon. Tester cette fonction.



Correction exercice 3 :

#include<iostream>
using namespace std;
#include<cmath>

bool f(int x)
{
bool r=true;
int d=2;
while(r && d*d<=x)if(x%d==0)r=false; else d++;
return r;
}

int main()
{
int x;
bool premier;
do{
cout<<"Tapez x :";cin>>x;
}while(x<=0);
premier=f(x);
if(premier)cout<<"x est premier"<<endl;
        else cout<<"x n'est pas premier"<<endl;
return 0;
}


Exercice 4 : 

Ecrire une fonction f ayant comme paramètre un entier n et qui renvoie le n-ième nombre premier : cette fonction utilisera la fonction du 3). Tester cette fonction.



Correction exercice 4 :

#include<iostream>
using namespace std;

bool premier(int x)
{
bool r=true;
int d=2;
while(r && d*d<=x)if(x%d==0)r=false; else d++;
return r;
}

int Npremier(int N)
{
int nb=0;
int i=2;

while(nb!=N)
        {
        if(premier(i))nb++;
        i++;
        }
return i-1;
}

int main()
{
int N,p;
cout<<"Tapez la valeur de N : ";cin>>N;
p=Npremier(N);
cout<<"Le N-ième nombre premier est : "<<p<<endl;
return 0;
}


Exercice 5 : 

Ecrire une fonction swap ayant en paramètres 2 entiers a et b et qui echange les contenus de a et de b. Tester cette fonction.



Correction exercice 5 :

#include<iostream>
using namespace std;

void swap(int &x, int &y)
{
int temp;
temp=x;
x=y;
y=temp;
}

int main()
{
int a,b;        
cout<<"Tapez a :";cin>>a;
cout<<"Tapez b :";cin>>b;
swap(a,b);
cout<<"a vaut : "<<a<<endl;
cout<<"b vaut : "<<b<<endl;

return 0;
}


Exercice 6 : 

Ecrire une fonction f ayant en paramètres un tableau t de taille quelconque et un entier n indiquant la taille du tableau. f doit renvoyer par un return un booléen b indiquant s'il existe une valeur comprise entre 0 et 10 dans les n premières cases du tableau t. Tester cette fonction.



Correction exercice 6 :

#include<iostream>
using namespace std;

void saisir(int t[],int n)
{
int i;
for(i=0;i<n;i++)
{
cout<<"Tapez la valeur numero "<<i<<" : ";
cin>> t[i];
}
}

bool f(int t[], int n)
{
bool trouve=false;
int i=0;
while(!trouve && i<n)
if(t[i]>=0 && t[i]<=10)trouve=true; else i++;
return trouve;
}

int main()
{
int a[10];
saisir(a,10);
bool b;

b=f(a,10);
if(b)cout<<"Il existe une valeur entre 0 et 10"<<endl;
else cout<<"Il n'existe pas de valeurs entre 0 et 10"<<endl;
return 0;
}


Exercice 7 : 

Ecrire une fonction f ayant en paramètres un tableau t de taille quelconque et un entier n indiquant la taille du tableau. f doit renvoyer par un return le nombre de valeurs comprises entre 0 et 10 dans les n premières cases du tableau t.Tester cette fonction.



Correction exercice 7 :

#include<iostream>
using namespace std;

void saisir(int t[],int n)
{
int i;
for(i=0;i<n;i++)
{
cout<<"Tapez la valeur numero "<<i<<" : ";
cin>> t[i];
}
}

int f(int t[], int n)
{
int nb=0;
int i;
for(i=0;i<n;i++)
if(t[i]>=0 && t[i]<=10)nb++;
return nb;
}

int main()
{
int a[10];
saisir(a,10);
int x;
x=f(a,10);
cout<<"Il y a "<<x<<" valeur(s) entre 0 et 10"<<endl;
return 0;
}


Exercice 8 : 

Ecrire une fonction f ayant en paramètres un tableau t de taille quelconque et un entier n indiquant la taille du tableau. f possède un autre paramètre v , entier passé par référence. f doit renvoyer par un return un booleén b indiquant s'il existe une valeur comprise entre 1 et 10 dans les n premières cases du tableau t. Si f renvoie true, v est égal à la valeur de la première case du tableau comprise entre 0 et 10. Tester cette fonction.



Correction exercice 8 :

#include<iostream>
using namespace std;

void saisir(int t[],int n)
{
int i; for(i=0;i<n;i++)
{
cout<<"Tapez la valeur numero "<<i<<" : ";
cin>> t[i];
}
}

bool f(int t[], int n, int &v)
{
bool trouve=false;
int i=0;
while(!trouve && i<n)
if(t[i]>=0 && t[i]<=10){trouve=true; v=t[i];}else i++;
return trouve;
}

int main()
{
int a[10];
bool b;
int w;

saisir(a,10);
b=f(a,10,w);
if(b)cout<<"Il existe une valeur entre 0 et 10 : "<<w<<" est la première de ces valeurs."<<endl;
else cout<<"Il n'existe pas de valeurs entre 0 et 10"<<endl;
return 0;
}


Exercice 9 : 

Ecrire une fonction f ayant en paramètres un tableau t1 de taille quelconque et un entier n indiquant la taille du tableau, ainsi qu'un tableau t2 de la même taille que t1. f doit renvoyer par un return un entier nb indiquant le nombre de valeurs comprises entre 0 et 10 dans le tableau t1. f doit mettre dans le tableau t2 les différentes valeurs comprise entre 0 et 10 qu'il a rencontrées dans le tableau t1.



Correction exercice 9 :

#include<iostream>
using namespace std;

void saisir(int t[],int n)
{
int i;
for(i=0;i<n;i++)
        {
        cout<<"Tapez la valeur numero "<<i<<" : ";
        cin>> t[i];
        }
}

void afficher(int t[],int n)
{
int i;
for(i=0;i<n;i++)
        cout<<t[i]<<" ";
cout<<endl;
}

int f(int t1[], int n,int t2[])
{
int i=0,nb=0;

for(i=0;i<n;i++)if(t1[i]>=0 && t1[i]<=10){t2[nb]=t1[i];nb++;}
return nb;
}

int main()
{
int a[10],b[10];
int nb;

saisir(a,10);
nb=f(a,10,b);
cout<<"VOICI LES VALEURS ENTRE 0 ET 10 : "<<endl;
afficher(b,nb);
return 0;
}


Exercice 10 : 

Ecrire une fonction f ayant en paramètres un tableau t de taille quelconque et un entier n indiquant la taille du tableau. f doit renvoyer par un return un entier égal à l'indice de la première case du tableau (parmi les n premières) comprise entre 0 et 10. S'il n'existe pas de telle valeur, la fonction renvoie -1. Tester cette fonction.



Correction exercice 10 :

#include<iostream>
using namespace std;

void saisir(int t[],int n)
{
int i; for(i=0;i<n;i++)
{
cout<<"Tapez la valeur numero "<<i<<" : ";
cin>> t[i];
}
}

int f(int t[], int n)
{
int i=0,ind=-1;

while(ind==-1 && i<n)
if(t[i]>=0 && t[i]<=10)ind=i;else i++;
return ind;
}

int main()
{
int a[10];
int w;

saisir(a,10);
w=f(a,10);
if(w!=-1)cout<<"Il existe une valeur entre 0 et 10. "
<<"l'indice de la première case est "<<w<<endl;
else cout<<"Il n'existe pas de valeurs entre 0 et 10"<<endl;
return 0;
}

Read More

samedi 29 mars 2014

Exercices corrigés en langage C++ : Les tableaux (2)

Exercices corrigés en langage C++ : Les tableaux
langage c++
Exercice 1 : 

Ecrire un programme qui saisit 2 tableaux de 10 entiers a et b. c est un tableau de 20 entiers. Le programme doit mettre dans c la fusion des tableaux a et b. On copiera dans les 10 premières cases de c le tableau a, dans les dix dernières le tableau b. Le programme affiche ensuite le tableau c.

Correction exercice 1 :

#include<iostream>
using namespace std;

const int N=10;

int main()
{
int a[N],b[N],c[2*N],i;

cout<<"SAISIE DU TABLEAU a"<<endl;
for(i=0;i<N;i++){cout<<"Tapez un entier ";cin>>a[i];}

cout<<"SAISIE DU TABLEAU b"<<endl;
for(i=0;i<N;i++){cout<<"Tapez un entier ";cin>>b[i];}

for(i=0;i<2*N;i++)if(i<N)c[i]=a[i];else c[i]=b[i-N];

cout<<"VOICI LE TABLEAU c"<<endl;
for(i=0;i<2*N;i++)cout<<c[i]<<" ";
cout<<endl;
return 0;
}


Exercice 2 : 

Ecrire un programme qui saisit 2 tableaux de 10 entiers a et b qui doivent être triés dans l'ordre croissant. Le programme devra tout d'abord vérifier que les deux tableaux sont triés. Le tableau c est un tableau de 20 entiers. Le programme doit mettre dans c la fusion des tableaux a et b. Le tableau c devra contenir les éléments de a et ceux de b et devra être trié. Le programme affiche ensuite le tableau c.

Correction exercice 2 :

#include<iostream>
using namespace std;

const int N=10;

int main()
{
int a[N],b[N],c[2*N],i,trie,indicea,indiceb;

cout<<"SAISIE DU TABLEAU a"<<endl;
for(i=0;i<N;i++){cout<<"Tapez un entier ";cin>>a[i];}

cout<<"SAISIE DU TABLEAU b"<<endl;
for(i=0;i<N;i++){cout<<"Tapez un entier ";cin>>b[i];}

trie=true;
i=0;
while(trie && i<N-1)if(a[i]>a[i+1])trie=false; else i++;

if(!trie)cout<<"Le tableau a n'est pas trié"<<endl;
        else
        {
        trie=true;
        i=0;
        while(trie && i<N-1)if(b[i]>b[i+1])trie=false; else i++;
        
        if(!trie)cout<<"Le tableau b n'est pas trié"<<endl;
                else
                {
                indicea=0;indiceb=0;
                for(i=0;i<2*N;i++)
                        {
                        if(indicea==N){c[i]=b[indiceb];indiceb++;}
                        else if(indiceb==N){c[i]=a[indicea];indicea++;}
                        else if(a[indicea]<b[indiceb]){c[i]=a[indicea];indicea++;}
                        else {c[i]=b[indiceb];indiceb++;}
                        }
                }
        }

cout<<"VOICI LE TABLEAU c"<<endl;
for(i=0;i<2*N;i++)cout<<c[i]<<" ";
cout<<endl;

return 0;
}


Exercice 3 : 

Ecrire un programme qui gère une liste d'entiers grâce au menu suivant :
1. Ajouter un entier
2. Afficher la liste des entiers
3. Supprimer dernier entier de la liste.
4. Afficher la dernière note tapée
5. Quitter
Il y aura au maximum 10 entiers. Lorsqu'on rajoute un entier, il sera rajouté à la fin de la liste.


Correction exercice 3 :

#include<iostream>
using namespace std;

const int N=10;
int main()
{

int t[N],nb=0,choix,e,i;
bool fini=false;

while(fini==false)
        {
        cout<<"1. Ajouter un entier"<<endl;
        cout<<"2. Afficher la liste des entier"<<endl;
        cout<<"3. Supprimer le dernièr entier de la liste"<<endl;
        cout<<"4. Afficher le dernier entier de la liste"<<endl;
        cout<<"5. Quitter"<<endl;
        cout<<"Votre choix : ";cin>>choix;
        switch(choix)
                {
                case 1 : cout<<"Tapez un entier : ";cin>>e;
                                if(nb<N){t[nb]=e; nb++; cout<<"ENTIER AJOUTE"<<endl;}
                                else cout<<"IMPOSSIBLE LE TABLEAU EST PLEIN"<<endl;
                break;

                case 2 : if(nb==0)cout<<"LA LISTE EST VIDE"<<endl;
                                        else {
                                                cout<<"VOICI LA LISTE"<<endl;
                                                for(i=0;i<nb;i++)cout<<t[i]<<" ";
                                                 cout<<endl;
                                                }
                break;

                case 3 : if(nb>0){nb--; cout<<"ENTIER SUPPRIME"<<endl;}
                                        else cout<<"LA LISTE EST VIDE"<<endl;
                break;

                case 4 : if(nb>0)cout<<"lLE DERNIER ENTIER EST "<<t[nb-1]<<endl;
                                        else cout<<"LA LISTE EST VIDE"<<endl;
                break;

                case 5 : fini=true;
                break;
                }

        }
return 0;
}


Exercice 4 : 

Ecrire un programme qui gère une liste d'entiers grâce au menu suivant :
1. Ajouter un entier
2. Afficher la liste des entiers
3. Supprimer le premier entier ayant une valeur donnée.
4. Supprimer tous les entiers ayant une valeur donnée
5. Quitter
Il y aura au maximum 10 entiers. La liste devra être en permanence triée : lorqu'on rajoute un entier, il sera inséré au bon endroit dans la liste pour que celle-ci reste triée.


Correction exercice 4 :

#include<iostream>
using namespace std;

const int N=10;
int main()
{

int t[N],nb=0,choix,e,V,i,j,trouve;
bool fini=false;

while(fini==false)
        {
        cout<<"1. Ajouter un entier"<<endl;
        cout<<"2. Afficher la liste des entier"<<endl;
        cout<<"3. Supprimer le premier entier ayant une valeur donnée"<<endl;
        cout<<"4. Supprimer tous les entiers ayant une valeur donnée"<<endl;
        cout<<"5. Quitter"<<endl;
        cout<<"Votre choix : ";cin>>choix;
        switch(choix)
                {
                case 1 : if(nb<N)
                                        {
                                        cout<<"Tapez un entier : ";cin>>e;
                                        i=0;
                                        while(i!=nb && t[i]<e)i++;
                                        for(j=nb;j>i;j--)t[j]=t[j-1];
                                        t[i]=e;
                                        nb++;
                                        }
                                else cout<<"IMPOSSIBLE LE TABLEAU EST PLEIN"<<endl;
                break;

                case 2 : if(nb==0)cout<<"LA LISTE EST VIDE"<<endl;
                                        else {
                                                cout<<"VOICI LA LISTE"<<endl;
                                                for(i=0;i<nb;i++)cout<<t[i]<<" ";
                                                 cout<<endl;
                                                }
                break;

                case 3 : cout<<"Tapez la valeur à supprimer :";cin>>V;
                                 trouve=false;
                                 i=0;
                                 while(!trouve && i<nb)if(t[i]==V)trouve=true; else i++;
                                 if(trouve)
                                        {
                                        for(j=i;j<nb-1;j++)t[j]=t[j+1];
                                        nb--;
                                        }
                break;

                case 4 : cout<<"Tapez la valeur à supprimer :";cin>>V; 
                                 j=0;
                                 for(i=0;i<nb;i++)
                                         if(t[i]!=V){t[j]=t[i];j++;}
                                 nb=j;
                break;

                case 5 : fini=true;
                break;
                }

        }
return 0;
}

Exercice 5 : 

Ecrire un programme qui demande à l'utilisateur de taper un entier N<=20 et qui affiche la N-ième ligne du triangle de pascal.
ligne 1 : 1 1
ligne 2 : 1 2 1
ligne 3 : 1 3 3 1
ligne 4 : 1 4 6 4 1
et ainsi de suite ...


Correction exercice 5 :

#include<iostream>
using namespace std;

int main()
{
int a[21],i,j,N;
cout<<"Veuillez taper N : ";cin>>N;
for(i=1;i<=N;i++)
        {
        if(i==1)a[0]=1;
                a[i]=1;
        for(j=i-1;j>=1;j--)a[j]=a[j]+a[j-1];
        }
for(i=0;i<=N;i++)cout<<a[i]<<" ";
cout<<endl;
return 0;
}


Exercice 6 : 

Ecrire un programme qui demande à l'utilisateur de taper 10 entiers compris entre 0 et 20 qui seront stockés dans un tableau et qui affiche le nombre de fois qu'on a tapé un 0, le nombre de 1, le nombre de 2, ..., le nombre de 20.

Correction exercice 6 :

#include<iostream>
using namespace std;

int main()
{
int a[10],nb[21],i;

for(i=0;i<10;i++)
{
        do {cout<<"Veuillez taper l'entier numero "<<i<<" : ";cin>>a[i];}
                while (a[i]>20 || a[i]<0);
}

for(i=0;i<21;i++)nb[i]=0;
for(i=0;i<10;i++)nb[a[i]]++;

for(i=0;i<21;i++){cout<<"Il y a "<<nb[i]<<" fois l'entier "<<i<<endl;}
return 0;
}

Exercice 7 : 

Ecrire un programme qui demande à l'utilisateur de taper le contenu d'un tableau de réels de 3 lignes et 3 colonnes et qui affiche ce tableau mais en affichant la moyenne des éléments de chaque ligne, de chaque colonne et la moyenne globale.

Correction exercice 7 :

#include<iostream>
using namespace std;

const int N=3;
const int M=3;

int main()
{
double t[N][M],moyL[N],moyC[M],moy;
int i,j;

for(i=0;i<N;i++)
        for(j=0;j<M;j++)
        {
        cout<<"Tapez la valeur de la ligne "<<i<<" colonne "<<j<<" : ";
        cin>>t[i][j];
        }

for(i=0;i<N;i++)moyL[i]=0;
for(j=0;j<M;j++)moyC[j]=0;
moy=0;

for(i=0;i<N;i++)
        for(j=0;j<M;j++)
                {
                moyL[i]=moyL[i]+t[i][j];
                moyC[j]=moyC[j]+t[i][j];
                moy=moy+t[i][j];
                }

for(i=0;i<N;i++)moyL[i]=moyL[i]/N;
for(j=0;j<M;j++)moyC[j]=moyC[j]/M;
moy=moy/(N*M);

for(i=0;i<N;i++)
        {
        for(j=0;j<M;j++)
                cout<<t[i][j]<<" ";
        cout<<moyL[i]<<endl;
        }
for(j=0;j<M;j++)
        cout<<moyC[j]<<" ";
cout<<endl;

return 0;
} 


Read More

Partenaires

Computers Blogs
Ajoutez votre site

Contactez-nous

Nom

E-mail *

Message *

Tous droits resérvés-www.exercices-corriges.com Seo Blogger Templates