heu pkoa mon char il deconne.. [truc simple pourtant]

heu pkoa mon char il deconne.. [truc simple pourtant] - C++ - Programmation

Marsh Posté le 02-01-2003 à 05:12:29    

je veus qu il check chaque lettre du string, si c est A alors il fiat une operation mais il me metye une erreur lors de la compile, style ' assignement to 'char' from 'const char * lacks a cast'.
 

Code :
  1. #include <iostream>
  2. #include <string>
  3. int main()
  4. {
  5. string t= "n";
  6. char input [52]
  7. ;   // [] = " ";
  8. int total = 52;
  9. int ace, king, queen, jack, ten, nine, eight, seven, six, five, four, three, two = 4;
  10. do {
  11. cout << "with one do u want to remove ? \n";
  12. cin >> input;
  13. for (int i=0; i<=52;i++)
  14. {
  15. if (input [1]= "A" )
  16. {ace==ace-1;}
  17. cout << input [i];
  18. ace;  }
  19. cout << " \n";
  20. cout << "Do you want to quit ??? [y/n]\n";
  21. cin >> t; }
  22. while (t=="n" );
  23. }


---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 02-01-2003 à 05:12:29   

Reply

Marsh Posté le 02-01-2003 à 09:36:32    

dans le if, les tests se font avec un double égal
 
c'est un classique cette erreur

Reply

Marsh Posté le 02-01-2003 à 11:18:25    

deuxieme erreur classeque, on compare avec le caractere 'A' et non la chaine "A"


---------------
Bitcoin, Magical Thinking, and Political Ideology
Reply

Marsh Posté le 02-01-2003 à 22:24:24    

farib a écrit :

deuxieme erreur classeque, on compare avec le caractere 'A' et non la chaine "A"


arf thank u very much
qu est que j aime cette section prog moi  :love:  :jap:  


---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 02-01-2003 à 22:40:22    

petites remarques en passant:
 
- rajoute un joli "using namespace std;" apres tes #include
 
- pourquoi utiliser un char[] pour lire cin? tu connais les string, alors utilises les. dans ton programme, l'emploi sera le meme et le rendra plus robuste
 
- personnellement je préféres l'appel explicite au constructeur (string t("n" )) à la synthaxe = (string t="n" )
 
- plus généralement, voici le constructeur d'initialisation des string string(char caractere, unsigned N) qui construit une chaine de N caractere. peut etre préférable dans la remarque précédente
 
- attention aux opérateurs = et ==. tu peux aussi utiliser les opérateurs -- (pre et post) de la meme maniere que ++ (--ace au lieu de ace=ace-1)
 
- attention: en C++, on indexe les éléments de 0 à N-1, donc ta boucle doit etre for(unsigned i=0; i<52; ++i), c'est à dire avec une infériorité stricte
 


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 03-01-2003 à 12:12:39    

Taz@PPC a écrit :

petites remarques en passant:
 
- rajoute un joli "using namespace std;" apres tes #include
 
- pourquoi utiliser un char[] pour lire cin? tu connais les string, alors utilises les. dans ton programme, l'emploi sera le meme et le rendra plus robuste
 
- personnellement je préféres l'appel explicite au constructeur (string t("n" )) à la synthaxe = (string t="n" )
 
- plus généralement, voici le constructeur d'initialisation des string string(char caractere, unsigned N) qui construit une chaine de N caractere. peut etre préférable dans la remarque précédente
 
- attention aux opérateurs = et ==. tu peux aussi utiliser les opérateurs -- (pre et post) de la meme maniere que ++ (--ace au lieu de ace=ace-1)
 
- attention: en C++, on indexe les éléments de 0 à N-1, donc ta boucle doit etre for(unsigned i=0; i<52; ++i), c'est à dire avec une infériorité stricte
 
 


j utilise char par ce que sa me permet d utiliser strlen (input)
et sa marche pas si input est string.
 
>> c bon j ai trouver input.c_str()  :D  
 
mon programme marche presque c pas bien nickel encore mais bon.
 

