Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème code

7 juillet 2007 à 21:44:43

Bonjour,
Pour être bref, j'ai fait un code qui est supposé générer aléatoirement une coordonnée ( x, y ) puis on entre nos coordonnees ( x1, y1 ) et si celles-ci doivent corespondent à un nombre particulier ( dans mon cas que x1 doit être égal à x +2 et que y + 2 = y1 ) et alors les coordonnée x et y initial se transforme pour être remplacé par x1 et y1 et ainsi de suite on continue à proposer des coordonnées.

Ce qui donnerait par exemple:
(x, y) -> 5, 2
(x1, y1) -> 7, 4 ( car 5+2 et 2+2 )
(x,y) = 7, 4
(x1, y1) -> 9, 6
(x,y) = 9, 6
etc... mais si on se trompe, genre si j'avais marqué 9, 5 alors le programme quitte.

L'intérêt dans ce cas, c'est qu'il s'agit de la base d'un code que j'adapterai pour faire un mini-jeu d'échecs ( tres simple avec juste des pions ).
Le problème c'est que je ne suis pas capable de modifier x et y pour qu'il égalent x1 et y1 et que cette opération se continuse indéfiniment. Voici mon code en espérant que vous pouvez m'aider:


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

using namespace std;
int position(int &x, int &y, int &x1, int &y1);
int coup = 0;
int valide = 0;

int position(int &x, int &y, int &x1, int &y1)
{

    if ( coup == 0 )
    {
    const int MIN = 0, MAX = 7;

    x = (rand() % (MAX - MIN + 1)) + MIN;
    y = (rand() % (MAX - MIN + 1)) + MIN;
    x1=0;
    y1=0;
    }

    if ( coup != 0 )
    {



   if ( x + 2 == x1 &&
        y + 2 == y1 )

{
    cout<< "Coup Légale\n";
    x==x1;
    y==y1;
    valide = 1;
}

if ( x+2 != x1 || y+2 != y1 )
{
cout<<"Mauvais Coup";
exit(0);
}

}
}




int main()
{
    srand(time(NULL));
    cout << "Bienvenue \n" << endl;

    int x, y, x1, y1;
    position(x, y, x1, y1);
    coup = 1;
    cout << "Coordonnees Cavalier: " << x << ", " << y << "\n" << endl;

    cout << "Nouvelles Coordonnees: " << endl;
    cin>>x1;
    cin>>y1;

    position(x, y, x1, y1);

    if ( valide == 1 )
    {
         int x2, y2, x12, y12;
    position(x2, y2, x12, y12);
    cout << "Coordonnees Cavalier: " << x2 << ", " << y2 << "\n" << endl;
    }



    system("PAUSE");
    return 0;
}

 


PS; J'ai mis ce code dans la section c++ seulement car j'avais utiliser les cout et cin, il n'y a aucune notion d'objet pour l'instant.

Merci
Cordialement
  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2007 à 1:23:26

Salut, tu devrais carrément faire ton programme en C quoi, je redis que si tu te sert du C++ juste pour les cin/cout, alors préfère le Python pour te simplifier la vie. T'as pas besoin de stdio et stdlib au fait.

Pour ton problème, c'est assez chelou, mais explique nous ça:
   if ( x + 2 == x1 &&
        y + 2 == y1 )

{
    cout<< "Coup Légale\n";
    x==x1;
    y==y1;
    valide = 1;
}

A quoi les comparaisons de x (y) avec x1 (y1) te servent-elles dans ce bloc d'instructions ? Peut-être qu'en ne mettant qu'un signe = d'assignation ça résoudrait ton problème ? J'en sais rien j'ai aps étudié ton code, mais ce truc est pour l'instant inutile. Par exemple, en plus doux:
bool valide;
//...
if ( x1 == x+2 && y1 == y+2 )
{
    cout<< "Coup Légal" << endl; // Coup est masculin
    x = x1;
    y = y1;
    valide = true;
}
  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2007 à 1:31:30

SpotZup a bien raison, tu ne devrais pas faire de comparaison, mais plutôt une d'affectation.
De plus j'aurais une petite question pour toi. Est-ce que la variable "valide" a plus de 2 états?
Si non, je te conseillerais vivement d'utiliser un prédicat (une variable ne pouvant contenir que le résultat VRAI ou FAUX) tu sauverais en emplacement mémoire, et tu augmenterais grandement la clarté (puisque le choix d'une variable booléenne serais beaucoup plus significatif).
  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2007 à 1:53:40

Ok, j'ai corrigé les erreurs que vous m'avez mentionnées. Voici le code à présent:


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

using namespace std;
int position(int &x, int &y, int &x1, int &y1);
int coup = 0;
bool valide = false;

int position(int &x, int &y, int &x1, int &y1)
{

    if ( coup == 0 )
    {
    const int MIN = 0, MAX = 7;

    x = (rand() % (MAX - MIN + 1)) + MIN;
    y = (rand() % (MAX - MIN + 1)) + MIN;
    x1=0;
    y1=0;
    }

    if ( coup != 0 )
    {

if ( x1 == x+2 && y1 == y+2 )
{
    cout<< "Coup Legal" << endl; // Coup est masculin
    x = x1;
    y = y1;
    valide = true;
}

    }
}


int main()
{
    srand(time(NULL));
    cout << "Bienvenue \n" << endl;

    int x, y, x1, y1;
    position(x, y, x1, y1);
    coup = 1;
    cout << "Coordonnees Cavalier: " << x << ", " << y << "\n" << endl;

    cout << "Nouvelles Coordonnees: " << endl;
    cin>>x1;
    cin>>y1;

    position(x, y, x1, y1);

    if ( valide == 1 )
    {
         int x2, y2, x12, y12;
    position(x2, y2, x12, y12);
    cout << "Coordonnees Cavalier: " << x2 << ", " << y2 << "\n" << endl;
    }



    system("PAUSE");
    return 0;
}

 


