Minilogus
Messages postés21Date d'inscriptiondimanche 31 janvier 2010StatutMembreDernière intervention10 juin 2011
-
11 mars 2010 à 18:55
thebroyeur
Messages postés7Date d'inscriptiondimanche 10 décembre 2006StatutMembreDernière intervention 8 mai 2010
-
16 mars 2010 à 19:39
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
thebroyeur
Messages postés7Date d'inscriptiondimanche 10 décembre 2006StatutMembreDernière intervention 8 mai 201012 16 mars 2010 à 19:39
Tu pourrait mettre quelques commentaires ainsi que les spécifications des fonctions ( pré-requis, résultat, par exemple) Ceci facilite grandement la lecture et évite de se casser la tete lorsque l'on veu reprendre le code aprés une période d'inactivitée ;)
Minilogus
Messages postés21Date d'inscriptiondimanche 31 janvier 2010StatutMembreDernière intervention10 juin 20113 11 mars 2010 à 22:37
Voici un rectificatif global de ce que j'ai posté plus tôt.
do
{
if(good==0)
{
std::cout<<std::endl<<"-> Saisie incorrecte, ressaisissez: ";
}
std::cin>>saisie;
found=saisie.find_first_of(",");
while (found!=std::string::npos)
{
saisie[found]='.';// les virgules françaises seront automatiquement transformées en point.
found=saisie.find_first_of(",",found+1);
}
std::istringstream iss(saisie);// conversion du type string en type double.
iss>>num;
if(iss.fail())
{
good=0;
trouble=1;
}
else
{
std::ostringstream oss;
oss<<num;
verif=oss.str();
int main()
{
std::cout<<">-------------------- CONVERTISSEUR D'ARGENT --------------------<"<<std::endl<<std::endl;
int quitter=0;
int choix;
double money;
double val;
std::cout<<"-> Etalonnage du programme <-"<<std::endl;
std::cout<<"-> Donner la correspondance d'un euro en dollar: ";
money=reel();
std::cout<<std::endl<<"<--------------------------->"<<std::endl<<std::endl;
do//pour le "quitter" de fin
{
std::cout<<"-------------------- MENU --------------------"<<std::endl<<std::endl;
std::cout<<std::endl<<std::endl<<">----------------------------------------------------------------<"<<std::endl;
std::cout<<std::endl<<"--> Faire une autre conversion? (1=oui/0=non): ";
quitter=entier();
std::cout<<std::endl<<">----------------------------------------------------------------<"<<std::endl<<std::endl;
}while(quitter>0);
return 0;
}
Minilogus
Messages postés21Date d'inscriptiondimanche 31 janvier 2010StatutMembreDernière intervention10 juin 20113 11 mars 2010 à 20:36
//Oups, je me suis trompé dans les lignes de fin,
//j'ai mis:
std::cout<<std::endl<<"--> Faire un autre calcul d'incertitude? (1=oui/0=non): ";
//il faut remplacer par:
std::cout<<std::endl<<"--> Faire une autre conversion? (1=oui/0=non): ";
//^^.
Minilogus
Messages postés21Date d'inscriptiondimanche 31 janvier 2010StatutMembreDernière intervention10 juin 20113 11 mars 2010 à 20:28
Je n'ai pas vraiment de bon tuto à te proposer...
Les strings sont des chaînes permettant de stocker des caractères.
par ex:
std::string a;
a="Bonjour";// ne pas oublier les "".
std::cout<
#include <sstream>
int entier()
{
std::string saisie;
std::string verif;
bool good=1;
bool trouble=0;
int num;
do
{
if(good==0)
{
std::cout<<std::endl<<"-> Saisie incorrecte, ressaisissez: ";
}
std::cin>>saisie;
std::istringstream iss(saisie);// conversion du type string en type double.
iss>>num;
if(iss.fail())
{
good=0;
trouble=1;
}
else
{
std::ostringstream oss;
oss<<num;
verif=oss.str();
do
{
if(good==0)
{
std::cout<<std::endl<<"-> Saisie incorrecte, ressaisissez: ";
}
std::cin>>saisie;
found=saisie.find_first_of(",");
while (found!=std::string::npos)
{
saisie[found]='.';// les virgules françaises seront automatiquement transformées en point.
found=saisie.find_first_of(",",found+1);
}
std::istringstream iss(saisie);// conversion du type string en type double.
iss>>num;
if(iss.fail())
{
good=0;
trouble=1;
}
else
{
std::ostringstream oss;
oss<<num;
verif=oss.str();
std::cout<<std::endl<<std::endl<<">----------------------------------------------------------------<"<<std::endl;
std::cout<<std::endl<<"--> Faire un autre calcul d'incertitude? (1=oui/0=non): ";
quitter=entier();
std::cout<<std::endl<<">----------------------------------------------------------------<"<<std::endl<<std::endl;
}while(quitter>0);
return 0;
}
// voilà, si tu as des questions n'hésite pas à m'en faire part...
smartties
Messages postés23Date d'inscriptionjeudi 11 mars 2010StatutMembreDernière intervention 1 septembre 2014 11 mars 2010 à 20:09
Génial merci pour ces deux fonctions. parcontre je ne comprend pas comment marchent les string et comment les utiliser :
"std::istringstream iss(saisie);// conversion du type string en type double."
"std::ostringstream oss;"
est ce que sa serait possible d'avoir de tutoriels ou de explications ?
Minilogus
Messages postés21Date d'inscriptiondimanche 31 janvier 2010StatutMembreDernière intervention10 juin 20113 11 mars 2010 à 18:55
Bonjour,
L'idée de ton code est bien, toutefois il y a certains problèmes.
Ton programme n'est pas portable (présence de #include<windows.h> ===> on ne peut pas le compiler en l'état sous linux). Je n'ai rien contre ça, mais pour un programme qui ne fait que convertir un chiffre en un autre... Tu admettras que c'est un peu dommage.
Ensuite tu as tendance à mixer le C et le C++, c'est pas super super pour la lecture de ton code. Par exemple, au lieu des -> \n <- met plutôt des -> <<endl <- (si tu veux le faire en C++), autrement utilise -> printf <- à la place de -> cout <- si tu privilégie le C.
Il me semble que les valeurs de conversion varie avec le temps, à moins que je ne me trompe je n'ai pas vu ton programme gérer les cours fluctuants des monnaies, puisque tu as mis un -> double r = 1.36544; Tu as donc fixé la valeur, alors qu'il serait bon de la saisir afin "d'étalonner" le programme.
Pour finir ton programme ne gère pas vraiment les erreur de saisie (ex: si je tape * au lieu de 9 (les touches sont très proches))...
je te propose donc ces 2 fonctions que j'ai réalisé (elle sont en c++)
#include <sstream>
int entier()
{
std::string saisie;
std::string verif;
bool good=1;
bool trouble=0;
int num;
do
{
if(good==0)
{
std::cout<<std::endl<<"-> Saisie incorrecte, ressaisissez: ";
}
std::cin>>saisie;
std::istringstream iss(saisie);// conversion du type string en type double.
iss>>num;
if(iss.fail())
{
good=0;
trouble=1;
}
else
{
std::ostringstream oss;
oss<<num;
verif=oss.str();
do
{
if(good==0)
{
std::cout<<std::endl<<"-> Saisie incorrecte, ressaisissez: ";
}
std::cin>>saisie;
found=saisie.find_first_of(",");
while (found!=std::string::npos)
{
saisie[found]='.';// les virgules françaises seront automatiquement transformées en point.
found=saisie.find_first_of(",",found+1);
}
std::istringstream iss(saisie);// conversion du type string en type double.
iss>>num;
if(iss.fail())
{
good=0;
trouble=1;
}
else
{
std::ostringstream oss;
oss<<num;
verif=oss.str();
16 mars 2010 à 19:39
11 mars 2010 à 22:37
//-------------------------------------------------------------------------------------
#include
#include <sstream>
int entier()
{
std::string saisie;
std::string verif;
bool good=1;
bool trouble=0;
int num;
do
{
if(good==0)
{
std::cout<<std::endl<<"-> Saisie incorrecte, ressaisissez: ";
}
std::cin>>saisie;
std::istringstream iss(saisie);// conversion du type string en type double.
iss>>num;
if(iss.fail())
{
good=0;
trouble=1;
}
else
{
std::ostringstream oss;
oss<<num;
verif=oss.str();
if(verif.size() < saisie.size())
{
good=0;
trouble=1;
}
else{good=1;}
}
if(good==1 && trouble==1)
{
std::cout<<"-> OK!"<<std::endl;
}
}while(good==0);
return num;
}
double reel()
{
std::string saisie;
std::string verif;
size_t found;
bool good=1;
bool trouble=0;
double num;
do
{
if(good==0)
{
std::cout<<std::endl<<"-> Saisie incorrecte, ressaisissez: ";
}
std::cin>>saisie;
found=saisie.find_first_of(",");
while (found!=std::string::npos)
{
saisie[found]='.';// les virgules françaises seront automatiquement transformées en point.
found=saisie.find_first_of(",",found+1);
}
std::istringstream iss(saisie);// conversion du type string en type double.
iss>>num;
if(iss.fail())
{
good=0;
trouble=1;
}
else
{
std::ostringstream oss;
oss<<num;
verif=oss.str();
if(verif.size() < saisie.size())
{
good=0;
trouble=1;
}
else{good=1;}
}
if(good==1 && trouble==1)
{
std::cout<<"-> OK!"<<std::endl;
}
}while(good==0);
return num;
}
int main()
{
std::cout<<">-------------------- CONVERTISSEUR D'ARGENT --------------------<"<<std::endl<<std::endl;
int quitter=0;
int choix;
double money;
double val;
std::cout<<"-> Etalonnage du programme <-"<<std::endl;
std::cout<<"-> Donner la correspondance d'un euro en dollar: ";
money=reel();
std::cout<<std::endl<<"<--------------------------->"<<std::endl<<std::endl;
do//pour le "quitter" de fin
{
std::cout<<"-------------------- MENU --------------------"<<std::endl<<std::endl;
std::cout<<" 1. Conversion euros -> dollars"<<std::endl;
std::cout<<" 2. Conversion dollars -> euros"<<std::endl<<std::endl;
std::cout<<" 0. ) Quitter ("<<std::endl;
std::cout<<std::endl<<"--> Choix: ";
do
{
choix=entier();
if(choix<0 || choix>2){std::cout<<std::endl<<"-> Le choix "<<choix<<" n'existe pas, ressaisissez: ";}
}while(choix<0 || choix>2);
if(choix==0)
{
std::cout<<std::endl<<">----------------------------------------------------------------<"<<std::endl<<std::endl;
return 0;
}
std::cout<<std::endl<<"Entrez la valeur que vous voulez convertir: ";
val=reel();
if(choix==1)
{
std::cout<<std::endl<<val<<" euros = "<<val*money<<" dollars";
}
else
{
std::cout<<std::endl<<val<<" dollars = "<<val/money<<" euros";
}
std::cout<<std::endl<<std::endl<<">----------------------------------------------------------------<"<<std::endl;
std::cout<<std::endl<<"--> Faire une autre conversion? (1=oui/0=non): ";
quitter=entier();
std::cout<<std::endl<<">----------------------------------------------------------------<"<<std::endl<<std::endl;
}while(quitter>0);
return 0;
}
11 mars 2010 à 20:36
//j'ai mis:
std::cout<<std::endl<<"--> Faire un autre calcul d'incertitude? (1=oui/0=non): ";
//il faut remplacer par:
std::cout<<std::endl<<"--> Faire une autre conversion? (1=oui/0=non): ";
//^^.
11 mars 2010 à 20:28
Les strings sont des chaînes permettant de stocker des caractères.
par ex:
std::string a;
a="Bonjour";// ne pas oublier les "".
std::cout<
#include <sstream>
int entier()
{
std::string saisie;
std::string verif;
bool good=1;
bool trouble=0;
int num;
do
{
if(good==0)
{
std::cout<<std::endl<<"-> Saisie incorrecte, ressaisissez: ";
}
std::cin>>saisie;
std::istringstream iss(saisie);// conversion du type string en type double.
iss>>num;
if(iss.fail())
{
good=0;
trouble=1;
}
else
{
std::ostringstream oss;
oss<<num;
verif=oss.str();
if(verif.size() < saisie.size())
{
good=0;
trouble=1;
}
else{good=1;}
}
if(good==1 && trouble==1)
{
std::cout<<"-> OK!"<<std::endl;
}
}while(good==0);
return num;
}
double reel()
{
std::string saisie;
std::string verif;
size_t found;
bool good=1;
bool trouble=0;
double num;
do
{
if(good==0)
{
std::cout<<std::endl<<"-> Saisie incorrecte, ressaisissez: ";
}
std::cin>>saisie;
found=saisie.find_first_of(",");
while (found!=std::string::npos)
{
saisie[found]='.';// les virgules françaises seront automatiquement transformées en point.
found=saisie.find_first_of(",",found+1);
}
std::istringstream iss(saisie);// conversion du type string en type double.
iss>>num;
if(iss.fail())
{
good=0;
trouble=1;
}
else
{
std::ostringstream oss;
oss<<num;
verif=oss.str();
if(verif.size() < saisie.size())
{
good=0;
trouble=1;
}
else{good=1;}
}
if(good==1 && trouble==1)
{
std::cout<<"-> OK!"<<std::endl;
}
}while(good==0);
return num;
}
int main()
{
std::cout<<">-------------------- CONVERTISSEUR D'ARGENT --------------------<"<<std::endl<<std::endl;
int quitter=0;
int choix;
double money;
double val;
std::cout<<"-> Etalonnage du programme <-"<<std::endl;
std::cout<<"-> 1 euro = ";
money=reel();
std::cout<<std::endl<<"<--------------------------->"<<std::endl<<std::endl;
do//pour le "quitter" de fin
{
std::cout<<"-------------------- MENU --------------------"<<std::endl<<std::endl;
std::cout<<" 1. Conversion euros -> dollards"<<std::endl;
std::cout<<" 2. Conversion dollards -> euros"<<std::endl<<std::endl;
std::cout<<" 0. ) Quitter ("<<std::endl;
std::cout<<std::endl<<"--> Choix: ";
do
{
choix=entier();
if(choix<0 || choix>2){std::cout<<std::endl<<"-> Le choix "<<choix<<" n'existe pas, ressaisissez: ";}
}while(choix<0 || choix>2);
if(choix==0)
{
std::cout<<std::endl<<">----------------------------------------------------------------<"<<std::endl<<std::endl;
return 0;
}
std::cout<<std::endl<<"Entrez la valeur que vous voulez convertir: ";
val=reel();
if(choix==1)
{
std::cout<<std::endl<<val<<" euros = "<<val*money<<" dollards";
}
else
{
std::cout<<std::endl<<val<<" dollards = "<<val/money<<" euros";
}
std::cout<<std::endl<<std::endl<<">----------------------------------------------------------------<"<<std::endl;
std::cout<<std::endl<<"--> Faire un autre calcul d'incertitude? (1=oui/0=non): ";
quitter=entier();
std::cout<<std::endl<<">----------------------------------------------------------------<"<<std::endl<<std::endl;
}while(quitter>0);
return 0;
}
// voilà, si tu as des questions n'hésite pas à m'en faire part...
11 mars 2010 à 20:09
"std::istringstream iss(saisie);// conversion du type string en type double."
"std::ostringstream oss;"
est ce que sa serait possible d'avoir de tutoriels ou de explications ?
11 mars 2010 à 18:55
L'idée de ton code est bien, toutefois il y a certains problèmes.
Ton programme n'est pas portable (présence de #include<windows.h> ===> on ne peut pas le compiler en l'état sous linux). Je n'ai rien contre ça, mais pour un programme qui ne fait que convertir un chiffre en un autre... Tu admettras que c'est un peu dommage.
Ensuite tu as tendance à mixer le C et le C++, c'est pas super super pour la lecture de ton code. Par exemple, au lieu des -> \n <- met plutôt des -> <<endl <- (si tu veux le faire en C++), autrement utilise -> printf <- à la place de -> cout <- si tu privilégie le C.
Il me semble que les valeurs de conversion varie avec le temps, à moins que je ne me trompe je n'ai pas vu ton programme gérer les cours fluctuants des monnaies, puisque tu as mis un -> double r = 1.36544; Tu as donc fixé la valeur, alors qu'il serait bon de la saisir afin "d'étalonner" le programme.
Pour finir ton programme ne gère pas vraiment les erreur de saisie (ex: si je tape * au lieu de 9 (les touches sont très proches))...
je te propose donc ces 2 fonctions que j'ai réalisé (elle sont en c++)
#include <sstream>
int entier()
{
std::string saisie;
std::string verif;
bool good=1;
bool trouble=0;
int num;
do
{
if(good==0)
{
std::cout<<std::endl<<"-> Saisie incorrecte, ressaisissez: ";
}
std::cin>>saisie;
std::istringstream iss(saisie);// conversion du type string en type double.
iss>>num;
if(iss.fail())
{
good=0;
trouble=1;
}
else
{
std::ostringstream oss;
oss<<num;
verif=oss.str();
if(verif.size() < saisie.size())
{
good=0;
trouble=1;
}
else{good=1;}
}
if(good==1 && trouble==1)
{
std::cout<<"-> OK!"<<std::endl;
}
}while(good==0);
return num;
}
double reel()
{
std::string saisie;
std::string verif;
size_t found;
bool good=1;
bool trouble=0;
double num;
do
{
if(good==0)
{
std::cout<<std::endl<<"-> Saisie incorrecte, ressaisissez: ";
}
std::cin>>saisie;
found=saisie.find_first_of(",");
while (found!=std::string::npos)
{
saisie[found]='.';// les virgules françaises seront automatiquement transformées en point.
found=saisie.find_first_of(",",found+1);
}
std::istringstream iss(saisie);// conversion du type string en type double.
iss>>num;
if(iss.fail())
{
good=0;
trouble=1;
}
else
{
std::ostringstream oss;
oss<<num;
verif=oss.str();
if(verif.size() < saisie.size())
{
good=0;
trouble=1;
}
else{good=1;}
}
if(good==1 && trouble==1)
{
std::cout<<"-> OK!"<<std::endl<<std::endl;
}
}while(good==0);
return num;
}
// voilà
Au lieu de taper cin>>un_nombre;
tu tape un_nombre=entier();
Courage!... ^^