Casio fx 850p

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

Répondre
Andromede
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 157
Enregistré le : 09 oct. 2021 15:15

Re: Casio fx 850p

Message par Andromede »

42 et 500 sont les deux lignes qui permettent de balayer le tableau à la recherche de la valeur la plus élevée. Une fois trouvée, celle-ci est stockée dans la variable K et sa position dans le tableau est stockée dans la variable E. Ceci s'exécute bien sûr lorsqu'on répond par "PB-100" à la question "QUI DÉBUTE ?". Mais le tour du joueur suivant ne répond pas correctement. :?: 8O
Casio FX-850P, FX-880P, FX-7000G, FX-7000GA, FX-3900P
Canon X-07
Sharp E500, EL-9000, PC 1500
Texas Instruments TI-57 II, TI-62 Galaxy, TI-66 Programmable, TI-74 Basicalc, TI-74S, TI-95 Procalc
" Les machines un jour pourront résoudre tous les problèmes, mais jamais aucune d'entre elles ne pourra en poser un !" Albert Einstein
Andromede
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 157
Enregistré le : 09 oct. 2021 15:15

Re: Casio fx 850p

Message par Andromede »

Coucou!!! y a quelqu'un pour répondre à mes questions précédentes :( :?:
Casio FX-850P, FX-880P, FX-7000G, FX-7000GA, FX-3900P
Canon X-07
Sharp E500, EL-9000, PC 1500
Texas Instruments TI-57 II, TI-62 Galaxy, TI-66 Programmable, TI-74 Basicalc, TI-74S, TI-95 Procalc
" Les machines un jour pourront résoudre tous les problèmes, mais jamais aucune d'entre elles ne pourra en poser un !" Albert Einstein
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3626
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Casio fx 850p

Message par Hobiecat »

Il faudrait que tu décrives les symptômes après les corrections ? Sinon, est-ce que le 850P a un mode TRACE ? Ça pourrait aussi aider !

Et enfin, quand le programme se termine, il faudrait regarder le contenu de chaque variable, pour voir ce qui s'est passé.

Avec tout ça, tu devrais avoir une bonne idée de où ça bloque. :wink:
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Casio fx 850p

Message par C.Ret »

je ne sais pas ce qui ne va pas dans ce programme, mais j'y vois des choses affligeantes, des choses que nous autres SHARPISTEs ne faisant JAMAIS:

Par exemple, il y à la ligne 51 un GOTO 54 qui sort de la boucle FOR H=0 TO 24 STEP 5 : ... ... NEXT H sans aucune pudeur !

Apparemment, l'auteur de ce code ne sais pas calculer le reste d'une division et il est bien embêté lorsque son sous-programme 500: lui indique que le maximum de son tableau 5x5 est dans le registre d'indice E et qu'il ne sais pas comment calculer (sans boucle) le couple (N,M) donnant la positon en ligne et colonne de l'indice E. C'est pathétique.

Quand à la sortie prématurée de la boucle principale du jeu qui pose problème à Andromede, c'est à mon avis une simple erreur de lecture.
Lorsqu'un chiffre est utilisé par l'un des deux joueurs, sa valeur est remplacée dans le tableau T1() par son dixième . Je ne sais pas à quoi cela sert, c'est très certainement tout aussi pathétique ou inutile que le reste de ce code. Mais c'est ainsi que c'est codé.

Le test erroné est donc très certainement celui de la ligne 102: où il faut comparer T1(E) avec l'unité. En effet, la règle dit que le jeu s'arrête s'il n'y a plus dans la ligne ou la colonne du dernier coup de chiffre disponible. Dans ce cas, les appels au sous-programme 500: vont renvoyer une valeur maximale du plus grand "dixième" et donc une valeur inférieure à l'unité.

La ligne 102: correcte sera donc :

Code : Tout sélectionner

102 IF  T1(A)<1 THEN 598
Et surtout ne pas confondre le 1 avec un I car la variable I existe et sa valeur fait au minium 10, ce qui met fin prématurément au jeu car aucun chiffre du tableau T1() ne dépasse le neuf...

Encore, un vilain code issu des magazines de cette époque dont le génie est incompréhensible et le listing illisible...
Ordinateur de poche n°20 -Page 37 -
Ordinateur de poche n°20 -Page 37 -
Ligne 102 attention à bien retranscrire le listing.gif (10.81 Kio) Vu 3726 fois
Je viens de rajeunir de 40 ans...
... cette erreur je l'ai faite à l'époque des centaines de fois.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Andromede
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 157
Enregistré le : 09 oct. 2021 15:15

Re: Casio fx 850p

Message par Andromede »

