Contenu | Rechercher | Menus

Annonce

Ubuntu-fr vend de superbes t-shirts et de belles clés USB 32Go
Rendez-vous sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/01/2020, à 19: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, à 19:31

Naziel

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;


[ poster correctement un retour de commande ] [ poster correctement une photo ]
Nouvel adhérent FDN
thinkpad x220, Thinkstation E32 modifié: i5-4570, GTX 1060 6 Gb, 16 Gb de RAM, ...
Pour reprendre le contrôle des semences: https://kokopelli-semences.fr/fr/

Hors ligne

#3 Le 21/01/2020, à 19: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, à 21: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, à 10: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, à 10:50)

Hors ligne

#6 Le 24/01/2020, à 09:26

pingouinux

Re : Bool (C++)

chris7522 #5 a écrit :

Je bloque sur cet exemple :

Qu'est-ce qui ne marche pas là-dedans ?

Hors ligne

#7 Le 25/01/2020, à 14: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, à 17: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, à 16: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, à 22: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, à 10: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, à 13:06

chris7522

Re : Bool (C++)

Milles merci smile

Hors ligne