Code :
  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. int gcd(int a, int b){     //function who send back the commun diviser of two numbers
  5.     int y,z;               //to test if (card % total) can be simplified.
  6.     while(a!=b){           // if nbr of card=0 to avoid division by zero
  7.     if (a==0){
  8.     a=1; return a;}
  9.         if(a>b){
  10.             z=a;
  11.             y=b;}
  12.         else if(a<b){
  13.             z=b;
  14.             y=a;}
  15.         else{
  16.             z=a;
  17.             y=a;}
  18.         b=y;
  19.         a=z-y;}
  20.     return a; }
  21. float percentage (float a, float b) {  //function who calcute the probability percentage
  22.    float u;
  23.    if (a==0)
  24.     {
  25.    u = 0;
  26.    return u;  }
  27.    else
  28.    u = ((a / b)*100);
  29.    return u; }
  30. void intro ()
  31. {
  32. cout <<"                                    \n";
  33. cout << "               ///\\               \n";
  34. cout << "             (@ @)                 \n";
  35. cout << "   +---oOO----(_)---Ooo-----+      \n";
  36. cout << "   |        TAGMC21 ©       I      \n";
  37. cout << "   I     Sibt jan 2003      |      \n";
  38. cout << "   I         V 0.1          |      \n";
  39. cout << "   +------------------------+      \n";
  40. cout << "            |__|__|                \n";
  41. cout << "              || ||                \n";
  42. cout << "             ooO Ooo               \n";
  43. cout <<"                                    \n";
  44. cout <<"ASSIGNEMENT 3 : § Card counting § \n";
  45. cout <<" \n"<<endl;;
  46. cout << "This program displays the probability of the remaining card in the deck \n";
  47. cout << "being the next card.\n";
  48. cout << "ENTER [0] to quit\n";
  49. cout << "\n"; }
  50. bool test (char a[], int b)
  51. {
  52. int j = 0;
  53. do {
  54. //for (int j=0; (j <= b) ;j++ )
  55. //{
  56. if (a [j] == 'A' )
  57. { return true;  }
  58.   else return false;
  59. }
  60. while (j<= 5);
  61. return false;
  62. }
  63. int main()
  64. {
  65. string t = "n";
  66. int total = 52;
  67. char input [total];
  68. int ace   = 4;
  69. int king  = 4;
  70. int queen = 4;
  71. int jack  = 4;
  72. int ten   = 4;
  73. int nine  = 4;
  74. int eight = 4;
  75. int seven = 4;
  76. int six   = 4;
  77. int five  = 4;
  78. int four  = 4;
  79. int three = 4;
  80. int two   = 4;
  81. intro ();
  82. do {
  83.      do {
  84.                          // check if the input enterered are not greater than the deck
  85.         cout << "\n";
  86.         cout << "Enter the cards you want to remove from the deck ( " << total << " cards) [AKQJT98765432] \n";
  87.         cout << "\n";
  88.         cin >> input;
  89.        // if (test (input,total) == true)
  90.        // { cout << "okkkkk\n";}
  91.        // else { cout << " nooooo \n";}
  92.         if (strlen (input)> total) {  // strlen return the number of caracteres in input before \0
  93.         cout << "error, you can not take more cards than there is left in the deck";
  94.         cout << "\n"; }
  95.   }
  96.    while  (strlen (input)> total);
  97.     //  if  ((total <= (strlen (input))) && ((test(input) == true)) )
  98. //{    cout << "Finish, only one more card possible \n";
  99. //    cout << "Do you want to quit ? \n";
  100. //    cin >> t;
  101.   //   if (t!= "n" ) break;
  102. //   else main ();
  103. //}
  104.    for (int i=0; i<=total;i++) {
  105.        if (input [i]=='A') {if (ace < 1) {cout << "Error you already took the 4 Aces\n"; break; } else (ace = ace--); }
  106.        else if (input [i]=='K' ) {if (king==0) {cout << "Error you already took the 4 kings\n"; break; } else king = king-1; }
  107.        else if (input [i]=='Q' ) {if (queen==0) {cout << "Error you already took the 4 Queens\n"; break; } else queen = queen-1; }
  108.        else if (input [i]=='J' ) {if (jack==0) {cout << "Error you already took the 4  Jacks\n"; break; } else jack =jack-1; }
  109.        else if (input [i]=='T' ) {if (ten==0) {cout << "Error you already took the 4 tens\n"; break; } else ten = ten-1; }
  110.        else if (input [i]=='9' ) {if (nine==0) {cout << "Error you already took the 4 nines\n"; break; } else nine = nine-1; }
  111.        else if (input [i]=='8' ) {if (eight==0) {cout << "Error you already took the 4 eights\n"; break; } else eight = eight-1; }
  112.        else if (input [i]=='7' ) {if (seven==0) {cout << "Error you already took the 4 sevens\n"; break; } else seven =seven-1; }
  113.        else if (input [i]=='6' ) {if (six==0) {cout << "Error you already took the 4 sixs\n"; break; } else six = six-1; }
  114.        else if (input [i]=='5' ) {if (five==0) {cout << "Error you already took the 4 fives\n"; break; } else five = five-1; }
  115.        else if (input [i]=='4' ) {if (four==0) {cout << "Error you already took the 4 fours\n"; break; } else four = four-1; }
  116.        else if (input [i]=='3' ) {if (three==0) {cout << "Error you already took the 4 threes\n"; break; } else three = three-1; }
  117.        else if (input [i]=='2' ) {if (two==0) {cout << "Error you already took the 4 twos\n"; break; } else two = two-1; }
  118.        else break; }
  119.        total = (ace + king + queen + jack + ten + nine + eight + seven + six + five + four + three + two);
  120.        cout << " Ace : " << (ace/(gcd(ace,total))) << " in  "  << (total/(gcd(ace,total))) << "(" << (percentage (ace,total)) << "%)" << "\n";
  121.        cout << " king : " << (king/(gcd(king,total))) << " in  "  << (total/(gcd(king,total))) << "(" << (percentage (king,total)) << "%)" << "\n";
  122.        cout << " queen : " << (queen/(gcd(queen,total))) << " in  "  << (total/(gcd(queen,total))) << "(" << (percentage (queen,total)) << "%)" <<"\n";
  123.        cout << " jack : " << (jack/(gcd(jack,total))) << " in  "  << (total/(gcd(jack,total))) << "(" << (percentage (jack,total)) << "%)" <<"\n";
  124.        cout << " ten : " << (ten/(gcd(ten,total))) << " in  "  << (total/(gcd(ten,total))) << "(" << (percentage (ten,total)) << "%)" <<"\n";
  125.        cout << " nine : " << (nine/(gcd(nine,total))) << " in  "  << (total/(gcd(nine,total))) << "(" << (percentage (nine,total)) << "%)" <<"\n";
  126.        cout << " eight : " << (eight/(gcd(eight,total))) << " in  "  << (total/(gcd(eight,total))) << "(" << (percentage (eight,total)) << "%)" <<"\n";
  127.        cout << " seven : " << (seven/(gcd(seven,total))) << " in  "  << (total/(gcd(seven,total))) << "(" << (percentage (seven,total)) << "%)" << "\n";
  128.        cout << " six : " << (six/(gcd(six,total))) << " in  "  << (total/(gcd(six,total))) << "(" << (percentage (six,total)) << "%)" <<"\n";
  129.        cout << " five : " << (five/(gcd(five,total))) << " in  "  << (total/(gcd(five,total))) << "(" << (percentage (five,total)) << "%)" << "\n";
  130.        cout << " four : " << (four/(gcd(four,total))) << " in  "  << (total/(gcd(four,total))) << "(" << (percentage (four,total)) << "%)" <<"\n";
  131.        cout << " three : " << (three/(gcd(three,total))) << " in  "  << (total/(gcd(three,total))) << "(" << (percentage (three,total)) << "%)" <<"\n";
  132.        cout << " two : " << (two/(gcd(two,total))) << " in  "  << (total/(gcd(two,total))) << "(" << (percentage (two,total)) << "%)" <<"\n";
  133.     }
  134. while (input[0]!= '0');
  135. }


 
