[C++]Plantage sur un prog (ca devrait pas!!)

Plantage sur un prog (ca devrait pas!!) [C++] - C++ - Programmation

Marsh Posté le 21-04-2002 à 20:48:16    

Voila j'ai fait un prog en C++ pour resoudre la solution du probleme des 8 reines, vous savez celui il fo placer 8 reines sur un echiquier sans qu'une autre puisse manger l'autre. donc je fais mon petit prog de la maniere bourrin celle que je prefere :D ; et la je tombe sur une solution je suis content mais je le relance une seconde fois et il plante, je le relance une dizaine de fois et la il recommence a planter 1 fois sur 5, je le teste sur windows 95 et la il me trouve une solution a chaque fois mais windows me dit que le prog a causer une erreur et qu'il doit s'arreter. Je sais pas ce que c mon erreur qui provoque ces erreurs, pouvez vous m'aider.  
La source :  
 
#include <iostream.h>
#include <stdlib.h>
#include<time.h>
 
int Echiquier[8][8];
void Marquage(int,int);
void Affiche(void);
void Initialise(void);
int Placement();
       
int main()
{
srand((unsigned)time( NULL ));
int Reines;
Initialise();
 
while(Reines!=8)
                   {
                   Initialise();
                   Reines=Placement();
                   }
Affiche();
   system("PAUSE" );
      return 0;    
     
    }
 
void Marquage(int a,int b)
     {  
int x,y;
for(x=0;x<8;x++)
                {
                Echiquier[x][b]=2;
                }
for(y=0;y<8;y++)
                {
                Echiquier[a][y]=2;
                }
y=b;          
for(x=a;x<8;x++)
                {                  
                Echiquier[x][y++]=2;
                }
y=b;
for(x=a;x>=0;x--)
                     {
                     Echiquier[x][y--]=2;
                     }  
x=a;                      
for(y=b;y<8;y++)
                   {
                   Echiquier[x--][y]=2;
                   }
                   
x=a;
for(y=b;y>=0;y--)
                   {
                   Echiquier[x++][y]=2;
                   }                                                                                                                    
Echiquier[a][b]=1;  
}
 
void Affiche()
{
int x;
int y;
for(x=0;x<8;x++)
     {
     for(y=0;y<8;y++)
        {
        cout<<Echiquier[x][y];
        if(y==7)
                cout<<endl;
        }
     }
}              
 
void Initialise()
{
int x,y;
for(x=0;x<8;x++)
    {
    for(y=0;y<8;y++)
        {
        Echiquier[x][y]=0;
        }
    }
}
 
int Placement()
{
int y;
int x;
int Reines=0;
for(x=0;x<8;x++)
                {
                for(y=rand()%8;y<8;y++)
                            {
                            if(Echiquier[x][y]!=0)
                            continue;
                             
                            else
                                {
                                Marquage(x,y);
                                Reines++;
                                cout<<"("<<x<<" ,"<<y<<" )"<<"Reines : "<<Reines<<endl;
                                break;
                                }  
                             }
                 }
if(Reines<8)
            {
             for(x=0;x<8;x++)
                {
                for(y=0;y<8;y++)
                            {
                            if(Echiquier[x][y]!=0)
                            continue;
                             
                            else
                                {
                                Marquage(x,y);
                                Reines++;
                                cout<<"("<<x<<" ,"<<y<<" )"<<"Reines : "<<Reines<<endl;
                                break;
                                }  
                             }
                 }}
return Reines;                  
}

Reply

Marsh Posté le 21-04-2002 à 20:48:16   

Reply

Marsh Posté le 21-04-2002 à 21:10:16    

Il y a de fortes chances que ce soit un indice de tableau hors limites, je n'ai pas vérifié, mais ça ne m'étonnerait pas.
 
Vérifie si tes tableaux ne dépassent pas leur capacité à un moment donné.
 
Le mieux dans ce cas, est d'utiliser un debugger pas à pas.

Reply

Marsh Posté le 21-04-2002 à 21:19:10    

pareil que harkonnen :
 
for(x=a;x<8;x++)  
               {                  
               Echiquier[x][y++]=2;  
               }  
 
et le reste. utiliser un modulo sur la valeur, ie (y++) % 8.
 

Harkonnen a écrit a écrit :

Le mieux dans ce cas, est d'utiliser un debugger pas à pas.


le mieux serait surtout d'utiliser un langage moins chiant pour un problème de ce genre ... mais pas de polémique ;)

Reply

Marsh Posté le 21-04-2002 à 21:32:57    

youdontcare a écrit a écrit :

pareil que harkonnen :
 
for(x=a;x<8;x++)  
               {                  
               Echiquier[x][y++]=2;  
               }  
 
et le reste. utiliser un modulo sur la valeur, ie (y++) % 8.
 
le mieux serait surtout d'utiliser un langage moins chiant pour un problème de ce genre ... mais pas de polémique ;)




 
yéé surtout qu'on code rarement du 8 reines pour le plaisir, ca sent le TP a plein nez :D

Reply

Marsh Posté le 21-04-2002 à 21:51:21    

chrisbk a écrit a écrit :

 
 
yéé surtout qu'on code rarement du 8 reines pour le plaisir, ca sent le TP a plein nez :D  




 
Je code bien pour mon plaisir, pour info je suis en terminale, et j'ai trouver ce probleme sur le site suivant :  
http://perso.wanadoo.fr/carlov/index.html
dans la rubrique tableau, je precise que ce site est tres bien pour qui ve s'initier au C++, du reste j'en ai pas trouver d'autres, si vous avez des addresses.

Reply

Marsh Posté le 21-04-2002 à 22:09:51    

youdontcare a écrit a écrit :

 
for(x=a;x<8;x++)  
               {                  
               Echiquier[x][y++]=2;  
               }  




 
Bien vu, j'avais une flemme telle que j'ai lu ce prog en biais  :D  
Et puis, le 8 reines  :gun:

Reply

Marsh Posté le 22-04-2002 à 12:26:25    

Ok merci tt le monde ca marche, mais ca met n temps fou(ds le genre 10 sec pour trouver une soluce) Mais bon ca marche.

Reply

Sujets relatifs:

Leave a Replay

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