détection d'un char

détection d'un char - C++ - Programmation

Marsh Posté le 20-06-2004 à 22:59:00    

Voilà j'aimerais connaître l'instruction qui reconnait des char.
 
Pour simple exemple, je fais des programmes de calculs mathématiques et l'entrée d'un caractère non décimal le fait tourner en boucle.
 
Je remercie celui qui a la connaissance nécessaire pour pouvoir remedier à mon problème.

Reply

Marsh Posté le 20-06-2004 à 22:59:00   

Reply

Marsh Posté le 20-06-2004 à 23:00:37    

c un char :
 
if (c < '0' || c > '9')
{
c'est pas un chiffre
}
else
{
c'est un chiffre
}


Message édité par blackgoddess le 20-06-2004 à 23:01:02

---------------
-( BlackGoddess )-
Reply

Marsh Posté le 20-06-2004 à 23:27:11    

Je ne sais pas tellement  :heink:  

Code :
  1. #include <iostream.h>
  2. #include <math.h>
  3. #include <conio.h>
  4. double Testchar (char y)
  5. {
  6.     if (y<'0' || y>'9')
  7.     {
  8.     return (0);
  9.     }
  10.     else
  11.     {
  12.     return (y);
  13.     }
  14. }
  15. double Trigo (double y) /* conversion de radians en degrés */
  16. {
  17.     const double pi=3.1415592654;
  18.     return ((360*y)/(2*pi));
  19. }
  20. double Fonction (double y)
  21. {
  22.     const double pi=3.1415592654;
  23. return (Trigo(atan(y))+Trigo(atan(y+1))+Trigo(atan(y-1))-(pi/2));
  24. }
  25. void main ()
  26. {
  27. double a=-1,b=-1,m,f,prec=2,y,qi=103,confirm=0;
  28.     int pause=-1;
  29.     cout<<"ce programme calcule le 0 d'une fonction par dichotomie"<<endl<<
  30.     "y=atan(y)+atan(y+1)+atan(y-1)-(3.14/2)"<<endl<<endl
  31.     <<"ne rentrez pas de caracteres cela pourrait avoir des effets byzares"<<endl
  32.     <<endl<<"veuillez rentrer les bornes de la fonction :"<<endl;
  33.     for (a;a<0;qi--)
  34.     {
  35.     cout<<"intervalle de depart ( >0 ):"<<endl<<"'convertie automatiquement en negatif'"<<endl;
  36. cin>>y;
  37.     a=Testchar(-y);
  38.     }
  39.     for (b;b<0;qi--)
  40.     {
  41. cout<<"intervalle de fin ( >0 ):"<<endl;
  42. cin>>y;
  43.     b=Testchar(y);
  44.     }
  45.     for (prec;prec>1 && prec!=0;qi--)
  46. {
  47.     cout<<"precision : veuillez taper 0.xxxxx"<<endl;
  48.     cin>>y;
  49.     prec=Testchar(y);
  50.     }
  51. do
  52. {
  53.  m=(b+a)/2.0;
  54.  f=(Fonction(m))*(Fonction(a));
  55.  if (f<0)
  56.  {
  57.   b=m;
  58.  }
  59.  else if (f==0)
  60.  {
  61.   a=b=m;
  62.   break;
  63.  }
  64.  else
  65.  {
  66.   a=m;
  67.  }
  68. }
  69. while ((sqrt((b-a)*(b-a)))>prec);
  70. cout<<endl<<"l'intervalle ou est compris l'ordonee de 0 est de :"<<endl<<
  71.     "a:"<<a<<endl<<"b:"<<b<<endl;
  72.     do
  73.     {
  74.         cout<<"ton QI est de :"<<qi<<endl;
  75.         cout<<"pressez une touche puis entree pour sortir du programme"<<endl;
  76.         cin>>y;
  77.         pause=Testchar(y);
  78.         qi--;
  79.     }
  80.     while (pause!=-1);
  81. }

Reply

Marsh Posté le 20-06-2004 à 23:29:53    

c'est n'importe quoi  
 
<cctype>
 
isidigit( c )

Reply

Marsh Posté le 20-06-2004 à 23:31:13    

Peux tu développer s'il te plait pour un pauvre étudiant qui a un partiel de prog demain ?
 
J'ai refait les tests logiques...


Message édité par grosbin le 20-06-2004 à 23:33:09
Reply

Marsh Posté le 20-06-2004 à 23:46:12    

isdigit est une fonction standard qui te dis si oui ou nom c est un chiffre
 
http://www.cs.bsu.edu/homepages/pe [...] cctype.htm

Reply

Marsh Posté le 20-06-2004 à 23:47:31    

et ta constante pi tu ferais bien de la définir une fois pour tout je pense
 
