8 REINES SUR UN ÉCHIQIER

cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015 - 6 oct. 2010 à 09:50
cs_NoMitsu Messages postés 122 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 février 2011 - 16 févr. 2011 à 18:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52359-8-reines-sur-un-echiqier

cs_NoMitsu Messages postés 122 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 février 2011
16 févr. 2011 à 18:25
Bonjour,

Je vois bien que tu es débutant, néanmoins le code est une horreur ! je te conseille fortement d'essayer de le recoder sans les goto et sans le k==92. De plus les 8 reines, est un excellent exercice de récursivité, tu devrais essayer de le faire de cette façon. Bon courage et si tu as besoin d'aide n'hésite pas a poser des questions.
fredericfabry Messages postés 5 Date d'inscription mercredi 21 juillet 2010 Statut Membre Dernière intervention 11 décembre 2011
9 oct. 2010 à 20:29
Bonjour
Je pense avoir mal compris le système de passage de paramètre d un tableau qu'il soit a une dimension ou plusieurs.
Effectivement le int*t[9] peut être remplacé par int*t.

Je comprend pourquoi les goto n ont plus la cote:
sur les langages moderne la notion de fonction ou d'encapsulation permet de penser autrement (fonction ou méthode) mais sur les automates industriels plus proche de l'assembleur, ca fonctionne encore.

Je vous remercie pour vos commentaires.

(demain j'essai le code de yannikator)(super idée mais irréalisable pour moi tout seul)
Yannikator Messages postés 23 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 10 novembre 2012
9 oct. 2010 à 09:43
Bon comme j'étais aussi intéressé par le résultat, j'ai pas résisté de mettre le résultat dans un fichier ^_^.

Pour ceux que ça intéresse :
void saveResult(int(*t)[9]){

FILE *file;
int i,j;
static int tagg = FALSE;

if(tagg == FALSE)
{if((file fopen("C:\\result.txt","w")) NULL)
{printf("Probleme creation fichier...");return;}
}
else
{if((file fopen("C:\\result.txt","a+")) NULL)
{printf("Probleme MAJ fichier...");return;}
}

for (j=1;j<=8;j++)
{
for (i=1;i<=8;i++)
{
if (t[i][j]<0)
{
fputc('*',file);
}
else
{
if (t[i][j]>0)
{
fputc('R',file); //Affiche le R de reine
}
else
{
fputc('-',file); //Affiche les possibilités de pose de reine
}
}
}
/*fprintf(file,"%s",CHARRIOT);*/
fputs(CHARRIOT,file);
}
fprintf(file,"%s%s","--------",CHARRIOT);
fprintf(file,"%s%d%s%s","---",tagg,"---",CHARRIOT);
fprintf(file,"%s%s%s","--------",CHARRIOT,CHARRIOT);
tagg++;
fclose(file);
}

Sans oublié les define:
#define FALSE 0;
#define CHARRIOT "\n" /*retour charriot...*/

A+
Yannikator Messages postés 23 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 10 novembre 2012
8 oct. 2010 à 19:35
Salut,

J'aime beaucoup l'algo, je trouve la méthode étonnante et très ancienne. Ce qui reflète bien la référence bibliographique auquel tu fais référence. Car les goto sont très dépréciés de nos jours, même si ils sont parfois indispensable.
Cependant je serais curieux de savoir si tu peux me dire qu'est-ce que tu fais quand tu déclare tes paramètres avec int (*t)[9], un simple int *t n'aurait pas été plus simple en tant que débutant...
Sinon l'algo je le trouve très intéressant... J'avais jamais pensé comme ça.

A+
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
8 oct. 2010 à 10:10
ça dépend, quand je travaillais en vb, j'utilisait des tableaux de base 1. En C j'utilise uniquement des tableaux de base 0.
Fondamentalement, ca ne change pas les données du problème.
Shromilder Messages postés 32 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 13 février 2010
8 oct. 2010 à 09:58
... Je crois que tu ne travailles pas avec les zéros. :)
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
6 oct. 2010 à 09:50
Pour optimiser, tu peux représenter les positions des 8 reines pour un vecteur de 8 positions.
En effet, comme pour une colonne tu ne peux avoir qu'une seule reine, il est inutile de te trimbaler une représentation en mémoire à deux dimensions.
Rejoignez-nous