xerxes help me please

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Avatar de l’utilisateur
Xerxes
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 291
Inscription : 02 avr. 2007 13:41
Localisation : Allemagne
Contact :

Re: xerxes help me please

Message par Xerxes » 03 oct. 2009 14:43

Your verification shows, that the test code itself cannot be the problem. Have you checked
the contents of the vars a[1] to a[8] to see, if the queens are on the correct positions?
The array values should be: 8 4 1 3 6 2 7 5

Propably there is a bug in the printnum function. What is the result of the following code?

Code : Tout sélectionner

main()
{
  int s=876;
  printnum(0,0,s);
}

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: xerxes help me please

Message par charognard » 03 oct. 2009 15:02

Code : Tout sélectionner

main()
{
  int s=876;
  printnum(0,0,s);
}
déjà testé aussi :(
donne 876

peut etre effectivement un problème avec le int A[9] je testerai

jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2368
Inscription : 17 févr. 2008 00:34
Localisation : Paris 20ème

Re: xerxes help me please

Message par jxano » 03 oct. 2009 16:21

charognard a écrit :MON PROBLEME EST SUR LE COMPILATEUR SDCC PAS SUR LE 850V EN C !!!
c'est compris ou il faut que je fasse un dessin :D
Ben, ta première question n'était pas très claire. En plus, je n'avais pas compris qu'il s'agissait d'un code de Xerxes et non du tien.

L'occasion faisant le larron, j'ai pondu hier entre 22h et 1h ceci :
10 char acGri[64], acPos[64], acSol[9]; Grille, Positions, Solution
12 int iNbr=0; Nombre (de solutions)
50 void Recherche(char cN,char *pcD) Niveau (rangée), Début
51 { char cCol,cPos,cFin=cN*8+8,cAbs,*pcCur=pcD; Colonne, Position, Fin, Abscisse, Curseur
52 if (cN==8) Clause d'arrêt de la récursion
54 { printf("%4d: %s\n",++iNbr,acSol);
55 return; }
60 for(cCol=cN*8;cCol<cFin;++cCol) if (acGri[cCol]) /*libre=1*/
61 { On décrit une rangée case par case en sautant les cases marquées
62 cAbs=cCol%8;
63 acSol[cN]='1'+cAbs;
70 for(cPos=cCol+8;cPos<64;cPos+=8) Marquage de la colonne sur les rangées suivantes
71 if (acGri[cPos]) /*lib=1*/
72 { acGri[cPos]=0; *(pcCur++)=cPos; } /*occupae=0*/ On note au passage le n° de la case marquée dans acPos
75 for(cPos=cCol+7;cPos<64 && (cPos%8)<cAbs;cPos+=7) Diagonale indirecte avec arrêt au bord de l'échiquier
76 if (acGri[cPos]) /*lib=1*/
77 { acGri[cPos]=0; *(pcCur++)=cPos; } /*occupae=0*/
80 for(cPos=cCol+9;cPos<64 && (cPos%8)>cAbs;cPos+=9) Diagonale directe avec arrêt au bord de l'échiquier
81 if (acGri[cPos]) /*lib=1*/
82 { acGri[cPos]=0; *(pcCur++)=cPos; } /*occupae=0*/
88 Recherche(cN+1,pcCur);
91 while (pcD<pcCur)
92 acGri[*(--pcCur)]=1; /*libre aa nouveau*/ Libération des cases marquées à l'étape courante
95 } /*colonnes*/
99 } /*recherche*/
100 int main()
101 { char *pc;
110 for(pc=acGri;pc<acGri+64;++pc) *pc=1; /*libre*/ Initialisation de la grille (échiquier)
112 acSol[8]=0; Zéro terminal pour la chaîne-solution
130 Recherche(0,acPos); Lancement de la recherche sur la première rangée
190 printf("Fin sans erreur.");
199 return 0; }
Voilà un reflet du contenu de mon 850S (avec suppléments de commentaires en vert). Au passage, j'illustre ma façon de remplacer les accents qu'il me semble utile de faire figurer quelque soit le matériel utilisé.

Mon programme sort 92 solutions en 51,5 secondes. La dernière est celle que donne Xerxes : 84136275. Il y a peut-être des optimisations à faire que je ne connais pas...
Programmeur abscons.

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: xerxes help me please

Message par charognard » 03 oct. 2009 19:21

Merci jxano
le but c'est surtout de bencher le test de xerxes mais le compilo SDCC a semblerait il un problème
je fais des tests et je trouve la soluce
le but était simplement de voir si sur cet algo quelqu'un avait rencontré ce genre de problème et éventuellement trouvé la solution

Avatar de l’utilisateur
Xerxes
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 291
Inscription : 02 avr. 2007 13:41
Localisation : Allemagne
Contact :

Re: xerxes help me please

Message par Xerxes » 04 oct. 2009 02:15

Charo, I've discussed the problem with Piotr and he also thinks that the compiler goes wrong. The compiler
seems to be very buggy, if it's not able to create correct code even for such a simple program.

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: xerxes help me please

Message par charognard » 04 oct. 2009 08:40

merci xerxes!

de nombreuses sources japonaises existent sur ce compilateur je vais chercher le problème je t'en fais part

il y a une derive à partir de S=24 je continue à chercher

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7180
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: xerxes help me please

Message par gege » 04 oct. 2009 13:26

Bonjour,
Sans comprendre grand chose à votre code, ne serait-ce pas un souci du genre :

Code : Tout sélectionner

if (t==0 || x-y==abs(t))
au lieu de

Code : Tout sélectionner

if ( (t==0) || (x-y==abs(t)) )
???
G.E.

Avatar de l’utilisateur
Xerxes
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 291
Inscription : 02 avr. 2007 13:41
Localisation : Allemagne
Contact :

Re: xerxes help me please

Message par Xerxes » 04 oct. 2009 16:02

Salut gege,

the additional brackets are redundant, because comparisons have higher priority than logical operators.
An example for verification:

Code : Tout sélectionner

0 && 1 == 0    gives 0

0 && (1 == 0)  gives 0

(0 && 1) == 0  gives 1

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: xerxes help me please

Message par charognard » 04 oct. 2009 17:02

mais gégé c'est le roi des parenthèses :D
remarque ça leve toute ambiguité comme cela

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7180
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: xerxes help me please

Message par gege » 04 oct. 2009 22:58

Hi, what I meant is that the compiler might have badly applied the priority rules.
With parentheses, this could not happen.
Would be worth a 3 minutes try.

Side note : parentheses are not **EVIL**... and can save your bacon !! ;-)
G.E.