et si tu veux un peu optimisé, soupoudre d'inline

Reply

Marsh Posté le 20-06-2004 à 23:49:56    

Excuses-moi mais je ne connais pas tout cela...
 
Aurais-tu de bons tutos ?

Reply

Marsh Posté le 20-06-2004 à 23:56:52    

les tutos ne servent à rien. la documentation si.
 
Tu t'es jamais dit que si cout et cin était partout, c'est qu'ils devaient bien faire partie d'une bibliothèque standard ? documente toi, fouille la bibliothèque standard / STL

Reply

Marsh Posté le 21-06-2004 à 00:08:23    

D'accord c'est un boléen,
ensuite il me met un "parse error après ')'"

Code :
  1. double Testchar (double y)
  2. {
  3.     int is=0;
  4.     is=isdigit(int y);
  5.     if (is==1)
  6.     {
  7.     return (y);
  8.     }
  9.     else
  10.     {
  11.     return (0);
  12.     }
  13. }


je vois pas tellement, je suis novice.

Reply

Marsh Posté le 21-06-2004 à 00:08:23   

Reply

Marsh Posté le 21-06-2004 à 00:09:50    

"je suis novice" .................. effectivement.
 
Que vient faire le "int" dans les parentheses?


Message édité par Ace17 le 21-06-2004 à 00:10:14
Reply

Marsh Posté le 21-06-2004 à 00:11:47    

question con : à quoi te sert ta variable is ?

Reply

Marsh Posté le 21-06-2004 à 00:12:26    

j'ai tenté de décomposer pour voir si ça venait de ça

Reply

Marsh Posté le 21-06-2004 à 00:15:03    

"if (is==1)" c'est plutot risqué... Tu sais que si c'est un chiffre, il te renvoie pas 0. Mais de la a dire que c'est 1...
Tu devrais plutot faire "if (is!=0)", voire meme, "if(!isdigit(y))"

Reply

Marsh Posté le 21-06-2004 à 00:17:39    

ou carrément sans négation, juste inversé les tests ...

Reply

Marsh Posté le 21-06-2004 à 00:17:53    

6 dichotomie.cpp
 implicit declaration of function `int isdigit(...)'
 
 :??:  
j'ai importé <string.h>
selon l'adresse de taz http://www.cs.bsu.edu/homepages/pe [...] tm#isdigit

Reply

Marsh Posté le 21-06-2004 à 00:20:47    

pour isdigit, faut inclure <ctype.h> :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 21-06-2004 à 00:21:16    

Harkonnen a écrit :

pour isdigit, faut inclure <ctype.h> :o

ta gueule c'est <cctype>

Reply

Marsh Posté le 21-06-2004 à 00:21:40    

grosbin a écrit :

6 dichotomie.cpp
 implicit declaration of function `int isdigit(...)'
 
 :??:  
j'ai importé <string.h>
selon l'adresse de taz http://www.cs.bsu.edu/homepages/pe [...] tm#isdigit

mais c'est que t'es doué en plus    [:tomtom75]

Reply

Marsh Posté le 21-06-2004 à 00:22:01    

Taz a écrit :

ta gueule c'est <cctype>

ah oui, merde, c'est du C++ [:ddr555]
[:neowen]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 21-06-2004 à 00:22:25    

MOUARF  :pt1cable:

Reply

Marsh Posté le 21-06-2004 à 00:23:07    

Taz a écrit :

mais c'est que t'es doué en plus    [:tomtom75]


putain, j'avais même pas regardé le lien en plus, c'est marqué dessus, doué le gars  [:xp1700]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 21-06-2004 à 00:26:24    

3 dichotomie.cpp
 cctype.h: No such file or directory
--> ctype ça marche
 
enfin j'ai pas encore compris pour le booléen

Reply

Marsh Posté le 21-06-2004 à 00:27:39    

grosbin a écrit :

3 dichotomie.cpp
 cctype.h: No such file or directory
--> ctype ça marche
 
enfin j'ai pas encore compris pour le booléen


ou t'as vu <cctype.h> :o
y'a marqué <cctype>


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 21-06-2004 à 00:29:01    

n'empêche qu'au premier char il se barre en boucle  :pfff:

Reply

Marsh Posté le 21-06-2004 à 00:48:51    

Ton programme est imbitable :
 - definit pi une fois pour toutes en debut de programme,
 
 - les nombres decimaux doivent etre ecrits avec des .,  et meme avec une partie decimale, c'est plus propre
 
 - une fonction Testchar qui prend un char en entier et qui le ressort en double, tu trouves pas ca bizarre ? Moi si.
 
 - remplece tes boucles for par des while ou des do ... while, ta solution est moche et on n'y comprend rien.
 
 - sqrt((b-a)*(b-a)) peut etre avantageusement remplace par abs(b-a)
 
 - simplifie ton programme en virant le superflu, i. e. les conneries sur le QI et le test des caracteres.