sinon j essaye de fair eune fonction booleen quei renvoie true quand elle test si le input entrer ne contient que les caracteres voulut ('A','Q','K' ect..) j aimerai bien un peu d aide la dessus  :whistle:  :D


Message édité par COULIX le 03-01-2003 à 12:37:49

---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 03-01-2003 à 12:29:49    

Citation :


j utilise char par ce que sa me permet d utiliser strlen (input)
et sa marche pas si inpur est string.

:heink: st1 balgue
 
string::length() ca te dit rien?
 
sinon:
- les switchs tu connais?
- les fonctions tu connais?


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 03-01-2003 à 12:43:04    

Taz@PPC a écrit :

Citation :


j utilise char par ce que sa me permet d utiliser strlen (input)
et sa marche pas si inpur est string.

:heink: st1 balgue
 
string::length() ca te dit rien?
 
sinon:
- les switchs tu connais?
- les fonctions tu connais?


 
c bon je me casse le cul a essayer d introduire des fonctions, et le swich un peu mais un exemple serai le bien venu  :ange:
sinon strlen (input.c_str()) sa marche mais input::lebght() non ...  :??:  
 


Message édité par COULIX le 03-01-2003 à 12:48:21

---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 03-01-2003 à 13:29:30    

COULIX a écrit :


 
 