Avatar de l’utilisateur
Woodstock
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1969
Inscription : 17 mai 2008 11:19
Localisation : Au fin fond du Santerre ...

Re: xerxes help me please

Message par Woodstock » 04 oct. 2009 23:10

gege a écrit :Side note : parentheses are not **EVIL**... and can save your bacon !! ;-)
G.E.
Amateur de LISP, le Langage Insipide Stupidement Parenthésé ?
I'm the operator
Of my pocket calculator
I am adding
And substracting...
(Kraftwerk, Computer World, 1981)

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: xerxes help me please

Message par charognard » 04 oct. 2009 23:14

j'ai fais le test et ça ne fonctionne pas mieux

Avatar de l’utilisateur
Xerxes
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 291
Inscription : 02 avr. 2007 13:41
Localisation : Allemagne
Contact :

Re: xerxes help me please

Message par Xerxes » 04 oct. 2009 23:43

Sorry gege, but I misinterpreted your statement a bit. The translation of Google is sometimes
very hard to understand or causes misunderstandings.

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7180
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: xerxes help me please

Message par gege » 04 oct. 2009 23:49

No harm done !
I have seen lots of cases whereby a different level of optimization used with the compiler would make a program work or break.
Debugging can be a black art.
G.E.

Avatar de l’utilisateur
Chris
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 220
Inscription : 20 oct. 2007 19:01

Re: xerxes help me please

Message par Chris » 05 oct. 2009 13:43

gege a écrit :Side note : parentheses are not **EVIL**... and can save your bacon !! ;-)
gege a écrit :No harm done !
Don't forget Gege: good harm does great bacon :mrgreen:

:arrow:

@Charo : il est toujours pas sorti ton article ?
Re :arrow:
HP : 11C 17BII 28S 48SX 50G 71B LX100
Sharp : PC-1403 PC-1600 PC-G850V
TI : TI-74

Répondre

Revenir vers « Tous les Pockets »