Pages : 1
#1 Le 21/01/2020, à 18:09
- chris7522
Bool (C++)
Bonjour a toutes et a tous ,
Je voulais demander a l'utilisateur de taper des entiers positifs et faire leur moyenne .
Lorsque la valeur est négative : message d'erreur ,retapez la valeur . Lorsqu'on taperai 0 , cela signifie que le dernier entier a été tapé . On affiche alors la moyenne . Si le nombre d'entier tapés est egal a 0 , on affiche : aucun entier tapé .
Je voulais utiliser le type bool , mais visiblement je maitrise pas encore ! Il faut dire qu'il y a pas beaucoup d'exemple d'utilisation sur le net .
Merci de votre aide .
#include <iostream>
#include <string>
using namespace std;
int main()
{
int x,nb,som(0);
double moy(0);
bool positif;
positif=x>0;
do
{
cout <<"Tapez un entier positif :"<< endl;
cin >> x;
cin.ignore();
if(positif)
{som+=x;nb++;}
else
cout <<"Erreur , recommencez..."<< endl;
}while(!positif);
if(nb!=0)
{
moy=(double)som /nb;
cout <<"La moyenne des entiers est de :" << moy << endl;
}
else
cout <<"Aucun entier tapé" << endl;
return 0;
}
Hors ligne
#2 Le 21/01/2020, à 18:31
- Nuliel
Re : Bool (C++)
Tu attends des entiers positifs/négatifs ou des nombres flottants postifs/négatifs?
Vu int x,nb,som(0); j'imagine que c'est le premier cas.
positif=x>0; cela fonctionne? Pour moi il n'y a que deux possibilités: faire un if else ou alors une condition ternaire mais c'est pas forcément top: positif = (x>0) ? true : false;
Hors ligne
#3 Le 21/01/2020, à 18:40
- pingouinux
Re : Bool (C++)
Bonjour,
Essaye ceci
#include <iostream>
#include <string>
using namespace std;
int main()
{
int x,nb(0),som(0);
double moy(0);
bool positif;
do
{
cout <<"Tapez un entier positif :"<< endl;
cin >> x;
cin.ignore();
positif=x>0;
if(x==0) break;
if(positif)
{som+=x;nb++;}
else
cout <<"Erreur , recommencez..."<< endl;
}while(x!=0);
if(nb!=0)
{
moy=(double)som /nb;
cout <<"La moyenne des entiers est de :" << moy << endl;
}
else
cout <<"Aucun entier tapé" << endl;
return 0;
}
Hors ligne
#4 Le 21/01/2020, à 20:07
- chris7522
Re : Bool (C++)
Merci de votre aide a tous les deux , me voila tiré d'affaire une nouvelle fois !
Hors ligne
#5 Le 23/01/2020, à 09:49
- chris7522
Re : Bool (C++)
Bonjour,
Je bloque sur cet exemple :
include<iostream>
using namespace std;
const int N=10;
int main()
{
int t[N],i,V;
bool trouve;
for(i=0;i<N;i++){cout<<"Tapez un entier ";cin>>t[i];}
cout<<"Tapez la valeur de V : ";cin>>V;
trouve=false;
i =0;
while(!trouve && i<N)
if(t[i]==V)trouve=true; else i++;
if(trouve) cout<<"La valeur V se trouve dans le tableau"<<endl;
else cout<<"La valeur V ne se trouve pas dans le tableau"<<endl;
return 0;
}
Voila comment j'explique le code depuis l'initialisation de "trouve" :
- trouve est initialisé a faux ;
- puis vient la boucle while :
. Tant que les 2 conditions suivante ne sont pas satisfaite a savoir :
1 ere condition : tant que "trouve" n'est pas vrai
2 eme condition : i n'est pas plus grand que N
J'execute :
if(t[i... V)trouve=true;
( si je trouve un entier dans le tableau egale a V , alors "trouve" deviendra true .
sinon : i++ ( je continue a chercher dans le tableau )
- Par contre si je trouve cet entier dans mon tableau , ma boucle s'arrete et j'affiche :
. cout<<"La valeur V se trouve dans le tableau"<<endl;
- Si a la fin de mon tableau je ne le trouve pas , j'affiche :
. cout<<"La valeur V ne se trouve pas dans le tableau"<<endl;
Est ce le bon raisonnement ?
Dernière modification par chris7522 (Le 23/01/2020, à 09:50)
Hors ligne
#6 Le 24/01/2020, à 08:26
- pingouinux
Re : Bool (C++)
Je bloque sur cet exemple :
Qu'est-ce qui ne marche pas là-dedans ?
Hors ligne
#7 Le 25/01/2020, à 13:38
- chris7522
Re : Bool (C++)
L'exemple fonctionne bien , c'est moi qui a du mal a comprendre comment fonctionne le type bool et ce qu'on peut en faire . Je me demandais si l'explication du deroulement que j'ai faite de cet exemple est correcte .
Hors ligne
#8 Le 25/01/2020, à 16:59
- pingouinux
Re : Bool (C++)
Une variable de type bool est une variable logique qui ne peut prendre que deux valeurs, 0 et 1 (respectivement faux et vrai).
Ton raisonnement est correct, mais il existe des méthodes beaucoup plus rapides si le tableau est trié. Tu gagneras du temps sur les gros tableaux : pour 1 million de valeurs, tu n'auras qu'une vingtaine de tests à faire au lieu de 500 000 en moyenne. Tu peux regarder la fonction bsearch.
Hors ligne
#9 Le 26/01/2020, à 15:25
- chris7522
Re : Bool (C++)
Je te remercie de ton aide . Cette fonction peut etre utilisé pour rechercher des caracteres aussi ?
Hors ligne
#10 Le 26/01/2020, à 21:55
- chris7522
Re : Bool (C++)
J'ai essayé la fonction en question a travers ce code mais j'ai une erreur de segmentation ...
#include <iostream>
#include <string>
using namespace std;
int const N=5;
int compare (const void * a, const void * b) {
return ( *(int*)a - *(int*)b );
}
int main ()
{
int valeurs[N+1];
cout <<"Vous avez "<< N << " essai pour trouver le nombre mystere " << endl;
for(int i=0,nb=5;i<N;i++,nb--)
{
cout <<"Entrez une valeur entre 0 et 50 :" << endl;
cin >> valeurs[i];
cin.ignore();
cout <<"Il vous reste " << nb-1 << " nombre a entrer" << endl;
}
int element=0;
srand(time(nullptr));
element = rand()%50;
int *pos;
pos = (int*) bsearch (&element, valeurs, 7, sizeof (int), compare);
cout <<"Le nombre magique etait : " << *pos << endl;
if ( pos != NULL )
cout << *pos << " est dans votre choix" << endl;
else
cout << element << " n'est pas dans votre choix" << endl;
return 0;
}
Hors ligne
#11 Le 27/01/2020, à 09:49
- pingouinux
Re : Bool (C++)
C'est cette ligne qui est en cause, quand pos==NULL
cout <<"Le nombre magique etait : " << *pos << endl;
Il faut la remplacer par
cout <<"Le nombre magique etait : " << element << endl;
D'autre part, le tableau valeurs doit être trié en ordre ascendant avant l'appel à bsearch. Il est dimensionné à 6 (dont 5 valeurs utiles), et non à 7 comme tu l'indiques dans l'appel à bsearch.
Hors ligne
#12 Le 27/01/2020, à 12:06
- chris7522
Re : Bool (C++)
Milles merci
Hors ligne
Pages : 1