sinon strlen (input.c_str()) sa marche mais input::lebght() non ...  :??:  
 

:pfff:  :pfff:  :pfff:  :pfff:  :pfff:


---------------
Bitcoin, Magical Thinking, and Political Ideology
Reply

Marsh Posté le 03-01-2003 à 13:34:20    

input.length()  :pfff:


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 03-01-2003 à 13:34:20   

Reply

Marsh Posté le 04-01-2003 à 00:00:17    

Taz@PPC a écrit :

input.length()  :pfff:  


merchi  :jap:  :p


---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 04-01-2003 à 04:30:14    

Citation :

Code :
  1. ace = ace--;


Joli :whistle: .
 
Je propose:

Code :
  1. #include <iostream>
  2. #include <string>
  3. using namespace std; //ajout
  4. //function who send back the commun diviser of two numbers to test if (card % total) can be simplified.
  5. //if nbr of card=0 to avoid division by zero
  6. int gcd(int a, int b) {
  7. int y,z;         
  8. while(a!=b){     
  9.  if (a==0) return 1; //anciennnement a=1; return a;
  10.       if(a>b){ z=a; y=b; }
  11.  else if(a<b){ z=b; y=a; }
  12.  else        { z=a; y=a; }
  13.  b=y;
  14.  a=z-y;
  15. }
  16. return a;
  17. }
  18. //function who calcute the probability percentage
  19. float percentage (float a, float b) {
  20. if (a==0) return 0; //anciennnement u=0; return u;
  21. return (a/b)*100;
  22. }
  23. enum        cards_e       { two , three , four , five , six , seven , eight , nine , ten , jack , queen , king , ace };
  24. const char* cardnames []= {"two","three","four","five","six","seven","eight","nine","ten","jack","queen","king","ace"};
  25. int         cardstock []= {    4,      4,     4,     4,    4,      4,      4,     4,    4,     4,      4,     4,    4};
  26. const int numcards= 52;
  27. cards_e symbol2card(char symbol){
  28. switch(symbol){
  29. case '2': return two  ;
  30. case '3': return three;
  31. case '4': return four ;
  32. case '5': return five ;
  33. case '6': return six  ;
  34. case '7': return seven;
  35. case '8': return eight;
  36. case '9': return nine ;
  37. case 'T': return ten  ;
  38. case 'J': return jack ;
  39. case 'Q': return queen;
  40. case 'K': return king ;
  41. case 'A': return ace  ;
  42. default:
  43.  cerr << "symbole de carte invalide" << endl;
  44.  //throw qqechose
  45. }
  46. }
  47. int main(){
  48. intro ();
  49. for(;;) {
  50.  string input;
  51.  for(;;){
  52.   cout
  53.    << "\n" "Enter the cards you want to remove from the deck ( "
  54.    << numcards
  55.    << " cards) [AKQJT98765432] \n\n"
  56.    << endl;
  57.   cin >> input;
  58.   if (input[0] == '\n') return 0;
  59.   if (input.length()>numcards) {
  60.    cout << "error, you can not take more cards than there is left in the deck" << endl;
  61.    continue; //recommence
  62.   }
  63.  }
  64.  for (int i= input.length() ; i>=0 ; --i) {
  65.   cards_e card= symbol2card(input [i]);
  66.   if(cardstock[card] == 0){
  67.    cerr << "Error you already took the 4 " << cardnames[i] << endl;
  68.    //throw qqechose
  69.   }else
  70.    --cardstock[i];
  71.  }
  72.  int total = 0;
  73.  for (int currcard1= two ; currcard1 <= ace ; ++currcard1)
  74.   total+= cardstock[currcard1];
  75.  for (int currcard2= two ; currcard2 <= ace ; ++currcard2){
  76.   int gcdval= gcd(cardstock[currcard2], total);
  77.   //cout << cardnames[j] << " : " << cardstock[currcard2]/gcdval << " in  " << total/gcdval << "(" << percentage (currcard2, total) << "%)" << endl;
  78.   cout
  79.    << cardnames[currcard2]
  80.    << " : "
  81.    << cardstock[currcard2]/gcdval
  82.    << " in  "
  83.    << total/gcdval
  84.    << "("
  85.    << percentage (currcard2, total)
  86.    << "%)"
  87.    << endl;
  88.  }
  89. }
  90. }


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 04-01-2003 à 08:13:39    

