OVH Cloud OVH Cloud

Probléme de boucle ?

2 réponses
Avatar
patrice brassard
Mon prog est sensé effectué la tâche suivante, mais un problème, peut-être
avec la boucle
dans le main, l'empêche de bien l'accomplir. Est-ce que quelqu'un peut
m'aider à le débugger

svp.

Merci de votre collaboration!

Le programme doit afficher le menu suivant :

. Appuyez sur 1 pour non-fumeurs
. Appuyez sur 2 pour fumeurs

Si la réponse est 1, le programme attribue un siège dans un autobus de
non-fumeurs (1 à 40).
Dans le cas contraire, il attribue un siège dans un autobus de fumeurs (1 à
40). De plus, le
programme devrait afficher à l'écran un document de voyage qui indique si le
passager est
dans un autobus de fumeurs ou de non-fumeurs et combien de passagers il y a
dans l'autobus


//autobus.h
#ifndef AUTOBUS_H
#define AUTOBUS_H

#include <iostream>

using namespace std;

const int FUMEUR = 1;
const int NONFUMEUR = 2;

class autobus {
public:
autobus (int statutf) : statut (statutf),
nb_siege (40),
nb_siege_alloue (0) {
}
~autobus() {
}
int isFumeur () {
return statut;
}
int siegeAlloue() {
return nb_siege_alloue;
}
int reserverSiege() {
return (nb_siege - nb_siege_alloue ? nb_siege_alloue++ : 0);
}
private:
int nb_siege;
int nb_siege_alloue;
int statut ;
};
#endif

//Reservation.h
#ifndef RESERVATION_H
#define RESERVATION_H
#include "autobus.h"
#include <iostream>

using namespace std;
class Reservation {
public:
Reservation() {
autobus_fumeur = new autobus (FUMEUR);
autobus_non_fumeur = new autobus (NONFUMEUR);
}
~Reservation () {
delete autobus_fumeur;
delete autobus_non_fumeur;
}
int reserver_fumeur() {
return autobus_fumeur->reserverSiege();
}
int reserver_non_fumeur() {
return autobus_non_fumeur->reserverSiege();
}
int siege_alloue_fumeur() {
return autobus_fumeur->siegeAlloue();
}
int siege_alloue_non_fumeur() {
return autobus_non_fumeur->siegeAlloue();
}
private:
autobus* autobus_fumeur;
autobus* autobus_non_fumeur;
};
#endif

//file1.cpp
#include <iostream>
#include "reservation.h"

using namespace std;

int main(int argc, char **argv) {
Reservation reserv;
int reponse = 0;
int nb_siege;
char g;
//while (reponse != 3) {
do {
(reponse = 0);
cout << "Appuyez sur 1 pour Non-fumeurs "<< endl;
cout << "Appuyez sur 2 pour Fumeurs "<< endl;
cin >> reponse;
if (reponse == 1) {
nb_siege = reserv.reserver_non_fumeur();
}
if (nb_siege > 0) {
cout << "Non-fumeurs " << nb_siege << endl;
}
if (reponse == 2) {
nb_siege = reserv.reserver_fumeur();
}
//if (nb_siege > 0) {
if (nb_siege > 1) {
cout << "Fumeurs " << nb_siege << endl;
}
if (reponse == 3) {
cout << "Reponse invalide" << endl;
}
std::cout << "Appuyez sur une touche..." << std::endl;
std::cin >> g;
} while (reponse != 3);
return 0;
}

2 réponses

Avatar
benoitB
Mon prog est sensé effectué la tâche suivante, mais un problème, peut-être
avec la boucle
dans le main, l'empêche de bien l'accomplir. Est-ce que quelqu'un peut
m'aider à le débugger

svp.

Merci de votre collaboration!

Le programme doit afficher le menu suivant :

. Appuyez sur 1 pour non-fumeurs
. Appuyez sur 2 pour fumeurs

Si la réponse est 1, le programme attribue un siège dans un autobus de
non-fumeurs (1 à 40).
Dans le cas contraire, il attribue un siège dans un autobus de fumeurs (1 à
40). De plus, le
programme devrait afficher à l'écran un document de voyage qui indique si le
passager est
dans un autobus de fumeurs ou de non-fumeurs et combien de passagers il y a
dans l'autobus


//autobus.h
#ifndef AUTOBUS_H
#define AUTOBUS_H

#include <iostream>

using namespace std;

