Besoin d'aide pour faire un petit programme

Signaler
Messages postés
88
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
30 août 2012
-
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
-
bonjour,

je voudrais avoir un peu d'aide concernant un petit programme,
je voudrais en faite que mon programme me dise si la lettre est dans le mot (et si elle est bien placé) sinon dire qu'elle est mal placé, et en dernier dire si elle n'est pas dans le mot
par exemple O: bienplacé ; U: malplacé; J:absent....sauf que pour l'instant j'ai juste réussi a faire ça...


for (i=0; i<=3; i++){
extrait= combiJoueur2.substr(i,1);//extrait une lettre de la combinaison du joueur 2
if (extrait==essaisJoueur1.substr(i,1)){//si la lettre est egale on la range dans le tableau bienplace
bienplace[i]= extrait;
} else { malplace[i]= essaisJoueur1.substr(i,1);//si la lettre n'est pas bien placé on la range dans le tableau malplace
}

20 réponses

Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
Si c'est juste un affichage séquentiel, pas besoin de tableaux. Tu affiches juste immédiatement ce que tu trouves.

extrait= combiJoueur2.substr(i,1);//extrait une lettre de la combinaison du joueur 2

Non, surtout pas. Si tu veux une lettre tu fais: combiJoueur2[i], tu ne vas pas chercher une sous chaînes, tu as juste besoin d'un caractère.

if (extrait==essaisJoueur1.substr(i,1)

De même:
char c <qqchose>; if (c essaisJoueur1[i]) ...


De plus, quelle différence y-t-il avec la question:
http://www.cppfrance.com/forum/sujet-TROP-BESOIN-AIDE-JE-NY-ARRIVE-PAS_1380098.aspx

La plupart des pistes qui t'ont été donné n'ont pas été suivi (on voit encore du substr(i, 1) au lieu de [i]...

http://www.cppfrance.com/forum/sujet-FONCTION-AVEC-TEST_1374458.aspx
http://www.cppfrance.com/forum/sujet-BESOIN-AIDE-MON-IF-NE-FONCTIONNE-PAS_1380959.aspx

La méthode t'as été décrite dans les précédents sujets que tu as posté.
Messages postés
88
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
30 août 2012

merci, je vais essayer avec [i] alors....
Messages postés
88
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
30 août 2012

for (i=0; i<=3; i++){

if (combiJoueur2[i]==essaisJoueur1[i]){//si la lettre est egale on la range dans le tableau bienplace
bienplace[i]= essaisJoueur1[i];
}
for (int j=0; j<=3;j++){
if (essaisJoueur1[i] ==combiJoueur2[j] & essaisJoueur1[i] != bienplace[i]){
malplace[i]= essaisJoueur1[i];
}


j'ai essayé avec ça mais lorsque je compile il me dit ça:
no match for 'operator!=' in '(&essaisJoueur1)->std::basic_string<_CharT, _Traits, _Alloc>::operator[] [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>](((unsigned int)i)) != bienplace[i]'
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
Un "et" en C/C++ c'est : && et non pas &.

En revanche, que sont "essaisJoueur1" et "bienplace" ?
Messages postés
88
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
30 août 2012

a ok, parce que mes profs mon dit que 'lon pouvais en metr que &.

essaiJoueur1 est une combinaison que le joueur1 propose pour trouver la combinaison du joueur2
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
Que sont "essaisJoueur1" et "bienplace" ? des std::string ?
a ok, parce que mes profs mon dit que 'lon pouvais en metr que &.

Non, ce n'est pas tout à fait pareil. Le "&" est un masque de bit, et non un "et" logique. Il se peut que ça fonctionne, mais ce n'est pas très rigoureux.
Messages postés
88
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
30 août 2012

je ne savais pas non plus que l'ont pouvait faire directement par exemple essaisJoueur[i] au lieu de essaisJoueur.substr(i,1) sans déclarer essaisJoueur1 comme tableau...

le seul soucis que j'ai c'est de dire comme mal placé ou absent de la combinaison (pour revenir au début de la conversation) est ce que le code suivant est juste ?

for (i=0; i<=3; i++){

if (combiJoueur2[i]==essaisJoueur1[i]){//si la lettre est egale on la range dans le tableau bienplace
bienplace[i]= essaisJoueur1[i];
}
for (int j=0; j<=3;j++){
if (essaisJoueur1[i] ==combiJoueur2[j] && essaisJoueur1[i] != bienplace[i]){
malplace[i]= essaisJoueur1[i];
}
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
Pour la troisième fois: Que sont "essaisJoueur1" et "bienplace" ? des std::string ?
Impossible de t'aider, si je ne sais même pas ce que c'est !
Messages postés
88
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
30 août 2012

j'ai toujours la meme erreur que toutaleur
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
Pour la quatrième fois (on va y arriver): Que sont "essaisJoueur1" et "bienplace" ? des std::string ?
Impossible de t'aider, si je ne sais même pas ce que c'est !
Messages postés
88
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
30 août 2012

oui ce sont des string (merci pour ta patience, ouf ça y est tu l'as )
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
Pourquoi veux-tu les mettre dans tes tableaux temporaires ? Tu peux, mais si ton but est juste de les afficher, ce n'est pas nécessaire. Sinon, si tu cherches à mettre les caractères dans des listes, utilise des listes !

std::list<char> bienplace;
std::list<char> malplace;
const int size1 = combiJoueur1.size();
const int size2 = combiJoueur2.size();

for (int i = 0; i < size1; ++i)
{
  const char current = essaisJoueur1[i];
  if (i < size2 && combiJoueur2[i] == current)
  {
    bienplace.push_back(essaisJoueur1[i]);
  }
  else
  {
    for (int j = 0; j < size2; ++j)
    {
      if (current == combiJoueur2[j] && i != j)
      {
        malplace.push_back(essaisJoueur1[i]);
      }
    }
  }
}


Les deux listes devraient être remplis avec ce qu'il faut (attention, je n'ai pas testé !).
Messages postés
88
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
30 août 2012

oula ! euh j'ai pas encore vu ça en cours, c'est quoi push_back ou encore current ?

désolé mais la c'est au dessu de mes capacité (pour l'instant je l'espère)
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
oula ! euh j'ai pas encore vu ça en cours, c'est quoi push_back

http://www.cppreference.com/wiki/stl/list/start

ou encore current ?

Juste un nom de variable. J'aurais pu l'appeler toto.
Messages postés
88
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
30 août 2012

std::list<char> bienplace;
std::list<char> malplace;

il faut que je copie aussi tel quel dans mon prog ?
il me dit list undeclared
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
#include <list>, lis un peu la doc ! (http://www.cppreference.com/wiki/stl/list/push_back)
Messages postés
88
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
30 août 2012

d'accord, je pensé pouvoir faire toutes les comparaisons(bienplace,malplace, absent) avec des boucles , je pensé pouvoir selectionner une lettre de la combinaison a trouvé et la comparer avec toute les lettres de la combinaison de l'adversaire
Messages postés
88
Date d'inscription
lundi 31 mars 2008
Statut
Membre
Dernière intervention
30 août 2012

peut tu me dires si le code suivant est juste:

en faite ce code doit me permettre de générer un nombre entre 97 et 122 (ce qui correspond a l'alphabet de a à z)
Mais il me génére des caractére autres que ceux de l'alphabet...

srand(time(NULL));
for( i=0;i<=3;i++){
genere=rand()%97+122;
for (e=0;e<=3;e++){
if (genere == resultat[e]){
genere=rand()%97+122;
resultat[i]=genere;
}
}cout<<genere;
}


j'ai suivis cet exemple
( value % 100 ) is in the range 0 to 99
( value % 100 + 1 ) is in the range 1 to 100
( value % 30 + 1985 ) is in the range 1985 to 2014
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
peut tu me dires si le code suivant est juste:

Heu... tu le testes. Si ça ne fait pas ce que tu veux, ça ne fonctionne pas, sinon ça fonctionne.

Récupérer un caractère entre a et z, au hasard:
- Tu vas chercher un nombre entre deux plages via rangeRand
- Un caractère, est un chiffre, donc au lieu de dire 97 à 122, tu dis 'a' à 'z'.

#include <stdio.h>
#include <stdlib.h>

/*!
** Get a random number between from and to
**
** @param from Range begin
** @param to Range end
**
** @return A random number
*/
int rangeRand(int from, int to)
{
  return rand () % (to - from + 1) + from;
}

int main(void)
{
  char c;
  srand(time(NULL));

  c = rangeRand('a', 'z');
  printf("%c\n", c);

  return 0;
}
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
La version C++ de ce code:

#include <cstdlib>
#include 

/*!
** Get a random number between from and to
**
** @param from Range begin
** @param to Range end
**
** @return A random number
*/
int rangeRand(int from, int to)
{
  return rand () % (to - from + 1) + from;
}

int main(void)
{
  char c;
  srand(time(0));

  c = rangeRand('a', 'z');
  std::cout << c << std::endl;

  return 0;
}