Musaran a écrit :

Citation :

Code :
  1. ace = ace--;


Joli :whistle: .
 
Je propose:

Code :
  1. #include <iostream>
  2. #include <string>
  3. using namespace std; //ajout
  4. //function who send back the commun diviser of two numbers to test if (card % total) can be simplified.
  5. //if nbr of card=0 to avoid division by zero
  6. int gcd(int a, int b) {
  7. int y,z;         
  8. while(a!=b){     
  9.  if (a==0) return 1; //anciennnement a=1; return a;
  10.       if(a>b){ z=a; y=b; }
  11.  else if(a<b){ z=b; y=a; }
  12.  else        { z=a; y=a; }
  13.  b=y;
  14.  a=z-y;
  15. }
  16. return a;
  17. }
  18. //function who calcute the probability percentage
  19. float percentage (float a, float b) {
  20. if (a==0) return 0; //anciennnement u=0; return u;
  21. return (a/b)*100;
  22. }
  23. enum        cards_e       { two , three , four , five , six , seven , eight , nine , ten , jack , queen , king , ace };
  24. const char* cardnames []= {"two","three","four","five","six","seven","eight","nine","ten","jack","queen","king","ace"};
  25. int         cardstock []= {    4,      4,     4,     4,    4,      4,      4,     4,    4,     4,      4,     4,    4};
  26. const int numcards= 52;
  27. cards_e symbol2card(char symbol){
  28. switch(symbol){
  29. case '2': return two  ;
  30. case '3': return three;
  31. case '4': return four ;
  32. case '5': return five ;
  33. case '6': return six  ;
  34. case '7': return seven;
  35. case '8': return eight;
  36. case '9': return nine ;
  37. case 'T': return ten  ;
  38. case 'J': return jack ;
  39. case 'Q': return queen;
  40. case 'K': return king ;
  41. case 'A': return ace  ;
  42. default:
  43.  cerr << "symbole de carte invalide" << endl;
  44.  //throw qqechose
  45. }
  46. }
  47. int main(){
  48. intro ();
  49. for(;;) {
  50.  string input;
  51.  for(;;){
  52.   cout
  53.    << "\n" "Enter the cards you want to remove from the deck ( "
  54.    << numcards
  55.    << " cards) [AKQJT98765432] \n\n"
  56.    << endl;
  57.   cin >> input;
  58.   if (input[0] == '\n') return 0;
  59.   if (input.length()>numcards) {
  60.    cout << "error, you can not take more cards than there is left in the deck" << endl;
  61.    continue; //recommence
  62.   }
  63.  }
  64.  for (int i= input.length() ; i>=0 ; --i) {
  65.   cards_e card= symbol2card(input [i]);
  66.   if(cardstock[card] == 0){
  67.    cerr << "Error you already took the 4 " << cardnames[i] << endl;
  68.    //throw qqechose
  69.   }else
  70.    --cardstock[i];
  71.  }
  72.  int total = 0;
  73.  for (int currcard1= two ; currcard1 <= ace ; ++currcard1)
  74.   total+= cardstock[currcard1];
  75.  for (int currcard2= two ; currcard2 <= ace ; ++currcard2){
  76.   int gcdval= gcd(cardstock[currcard2], total);
  77.   //cout << cardnames[j] << " : " << cardstock[currcard2]/gcdval << " in  " << total/gcdval << "(" << percentage (currcard2, total) << "%)" << endl;
  78.   cout
  79.    << cardnames[currcard2]
  80.    << " : "
  81.    << cardstock[currcard2]/gcdval
  82.    << " in  "
  83.    << total/gcdval
  84.    << "("
  85.    << percentage (currcard2, total)
  86.    << "%)"
  87.    << endl;
  88.  }
  89. }
  90. }