const int FUMEUR = 1;
const int NONFUMEUR = 2;

class autobus {
public:
autobus (int statutf) : statut (statutf),
nb_siege (40),
nb_siege_alloue (0) {
}
~autobus() {
}
int isFumeur () {
return statut;
}
int siegeAlloue() {
return nb_siege_alloue;
}
int reserverSiege() {
return (nb_siege - nb_siege_alloue ? nb_siege_alloue++ : 0);
}
private:
int nb_siege;
int nb_siege_alloue;
int statut ;
};
#endif

//Reservation.h
#ifndef RESERVATION_H
#define RESERVATION_H
#include "autobus.h"
#include <iostream>

using namespace std;
class Reservation {
public:
Reservation() {
autobus_fumeur = new autobus (FUMEUR);
autobus_non_fumeur = new autobus (NONFUMEUR);
}
~Reservation () {
delete autobus_fumeur;
delete autobus_non_fumeur;
}
int reserver_fumeur() {
return autobus_fumeur->reserverSiege();
}
int reserver_non_fumeur() {
return autobus_non_fumeur->reserverSiege();
}
int siege_alloue_fumeur() {
return autobus_fumeur->siegeAlloue();
}
int siege_alloue_non_fumeur() {
return autobus_non_fumeur->siegeAlloue();
}
private:
autobus* autobus_fumeur;
autobus* autobus_non_fumeur;
};
#endif

//file1.cpp
#include <iostream>
#include "reservation.h"

using namespace std;

int main(int argc, char **argv) {
Reservation reserv;
int reponse = 0;
int nb_siege;
char g;
//while (reponse != 3) {
do {
(reponse = 0);
cout << "Appuyez sur 1 pour Non-fumeurs "<< endl;
cout << "Appuyez sur 2 pour Fumeurs "<< endl;
cin >> reponse;
if (reponse == 1) {
nb_siege = reserv.reserver_non_fumeur();
}
if (nb_siege > 0) {
cout << "Non-fumeurs " << nb_siege << endl;
}
if (reponse == 2) {
nb_siege = reserv.reserver_fumeur();
}
//if (nb_siege > 0) {
if (nb_siege > 1) {
cout << "Fumeurs " << nb_siege << endl;
}
if (reponse == 3) {
cout << "Reponse invalide" << endl;
}
std::cout << "Appuyez sur une touche..." << std::endl;
std::cin >> g;
} while (reponse != 3);
return 0;
}


Deux choses :

1. A la place de :
int reserverSiege() {
return (nb_siege - nb_siege_alloue ? nb_siege_alloue++ : 0);
}
j'écrirai :
int reserverSiege ()
{
return (nb_siege_alloue < nb_siege ? nb_siege_alloue++ : 0);
}

2. J'écrirai le main ainsi :
int main(int argc, char** argv)
{
Reservation reserv;
int reponse = 0;
int nb_siege;
do {
cout << "Appuyez sur 1 pour Non-fumeurs "<< endl;
cout << "Appuyez sur 2 pour Fumeurs "<< endl;
cout << "(3 pour quitter...)"<< endl;
cin >> reponse;

if( reponse == 1 )
{
nb_siege = reserv.reserver_non_fumeur();
if( nb_siege > 0 )
cout << "Non-fumeurs " << nb_siege << endl;
else
cout << "Bus non-fumeur plein..." << endl;
}
if( reponse == 2 )
{
nb_siege = reserv.reserver_fumeur();
if( nb_siege > 0 )
cout << "Fumeurs " << nb_siege << endl;
else
cout << "Bus fumeur plein..." << endl;
}

cout << "Appuyez sur une touche..." << endl;
cin >> reponse;
}while( reponse != 3 );
return 0;
}

Avatar
patrice brassard
"benoitB" a écrit dans le message de news:
42e45636$0$22275$
Mon prog est sensé effectué la tâche suivante, mais un problème,
peut-être avec la boucle
dans le main, l'empêche de bien l'accomplir. Est-ce que quelqu'un peut
m'aider à le débugger

svp.

Merci de votre collaboration!

Le programme doit afficher le menu suivant :

. Appuyez sur 1 pour non-fumeurs
. Appuyez sur 2 pour fumeurs

Si la réponse est 1, le programme attribue un siège dans un autobus de
non-fumeurs (1 à 40).
Dans le cas contraire, il attribue un siège dans un autobus de fumeurs (1
à 40). De plus, le
programme devrait afficher à l'écran un document de voyage qui indique si
le passager est
dans un autobus de fumeurs ou de non-fumeurs et combien de passagers il y
a dans l'autobus