Il reste encore deux petites choses;
1- comment faire pour que la boucle se perpétue indéfiniment jusqu'à ce qu'il y ait une erreur ?
2- Lorsque les nouvelles coordonnées du cavalier raparaissent ( à la toute fin ), au lieu de m'afficher la valeur de x2 et y2, un chiffre énorme apparait. Je me doute que c'est un erreur d'adresse ou de référence un truc du genre mais je n'arrive pas à régler le problème.

Merci

  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2007 à 2:02:17

Si j'étais toi , je modifierais le type de retour de la fonction position (qui devrait*** retourner un int(mais elle ne retourne rien)) pour qu'elle retourne un booléen ( le prédicat "valide?" ) ensuite tu pourrais placer une boucle qui aurait comme condition
while(position(x,y,x1,y1))


en résumé: tant que la position retourne vrai(donc elle est valide) on fait ce qu'il y a dans la boucle.

pour ce qui est de ton problème de retour de nombre, je te conseillerais de mettre des traces un peu partout (c'est a dire, des cout, qui te renvoie la valeur de x et de y et dans quel partie du programme ils ont cet état)

(c'est du débugage, a apprendre et a maitriser, si tu veux coder beaucoup :P)
  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2007 à 2:37:47

J'ai remodifié mon code, cependant l'instruction return fonctionne plus ou moins bien, veuillez me corriger svp;



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

using namespace std;
bool position(int &x, int &y, int &x1, int &y1);
int coup = 0;
bool valide = false;

bool position(int &x, int &y, int &x1, int &y1)
{

    if ( coup == 0 )
    {
    const int MIN = 0, MAX = 7;

    x = (rand() % (MAX - MIN + 1)) + MIN;
    y = (rand() % (MAX - MIN + 1)) + MIN;
    x1=0;
    y1=0;
    }

    if ( coup != 0 )
    {

if ( x1 == x+2 && y1 == y+2 )
{
    cout<< "Coup Legal" << endl; // Coup est masculin
    x = x1;
    y = y1;
    return true;
}
else
return false;

    }
}


int main()
{
    srand(time(NULL));
    cout << "Bienvenue \n" << endl;

    int x, y, x1, y1;
    position(x, y, x1, y1);
    coup = 1;
    cout << "Coordonnees Cavalier: " << x << ", " << y << "\n" << endl;

    cout << "Nouvelles Coordonnees: " << endl;
    cin>>x1;
    cin>>y1;

    position(x, y, x1, y1);



    while(position(x,y,x1,y1))
    {
    cout << "Coordonnees Cavalier: " << x << ", " << y << "\n" << endl;
    }


    system("PAUSE");
    return 0;
}

 


Merci
  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2007 à 2:51:35

conserve ta variable "valide". fait plutôt un
return valide;
  • Partager sur Facebook
  • Partager sur Twitter
8 juillet 2007 à 18:10:41

Salut, je suis pressé donc je peux pas expliquer mais je laisse le code corrigé dans son ensemble ici :
#include <iostream>
#include <time.h>

using namespace std;

bool position(int &x, int &y, int &x1, int &y1);
bool valide = false;
int coup = 0;

bool position(int &x, int &y, int &x1, int &y1)
{
        if ((x+y+x1+y1)==0)
    {
                const int MIN = 0, MAX = 7;
                x = (rand() % (MAX - MIN + 1)) + MIN;
                y = (rand() % (MAX - MIN + 1)) + MIN;
        x1=0;
        y1=0;
    }

        if ( x1 == x+2 && y1 == y+2 )
        {
             cout<< "Coup Legal" << endl;
             x = x1;
             y = y1;
             return true;
        }
        else
        {
                cout << "Coup pas légal, fin" << endl;
                return false;
        }
}


int main()
{
    srand(time(NULL));
    cout << "Bienvenue \n" << endl;

    int x=0, y=0, x1=0, y1=0;
    position(x, y, x1, y1);

    do
    {
        cout << "Coordonnees Cavalier: " << x << ", " << y << endl;
        cout << "Nouvelles Coordonnees: " << endl;
        cout << "x1 = ";
        cin  >> x1;
        cout << "y1 = ";
        cin  >> y1;
    } while(position(x,y,x1,y1));

    return 0;
}

Je sais que ça se fait pas et que c'est pas bon pour toi, mais s'il te plait compare vraiment chaque ligne de ce code avec le tiens pour comprendre le plus de choses possibles. Et si tu as n'importe quelle question, n'hésite pas à la poser (au pire MP moi si tu ose pas le poster ici).
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
8 juillet 2007 à 18:55:47

Le message qui suit est une réponse automatique activée par un modérateur.
Les réponses automatiques permettent d'éviter aux modérateurs d'avoir à répéter de nombreuses fois la même chose, et donc de leur faire gagner beaucoup de temps.
Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter le modérateur en question par MP.


Le titre du sujet est incorrect


Bonjour,



Ce sujet a un titre qui ne décrit pas correctement le sujet, ou le titre est en majuscules. Vous pouvez re-poster votre sujet en rectifiant ce point.

Voici quelques correspondances pour vous aider à choisir au mieux votre titre :


Merci de votre compréhension :)
Les modérateurs.
  • Partager sur Facebook
  • Partager sur Twitter