Bonsoir,
Merci beaucoup pour cette explication détaillée, structurée et pédagogique. Je vais mettre tout ça au propre. :D :idea:
Casio FX-850P, FX-880P, FX-7000G, FX-7000GA, FX-3900P
Canon X-07
Sharp E500, EL-9000, PC 1500
Texas Instruments TI-57 II, TI-62 Galaxy, TI-66 Programmable, TI-74 Basicalc, TI-74S, TI-95 Procalc
" Les machines un jour pourront résoudre tous les problèmes, mais jamais aucune d'entre elles ne pourra en poser un !" Albert Einstein
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Casio fx 850p

Message par C.Ret »

De rien,...

Il y a aussi la ligne 62: où il manque un IF après le premier THEN
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Andromede
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 157
Enregistré le : 09 oct. 2021 15:15

Re: Casio fx 850p

Message par Andromede »

Bonsoir,
J'ai apporté les différentes corrections que vous m'avez aimablement signalées mais le programme ne fonctionne toujours pas correctement. Ainsi :
1. Le score affiché pour le joueur est erroné
2. Le programme revient sur des cases déjà choisies par le joueur comme s'il était amnésique 8O 🤕
3. J'ai proposé Col:4 Lig:3 et à son tour il me fait exactement la même proposition. 😞😲
Je suis d'accord avec C.Ret, il est très difficile de comprendre le raisonnement de l'auteur 😨😰

Code : Tout sélectionner