//autobus.h
#ifndef AUTOBUS_H
#define AUTOBUS_H

#include <iostream>

using namespace std;

const int FUMEUR = 1;
const int NONFUMEUR = 2;

class autobus {
public:
autobus (int statutf) : statut (statutf),
nb_siege (40),
nb_siege_alloue (0) {
}
~autobus() {
}
int isFumeur () {
return statut;
}
int siegeAlloue() {
return nb_siege_alloue;
}
int reserverSiege() {
return (nb_siege - nb_siege_alloue ? nb_siege_alloue++ : 0);
}
private:
int nb_siege;
int nb_siege_alloue;
int statut ;
};
#endif

//Reservation.h
#ifndef RESERVATION_H
#define RESERVATION_H
#include "autobus.h"
#include <iostream>

using namespace std;
class Reservation {
public:
Reservation() {
autobus_fumeur = new autobus (FUMEUR);
autobus_non_fumeur = new autobus (NONFUMEUR);
}
~Reservation () {
delete autobus_fumeur;
delete autobus_non_fumeur;
}
int reserver_fumeur() {
return autobus_fumeur->reserverSiege();
}
int reserver_non_fumeur() {
return autobus_non_fumeur->reserverSiege();
}
int siege_alloue_fumeur() {
return autobus_fumeur->siegeAlloue();
}
int siege_alloue_non_fumeur() {
return autobus_non_fumeur->siegeAlloue();
}
private:
autobus* autobus_fumeur;
autobus* autobus_non_fumeur;
};
#endif

//file1.cpp
#include <iostream>
#include "reservation.h"

using namespace std;

int main(int argc, char **argv) {
Reservation reserv;
int reponse = 0;
int nb_siege;
char g;
//while (reponse != 3) {
do {
(reponse = 0);
cout << "Appuyez sur 1 pour Non-fumeurs "<< endl;
cout << "Appuyez sur 2 pour Fumeurs "<< endl;
cin >> reponse;
if (reponse == 1) {
nb_siege = reserv.reserver_non_fumeur();
}
if (nb_siege > 0) {
cout << "Non-fumeurs " << nb_siege << endl;
}
if (reponse == 2) {
nb_siege = reserv.reserver_fumeur();
}
//if (nb_siege > 0) {
if (nb_siege > 1) {
cout << "Fumeurs " << nb_siege << endl;
}
if (reponse == 3) {
cout << "Reponse invalide" << endl;
}
std::cout << "Appuyez sur une touche..." << std::endl;
std::cin >> g;
} while (reponse != 3);
return 0;
}


Deux choses :

1. A la place de :
int reserverSiege() {
return (nb_siege - nb_siege_alloue ? nb_siege_alloue++ : 0);
}
j'écrirai :
int reserverSiege ()
{
return (nb_siege_alloue < nb_siege ? nb_siege_alloue++ : 0);
}

2. J'écrirai le main ainsi :
int main(int argc, char** argv)
{
Reservation reserv; int reponse = 0;
int nb_siege;
do {
cout << "Appuyez sur 1 pour Non-fumeurs "<< endl;
cout << "Appuyez sur 2 pour Fumeurs "<< endl;
cout << "(3 pour quitter...)"<< endl;
cin >> reponse;

if( reponse == 1 )
{
nb_siege = reserv.reserver_non_fumeur();
if( nb_siege > 0 )
cout << "Non-fumeurs " << nb_siege << endl;
else
cout << "Bus non-fumeur plein..." << endl;
}
if( reponse == 2 )
{
nb_siege = reserv.reserver_fumeur();
if( nb_siege > 0 )
cout << "Fumeurs " << nb_siege << endl;
else
cout << "Bus fumeur plein..." << endl;
}

cout << "Appuyez sur une touche..." << endl;
cin >> reponse;
}while( reponse != 3 );
return 0;
}


Merci pour ta réponse. Le main ne se comporte pas comme je le souhaiterais.
Lorsque l'usager appuie sur 1, l'affichage ne devrait pas afficher au départ
que l'autobus non-fumeur est plein. Il devrait afficher Non-fumeurs 1
Si l'usager appuie de nouveau sur 1, l'affichage indiquerait Non-fumeurs 2

Merci !

Patrice