rhooooo je taime  :love:  :love:  :love:  :love:  :love:  
 :jap:  
j ai pas finit de lire mais c tres sympa


---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 04-01-2003 à 08:46:27    

je comprend pas le role de enum.
et char* card []
c quoi ? une suite de char
string [] ca existe pas ? :??:


---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 04-01-2003 à 12:04:37    

un enum, c surtout un aide mémoire.
 
 
enum  
{
truc,
machin,
bidule
}
 
truc aura pour valeur 0, machin 1 et bidule 2. Maitenant dans ton programme, au lieu de faire des :
 
 

Code :
  1. case 'Q': return 8;
  2. case 'K': return 9;
  3. case 'A': return 10


 
tu peux faire :
 

Code :
  1. case 'Q': return queen;
  2. case 'K': return king ;
  3. case 'A': return ace


 
 
ce qui achement + compréhensible
 
char* card [] est un tableau de char *, dont la taille est determiné par le compilo grace a la suite d'initialiseur (le {"two","three","four","five","six","seven","eight","nine","ten","jack","queen","king","ace"};)
 
 
a propos enum, petite anecdote rigolote. On avait a faire un TP sur un jeu de carte (je sais pu quoi). Un pote a moi avais donc fait un enum avec tous les type de carte (valet,roi,.....). Sauf qu'au lieu d'utiliser directement l'enum dans son prog il utilisait les valeurs numériques assigné par le compilo a ceux ci. Pour faire ca bien, il avait une feuille de papier avec ecrit "valet = 10, dame =11.....". D'ou l'interet de l'enum, n'est ce pas ? [:ddr555]
 
 
 
 
 
 


Message édité par chrisbk le 04-01-2003 à 12:06:56
Reply

Marsh Posté le 05-01-2003 à 06:33:05    

Je n'ai mis l'énumération que pour rendre le switch lisible.
Je m'en comme indice dans tableau, en comptant sur le fait que le premier élément vaut 0.
j'aurais dû rendre cela explicite:

Code :
  1. enum cards_e { two=0, three , ...

Les éléments suivants sont numérotés dans l'ordre automatiquement.
 

Citation :

et char* card []
c quoi ? une suite de char

Veuillez noter que c'est un tableau de 'const char*', puisque les littérales sont constantes.
 

Citation :

string [] ca existe pas ?

Si, mais vu que ces noms sont constants je fais l'économie d'une construction et allocation dynamique.
 
C'est pas du vrai C++, mais je ne suis pas intégriste non plus.
 
Le code que je donne pourrait être encore amélioré.
Par exemple:

Code :
  1. struct card{
  2. int stock;
  3. char symbol;
  4. const char* name;
  5. };
  6. card cards[]={
  7. {4, '2', "two"  },
  8. {4, '3', "three"},
  9. {4, '4', "four" },
  10. {4, '5', "five" },
  11. //...
  12. }


Message édité par Musaran le 05-01-2003 à 06:33:46

---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

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