Message édité par el muchacho le 21-06-2004 à 00:58:24
Reply

Marsh Posté le 21-06-2004 à 01:07:09    

remplacé les for par do...while
const double PI ...
je rentre un char lors du premier cin,
et mis a,b,c et la fonction Testchar en int
j'arrive à un affichage en boucle du cout "precision"
-> d'ailleurs il aime pas bien les char.
 
c'est relativement nouveau pour moi tout cela, alors je vous en prie continuez à m'aider  :jap:


Message édité par grosbin le 21-06-2004 à 01:10:12
Reply

Marsh Posté le 21-06-2004 à 01:16:41    

Balance le code. Et indente-le avec des espaces de sorte que ce soit lisible, STP.

Reply

Marsh Posté le 21-06-2004 à 02:52:04    

grosbin a écrit :

remplacé les for par  
const double PI ...


 
en fait le mieux c que tu fasse un #define
 
dans ton prog par exemple tu fait  
#define PI 3.141559
 
et apres tu peut utiliser PI librement  
- je l'ai mit en majuscule car c une convention pour tout les define :o
- pas de ; apres le define car lors de la compilation les PI seront remplace par leur valeur correspondante :o
puis c pas une instruction aussi :o


Message édité par red faction le 21-06-2004 à 02:52:39
Reply

Marsh Posté le 21-06-2004 à 07:47:02    

Non mais son probleme c'est pas qu'il a un code pourri, c'est que si au moment ou il fait cin >> un_nombre l'utilisateur rentre une chaine de caracteres, ca court-circuite tous les cin suivants...

Reply

Marsh Posté le 21-06-2004 à 08:16:19    

merci Ace, tu as saisi le problème  :jap:

Reply

Marsh Posté le 21-06-2004 à 08:16:57    

bah tu te penche sur la fonction recherche, j'ai donné 100x un programme d'exemple sur comment bien lire un entier

Reply

Marsh Posté le 21-06-2004 à 12:34:50    

je te supplie de me mettre sur la bonne piste taz, après je me tais

Reply

Marsh Posté le 21-06-2004 à 12:48:55    

red faction a écrit :

en fait le mieux c que tu fasse un #define
 
dans ton prog par exemple tu fait  
#define PI 3.141559
 
et apres tu peut utiliser PI librement  
- je l'ai mit en majuscule car c une convention pour tout les define :o
- pas de ; apres le define car lors de la compilation les PI seront remplace par leur valeur correspondante :o
puis c pas une instruction aussi :o


 
En C++, le const est plus jolie. Le define ca fait plutot 'C'.


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 21-06-2004 à 12:52:15    

[:cupralf]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 21-06-2004 à 12:54:12    

s'il vous plait !!!

Reply

Marsh Posté le 21-06-2004 à 18:51:56    

moi je veux bien t'aider mais soit je te file une solution a moi et Taz va se pointer pour la détruire, sans pour autant donner celle qu'il estime etre la bonne, soit je retrouve le post auquel Taz fait référence ... mais apres recherche je trouve pas.....

Reply

Marsh Posté le 21-06-2004 à 18:58:14    

Apres une recherche plus appronfondie... j'ai trouvé ca :

Code :
  1. #include <sstream>
  2. #include <string>
  3.                                                                                                  
  4. using namespace std;
  5.                                                                                                  
  6. int main()
  7. {
  8.                                                                                                      
  9. int i;  
  10. for( ; ; )
  11. {
  12.   cout << "1) saisissez un entier : " << flush;
  13.   if( cin >> i )
  14.  {
  15.     break;
  16.  }
  17.   else if(cin.bad())
  18.  {
  19.     cerr << "Erreur d\'E/S" << endl;
  20.     return 1;
  21.  }
  22.   else if (cin.eof())
  23.  {
  24.     cout << endl << "EOF, Bye" << endl;
  25.     return 0;
  26.  }
  27.   else
  28.  {
  29.     cin.clear();
  30.     cin.ignore(numeric_limits<int>::max(), '\n');
  31.  }
  32. }
  33. cout << "1) voila l'entier : " << i << endl;


 
Provenance : Topic


Message édité par Ace17 le 22-06-2004 à 09:48:07
Reply

Marsh Posté le 22-06-2004 à 02:17:34    

1 d2.cpp
 sstream: No such file or directory
 :sweat:  
 
( j'utilise dev c++ 4 )

Reply

Marsh Posté le 22-06-2004 à 07:31:29    

c'est que tu compile en C:o

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed