// tri à bulle #define TRUE 1 #define FALSE 0 void tri_a_bulle(int*t,int n) { int j =0; int tmp =0; int en_desordre =1; while(en_desordre) { en_desordre = FALSE; for (j =0; j < n-1; j++){ if (t[j] > t[j+1]) {tmp = t[j+1]; t[j+1] = t[j]; t[j] = tmp; en_desordre = TRUE; }}}}
void triResulat (string*_nomDesCandidats, int *_nbVoixDesCandidats, int nCand) int j =0; int tmp =0; int en_desordre =1; while(en_desordre) { en_desordre = FALSE; for(j =0; j < n-1; j++) { if(_nbVoixDesCandidats[j] > _nbVoixDesCandidats[j+1] ) { tmp _nbVoixDesCandidats[j+1] _nomDesCandidats[j+1] _nbVoixDesCandidats[j+1] = _nbVoixDesCandidats[j] && _nomDesCandidats[j+1] = _nomDesCandidats[j]; _nbVoixDesCandidats[j] = _nomDesCandidats[j] = tmp ; en_desordre = TRUE; }}}}
if(_nbVoixDesCandidats[j] > _nbVoixDesCandidats[j+1] )
{
tmp _nbVoixDesCandidats[j+1] _nomDesCandidats[j+1]
_nbVoixDesCandidats[j+1] = _nbVoixDesCandidats[j] && _nomDesCandidats[j+1] = _nomDesCandidats[j];
_nbVoixDesCandidats[j] = _nomDesCandidats[j] = tmp ;
en_desordre = TRUE;
}
if (condition) { a = 2; b = 3; }
if (_nbVoixDesCandidats[j] > _nbVoixDesCandidats[j + 1]) { // peudo-code echange(_nbVoixDesCandidats[j], _nbVoixDesCandidats[j + 1]); echange(_nomDesCandidats[j], _nomDesCandidats[j + 1]); }
if (_nbVoixDesCandidats[j] > _nbVoixDesCandidats[j + 1]) { int tmpVoix = _nbVoixDesCandidats[j]; _nbVoixDesCandidats[j] = _nbVoixDesCandidats[j + 1]; _nbVoixDesCandidats[j + 1] = tmpvoix; std::string tmpNom = _nomDesCandidats[j]; _nomDesCandidats[j] = _nomDesCandidats[j + 1]; _nomDesCandidats[j + 1] = tmpNom; }
double Election::tauxDeParticipation() { if (_nbElecteurs==0) return 0; else return (_nbVotants/_nbElecteurs); } // ça doit pas être bien plus compliqué que ça
int Election::suffragesExprimes() { int s=0; for (int i=0; i<nCand; i++) _nbVoixDesCandidats[i]=_nbVotants; s+=_nbVotants; return s; }
double Election::tauxDeBlancs() { int r =0; // il faut trouver le nombre d'électeurs ayant votés blanc, soit zéro, mais je sèche un peu
"tauxDeParticipation sans paramètre renvoyant un réel. Cette méthode renvoie le rapport du nombre de votant avec le nombre d'électeurs, si le nombre d'électeurs est nul, elle renvoie 0"
double Election::tauxDeParticipation() { if (_nbElecteurs == 0) return 0; return _nbVotants / _nbElecteurs; }
"suffragesExprimes sans paramètre renvoyant un entier. Cette méthode renvoie la somme du nombre d'électeurs ayant voté pour un candidat"
"tauxDeBlanc sans paramètre renvoyant un double. Renvoie le rapport entre le nombre d'électeurs ayant votés blanc et le nombre de votants. Au cas ou le nombre de votants serait nul, renvoie zéro"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionint Election::suffragesExprimes() { int sommeVoixDesCandidats=0; for (int i=0; i<nCand; i++) sommeVoixDesCandidats+=_nbVoixDesCandidats[i] return sommeVoixDesCandidats; }
double Election::tauxDeBlancs() { double suffragesExprimes() if (_nbVotants==0) return 0; return (_nbVotants-sommeVoixDesCandidats); //ça me choque un peu }
void Election::afficheResultatsExprimes() { double suffragesExprimes() for(int i=0; i<nCand ;i++) std::cout<<"Le candidat : "<<_nomDesCandidats[i]<<" a obtenu "<<(100*_nbVoixDesCandidats[i] / sommeVoixDesCandiats <<" % des voix"; // ça doit bien être quelque chose dans le genre, 100 fois le nombre de voix pour le candidat divisé par le nombre total de voix. Ah mais faut prendre en compte les votes blancs je suppose. Je ne sais même pas comment se déroule une élection.. }
int Election::suffragesExprimes()
{
int sommeVoixDesCandidats = 0;
for (int i=0; i<nCand; i++)
sommeVoixDesCandidats += _nbVoixDesCandidats[i];
return sommeVoixDesCandidats;
}
double Election::tauxDeBlancs()
{
double suffragesExprimes()
if (_nbVotants==0)
return 0;
return (_nbVotants-sommeVoixDesCandidats); //ça me choque un peu
}
int addition(int a, int b) { return a + b; } int main() { int b = addition(5, 9); std::cout << "b est égale à:" << b << std::endl << "8 et 9 font: " << addition(8, 9) << std::endl; return 0; }
void Election::afficheResultatsExprimes()
double Election::tauxDeBlancs() { int sommeVoixDesCandidats=suffragesExprimes(); if (_nbVotants==0) return 0; return (_nbVotants-sommeVoixDesCandidats); }
void Election::afficheResultatsExprimes() { int sommeVoixDesCandidats = suffragesExprimes() for(int i=0; i<nCand ;i++) std::cout<<"Le candidat : "<<_nomDesCandidats[i]<<" a obtenu "<<(100*_nbVoixDesCandidats[i] / sommeVoixDesCandiats <<" % des voix";
Auriez vous le reste de la correction de ce sujet
void Election:: afficheResultatsExprimes() {std::cout<<"" Le % d'électeurs s'étant abstenus s'élève à :"<<100*(_nbElecteurs - _nbVotants)/ _nbElecteurs; // Le nombre d'électeurs total moins le nombre de votants donne bien le nombre d'électeurs s'étant abstenus. int sommeVoixDesCandidats=suffragesExprimes() std::cout<<"Le % de votes blancs est : "<<100*(_nbVotants- sommeVoixDesCandidats)/_nbElecteurs; // là le pourcentage de vote blancs for(int i=0; i<nCand ;i++) std::cout<<"Le % d'électeurs ayant votés pour "<<_nomDesCandidats[i]<<" est de : "<< 100*_nbVoixDesCandidats[i]/_nbElecteurs;
#ifndef LEGISLATIVE_HH_ # define LEGISLATIVE_HH_ class Legislative : public Election { Legislative ( int nCand, std::string* noms) }; // Legislative dérivant publiquement de Election, on ne redéfinit pas afficheSelectiones #endif /* !LEGISLATIVE_HH_ */
double Election::tauxDeBlancs()
le nombre d'électeurs ayant votés pour un candidat, c'est différents du nombre de votants ayant votés pour le candidat ?
void Election:: afficheResultatsExprimes()
// Legislative dérivant publiquement de Election, on ne redéfinit pas afficheSelectiones
"Ce constructeur appelle le constructeur correspondant de la classe Election"
Je ne sais absolument pas comment faire, ça commence mal
Legislative::Legislative(int nCand, std::string* noms) : Election(nCand, noms) { }
Après la grosse méthode afficheSelectionnes, y'a trop de tri, d'affichage, de conditions, c'est confus !
double Election::tauxDeBlancs() { int sommeVoixDesCandidats= suffragesExprimes(); if (_nbVotants==0) return 0; return (_nbVotants-sommeVoixDesCandidats)/_nbElecteurs; }
void Election::afficheResultatsExprimes() { int sommeVoixDesCandidats = suffragesExprimes() for(int i= 0; i<nCand ;i++) std::cout<<"Le candidat : "<<_nomDesCandidats[i]<<" a obtenu "<<(100*_nbVoixDesCandidats[i] / sommeVoixDesCandiats <<" % des voix"; }
void Election:: afficheResultatsExprimes() { std::cout<<" Le % d'électeurs s'étant abstenus s'élève à :"<<100*(_nbElecteurs - _nbVotants)/ _nbElecteurs; int sommeVoixDesCandidats =suffragesExprimes() std::cout<<"Le % de votes blancs est : "<<100*(_nbVotants- sommeVoixDesCandidats)/_nbElecteurs; for(int i=0; i<nCand ;i++) std::cout<<"Le % d'électeurs ayant votés pour "<<_nomDesCandidats[i]<<" est de : " <<100*_nbVoixDesCandidats[i]/_nbElecteurs; /* 3 taux en fonction de _nbElecteurs, ça me semble juste mis à part cette dernière*/ }
#ifndef LEGISLATIVE_HH_ # define LEGISLATIVE_HH_ class Legislative : public Election { Legislative ( int nCand, std::string* noms); void afficheSelectionnes(); }; #endif /* !LEGISLATIVE_HH_ */
#include #include <string> #include "Legislative.hh" Legislative::Legislative(int nCand, std::string* noms) : Election(nCand, noms) { } void Legislative::afficheSelectionnes() {// je m'y pencherai dessus dans l'après midi
double Election::tauxDeBlancs()
void Election::afficheResultatsExprimes()
void Election:: afficheResultatsExprimes()
je croyais qu'on ne devait pas réécrire le prototype
class A { public: A(); void func(); }; class B : public A { public: B(); };
class A { public: A(); virtual void func() = 0; }; class B : public A { public: B(); virtual void func(); // Tu noteras l'emploi du mot clé "virtual", indispensable dans ce cas précis. };
#ifndef LEGISLATIVE_HH_ # define LEGISLATIVE_HH_ class Legislative : public Election { Legislative ( int nCand, std::string* noms); virtual void afficheSelectionnes(); }; #endif /* !LEGISLATIVE_HH_ */
int j = 0; int tmp =0; int en_desordre =1; while(en_desordre) { en_desordre = FALSE; for(j =0; j < n-1; j++) void Legislative::afficheSelectionnes()/* dois je mettre " virtual void Legislative::afficheSelectionnes" ou simplement "void Legislative::afficheSelectionnes" ?*/ { if (_nbVoixDesCandidats[j] > _nbVoixDesCandidats[j + 1]) { int tmpVoix = _nbVoixDesCandidats[j]; _nbVoixDesCandidats[j] = _nbVoixDesCandidats[j + 1]; _nbVoixDesCandidats[j + 1] = tmpvoix; std::string tmpNom = _nomDesCandidats[j]; _nomDesCandidats[j] = _nomDesCandidats[j + 1]; _nomDesCandidats[j + 1] = tmpNom; }// je reprends ce qu'on a déjà fait int sommeVoixDesCandidats=suffragesExprimes(); for (int i= 0;i<nCand;i++) { if((100*_nbVoixDesCandidats[i]/sommeVoixDesCandidats) > (50/100)*sommeVoixDesCandidats && (100*_nbVoixDesCandidats[i]/_nbElecteurs) > 25/100*_nbElecteurs ) std::cout<<_nomsDesCandidats[i]<<" a ete elu au premier tout a la majorite absolue"; else std::cout<<" Les candidats qui s'affronteront au second tour sont donc : "<<_nomsDesCandidats[i]<<" et "<<_nomsDesCandidats[i-1] /* et la je veux refaire un test pour les candidats ayant 12,5% des electeurs inscrits, mais je sèche }
#include #include <fstream> #include <string> #include "election.hh" #include "legislative.hh" string*litResultat(int &n) { fstream f; f.open ("Candidats.txt",ios::in); f>>n; string *T = new std::string[n]; for ( int i=0 ; i<n ; i++ ) f>>T[i]; f.close(); } void resultats(Election) saisieResultat(); afficheSelectionnes(); afficheResultatsExrpimes(); afficheResultatsElecteurs( // ? de l'objet passé en paramètre ?
void Legislative::afficheSelectionnes() // Le virtual ne se met qu'à la définition dans le header { triResultat(); // appel de la fonction de tri. int sommeVoixDesCandidats = suffragesExprimes(); if ((100*_nbVoixDesCandidats[0]/sommeVoixDesCandidats) > (50/100)*sommeVoixDesCandidats && (100*_nbVoixDesCandidats[0]/_nbElecteurs) > 25/100*_nbElecteurs ) std::cout<<_nomsDesCandidats[0]<<" a ete elu au premier tout a la majorite absolue"; else { // Boucle sur les N premiers candidats. On s'arrêt de boucler quand // les conditions pour être au second tour ne sont plus remplis // On pourrait boucler jusqu'à la fin, mais vu que les candidats sont triés, // on sait qu'arrivé à un candidat non conservé pour le 2nd tour, tous ceux d'après // ne seront pas au second tour non plus. // A la fin du tour de boucle, on a un indice représentant la position du dernier candidat retenu. // Il suffit alors d'afficher le candidat "0" à "dernier candidat retenu". }
void Legislative::afficheSelectionnes() { triResultat(); int sommeVoixDesCandidats = suffragesExprimes(); if ((100*_nbVoixDesCandidats[0]/sommeVoixDesCandidats) > (50/100)*sommeVoixDesCandidats && (100*_nbVoixDesCandidats[0]/_nbElecteurs) > 25/100*_nbElecteurs ) std::cout<<_nomsDesCandidats[0]<<" a ete elu au premier tout a la majorite absolue"; else { for(int i=0;i<nCand;i++) {do {std::cout<<_nomsDesCandidats[0]<<" et "<<_nomsDesCandidats[1]<<" sont retenus pour le second tour ainsi que les candidats "<<_nomsDesCandidats[i]; while(100*_nbVoixDesCandidats[i]/_nbElecteurs) > 12,5/100*_nbElecteurs); // ou quelque chose dans le même style je suppose..
else {for(int i=0;i<nCand;i++) if(100*_nbVoixDesCandidats[i]/_nbElecteurs) > 12,5/100*_nbElecteurs); {std::cout<<"Le candidat "<<_nomsDesCandidats[i]<<" est selectionne pour le deuxieme tour"; break; } } // comme ça ?
Donc j'inverse juste le sens de la condition ?