5 D=0: G=0: L=0: K=0
10 CLS: DIM T1(25)
12 FOR A=0 TO 24: T1(A)=INT(RAN#*9)+1: NEXT A: B=0
15 FOR H=B TO B+4: PRINT T1(H);: NEXT H
18 FOR C1=0 TO 2000: NEXT C1: PRINT: B=B+5: IF B<>25 THEN 15
40 INPUT"QUI DEBUTE"; C$: IF C$<>"PB-100" THEN 60
42 FOR A=0 TO 24 : GOSUB 500: NEXT A: A=E
50 M=1: G=G+INT T1(A): T1(A)=T1(A)/10
51 FOR H=0 TO 24 STEP 5: IF A>=H THEN IF A<=H+4 THEN 54
52 M=M+1: NEXT H
54 I=(M-1)*5: N=A-I+1
55 D=1: PRINT"#COL:"; N; " LIG:"; M; "#": GOSUB 558
60 INPUT "COM? LIGNE"; J$: IF J$="*" THEN 598
61 J=VAL(J$): INPUT F: I=(F-1)*5
62 IF N<>J THEN IF M<>F THEN IF D<>0 THEN PRINT "COUP IMPOSSIBLE!->";:PRINT : GOTO 60
65 B=I+J: K=0: A=B: L=L+INT T1(A): T1(A)=T1(A)/10
71 M=5-J: H=1: GOSUB 547: H=-H: M=1-J: GOSUB 547
75 H=5: M=5*(5-F): GOSUB 547: H=-H: M=-5*(F-1): GOSUB 547 : A=E
102 IF T1(A)<1 THEN 598
105 GOTO 50
500 IF T1(A)>K; K=T1(A): E=A
509 RETURN
547 FOR A=B TO B+M STEP H: GOSUB 500: NEXT A: RETURN
558 PRINT"JOUEUR:";L;" /PB-100:"; G;"  ";:PRINT: RETURN
598 IF G>L  THEN PRINT "PERDU!->";
600 IF G<L THEN PRINT "GAGNE!->";
605 IF G=L THEN PRINT "EGALITE!->";
610 GOSUB 558: END
Casio FX-850P, FX-880P, FX-7000G, FX-7000GA, FX-3900P
Canon X-07
Sharp E500, EL-9000, PC 1500
Texas Instruments TI-57 II, TI-62 Galaxy, TI-66 Programmable, TI-74 Basicalc, TI-74S, TI-95 Procalc
" Les machines un jour pourront résoudre tous les problèmes, mais jamais aucune d'entre elles ne pourra en poser un !" Albert Einstein
Avatar du membre
Dreamers
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 22
Enregistré le : 25 nov. 2021 15:31

Re: Casio fx 850p

Message par Dreamers »

Bonjour,

J'ai juste quelques petites remarques par rapport au listing, ce n'est pas dit que cela résoudra quelque chose mais c'est un premier jet.

_ Le tableau, je le renommerais TA plutôt que T1 dans toutes ses occurences, pure esthétique.
_ La ligne T1(A)=INT(RAN#*9)+1, je la remplacerais par T1(A)=INT(RAN#*9+0.5), cela donne généralement un pseudo aléatoire mieux réparti.
_ Les deux GOSUB 558 ne mènent qu'à une seule ligne d'affichage.
Il me semble que remettre ces lignes en question dans le programme ne le rendra pas moins clair.
_ Les deux GOSUB 500 pourraient aussi être avantageusement supprimés et remplacés par la ligne d'instructions correspondante là où ils apparaissent.
_ Je ferais une renumérotation bien structurée du listing, plutôt de 10 en 10, pure esthétique.

A bientôt.

[Edit : Une dernière remarque cosmétique, je changerais l'appellation 'PB-100' par 'FX850P', ce qui ne change pas le nombre de caractères.]
[Edit 2 : Des remarques plus de fond :
_ Ligne 65, la fonction INT n'a pas de parenthèses, c'est permis ?
_ Ligne 500, après le test, c'est un ";", il me semble qu'il faut "THEN" à la place à moins que ce soit le contraire qu'il faille faire sur les autres tests IF THEN.
Apparemment sur PB-100, il y a une distinction entre les deux formats, l'un servant au saut vers une autre ligne (le THEN) et l'autre servant à séparer l'opération suivante.]
Une calculette par jour garde le docteur au loin. (Inspiré d'une sagesse populaire)
Lien vers ma collection.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Casio fx 850p

Message par C.Ret »

Dreamers a écrit : 26 nov. 2021 11:36 _ La ligne T1(A)=INT(RAN#*9)+1, je la remplacerais par T1(A)=INT(RAN#*9+0.5), cela donne généralement un pseudo aléatoire mieux réparti.
Attention cette dernière proposition est fausse. Les deux formules ne sont pas équivalentes et produisent des résultats forts différents et la seconde formule s'éloigne considérablement d'une équipartition : pour illustrer cela, voici un petit graphique composé à l'aide des deux formules sur un million de tirages pseudo-aléatoires :
Répartitions obtenues à l'aide de deux formules.gif
Répartitions obtenues à l'aide de deux formules.gif (29.07 Kio) Vu 3603 fois
Les deux bar graphes illustrent bien les différentes classes obtenues et leur répartition !

Dreamers a écrit : 26 nov. 2021 11:36 _ Ligne 65, la fonction INT n'a pas de parenthèses, c'est permis ?
Oui c'est permis ! C'est même parfois fait express pour économiser les quelques octets servant à coder les parenthèses. Apparemment sur ce BASIC c'est donc permis. Il y a des variantes sur d'autres systèmes (comme les Texas Instruments, par exemple) où la parenthèse ouvrante fait partie intégrante de la fonction et donc cela oblige à saisir les deux parenthèses pour que ça marche. Sinon, une erreur de syntaxe se produit.
Modifié en dernier par C.Ret le 27 nov. 2021 09:39, modifié 1 fois.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
Dreamers
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 22
Enregistré le : 25 nov. 2021 15:31

Re: Casio fx 850p

Message par Dreamers »

Merci, j'ai appris deux choses aujourd'hui.
Pourtant pour le générateur pseudo aléatoire j'étais assez sûr, comme quoi...
Merci et à bientôt.

[Édit : J'ai compris, c'est parce que cette fonction INT fait une troncature, pas un arrondi à l'entier le plus proche. Encore merci.]
Une calculette par jour garde le docteur au loin. (Inspiré d'une sagesse populaire)
Lien vers ma collection.
Tipoucet
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3787
Enregistré le : 10 janv. 2009 13:47

Re: Casio fx 850p

Message par Tipoucet »

Bonjour, concernant le graphique, je constate sans bien me l'expliquer qu'excepté les classes 0 et 9, les crêtes des graphiques sont quasi superposables. Question de semence de départ ? de la qualité de l'algorithme du générateur ? :|
850.jpg
850.jpg (4.32 Kio) Vu 3565 fois
Modifié en dernier par Tipoucet le 27 nov. 2021 10:09, modifié 1 fois.
Dominique
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Casio fx 850p

Message par C.Ret »

Andromede a écrit : 25 nov. 2021 20:51[...]Je suis d'accord avec C.Ret, il est très difficile de comprendre le raisonnement de l'auteur 😨😰 [...]
Justement, c'est là que ce type de magazine et ses listings sont très précieux. Il donne une bonne illustration des choses que l'on peut faire et comment bien les faire ou comment ne pas bien les faire.

C'est donc très important, car le temps passé à déboguer un code (ou plutôt ce que l'on a compris de sa représentation) est un temps d'étude et d'apprentissage qui aura de grandes répercussions sur la façon dont on fait mais surtout la façon dont on présente soi-même les choses !

Parfois, c'est le pire des listing illisible et apparemment mal fichu qui est le plus instructif. Mais aussi le plus dur à corriger. On fini par développer une méthode de travail, et des habitudes qui vont influencer ses propres compétences, façon de résoudre les problèmes et en présenter les méthodes.

Arrivé à un certains point, il faut alors voler de ses propres ailes et se lancer dans son propre code pour faire la même chose ou à peu près.

Par exemple, ce petit jeu innocent peut être un peu amélioré dans ses principes très limitatifs car adapté aux performances du CASIO BP-100, de son affichage restreint (et de la qualité des compétences de l'auteur à ce moment).

Sur le CASIO fx-850p, l'affichage fait deux lignes et 32 caractères de large. On pourrait donc envisager de faire quelque chose de plus "graphique" qui afficherait la grille de jeu tout au long de jeu.
Les touches directives du curseur pourrait à l'aide d'instruction INKEY$ ou INPUT$() permettre de sélectionner la case à joueur en se déplaçant dans la grille qui s'afficherait au fur et à mesure.

Lorsque que le CASIO joue, on pourrait rendre les choses compréhensibles en animant l'affichage de la même façon en montrant le défilement de la grille vers la case jouée par le pocket.

L'effet sur le score pourrait être plus dynamique, la ligne supérieure servant, par example à afficher instruction, score et record des deux joueurs.

Les touches curseurs pour déplacer la case sélectionnée.
Les touches ESPACE et EXE servant à sélectionner la case sélectionner et lançant l'animation du "transfert des point de la grille vers le score du joueur).
La touche BS pourrait servir à passe son tours ou abandonner. Ce qui règle élégamment et efficacement le traitement du choix du premier joueur.

Enfin, pour les plus ambitieux, les règles de ce jeu sont un cadre parfait pour l'implémentation d'un algorithme de recherche et d'optimisation des coup du pocket par un bon min-max des familles (à élaguer en beta ou alpha, à vous de choisir). Le pocket, au lieu de jouer systématiquement le maximum, va élaborer une stratégie gagnante à long terme.

Et ce petit jeu, sans ambition, va vite devenir énervant car on ne gagnera jamais !
Mais, on aura de quoi passer un doctorat en programmation de BASIC vintage.
Modifié en dernier par C.Ret le 11 déc. 2021 09:04, modifié 1 fois.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3404
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Casio fx 850p

Message par C.Ret »

Tipoucet a écrit : 27 nov. 2021 10:02 Bonjour, concernant le graphique, je constate sans bien me l'expliquer qu'excepté les classes 0 et 9, les crêtes des graphiques sont quasi superposables. Question de semence de départ ? de la qualité de l'algorithme du générateur ? :|
Oui, tout à fait, il provient d'une part de l'imperfection de l'algorithme générant les nombres aléatoires qui ne le sont pas exactement. En fait pas du tout.
Et d'autre part , que l'équipartition exacte d'une variable aléatoire n'est obtenue asymptotiquement qu'après un nombre infini de tirages et que je me suis arrêté très très vite avant l'infini, car je n'est fait que 1 000 000 tirages successifs. Ce qui n'est rien par rapport à l'infiniment infini de notre univers.


Effectivement, chaque semence initiale produira une séquence que l'on espère aussi différente des autres que possible et donc donnera lieu, à la fin de l'échantillonnage, à d'autres comptages dans chaque classe (et donc des crêtes sur le graphique qui s'approchent d'une même valeur, mais pas exactement).
Modifié en dernier par C.Ret le 28 nov. 2021 08:54, modifié 1 fois.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
Dreamers
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 22
Enregistré le : 25 nov. 2021 15:31

Re: Casio fx 850p

Message par Dreamers »

Bonjour.
On peut même tester la "force d'aléatoire" du générateur en vérifiant les couples de valeurs successives, les triples, etc
Normalement, la répartition doit rester uniforme pour chaque classe formée.
En fait, si on pousse ce test assez loin, on parvient à voir des choses qui clochent (par exemple les séquences comme '111111' ou '999999' on peu de chance d'être représentées même après des milliards de générations alors que cela devrait pouvoir se produire statistiquement.
À bientôt.
Une calculette par jour garde le docteur au loin. (Inspiré d'une sagesse populaire)
Lien vers ma collection.
Tipoucet
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3787
Enregistré le : 10 janv. 2009 13:47

Re: Casio fx 850p

Message par Tipoucet »

Merci C.Ret, en fait c'est les séquences de 4,5,6,que je trouvais particulièrement "jumelles" dans les deux graphiques. Une histoire de grands nombres donc. :wink:
Dominique
Répondre

Retourner vers « Tous les Pockets »