abracadabraPDF › Forums › PDF – Général › Générer des nombres se trouvant dans une table commune
- Ce sujet contient 40 réponses, 3 participants et a été mis à jour pour la dernière fois par
bebarth, le il y a 3 semaines et 1 jour.
-
CréateurSujet
-
27 février 2025 à 18:37 #75523
michel c.
ParticipantBonjour, j’ai un formulaire que j’aimerais améliorer :
Il permet à des élèves ayant des lacunes de s’entraîner à réduire des fractions.
J’ai 2 lignes de code qui me permettent de générer 2 variables comprises entre 1 et 100 :
var Nb1=(Math.floor(Math.random()*99))+1;
var Nb2=(Math.floor(Math.random()*99))+1;Le problème c’est que trop souvent il n’y a rien à faire car les 2 nombres sont des nombres premiers.
- J’aimerais arriver à générer 2 nombres compris entre 2 valeurs min et maxi (données par des variables Nb1Min ; Nb1max ; Nb2Min et Nb2max)
- j’aimerais aussi que les 2 nombres générés puissent lorsqu’on les décompose en produit de facteurs premiers avoir au moins un facteur commun pour que l’élève ait au moins une simplification à faire.
Pour ma première demande, je pense y arriver sans trop de difficulté. Pour la 2ème, je pense que je vais avoir plus de mal…
Merci
-
CréateurSujet
-
AuteurRéponses
-
27 février 2025 à 22:04 #75524
Merlin
Maître des clésBonjour
Je te propose encore la méthode “brutale” : si ça ne correspond pas on recommence !
var Nb1=(Math.floor(Math.random()*99))+1;
if (Nb1 < Nb1Min || Nb1 > Nb1Max) {var Nb1=(Math.floor(Math.random()*99))+1;}
var Nb2=(Math.floor(Math.random()*99))+1;
if (Nb2 < Nb2Min || Nb2 > Nb2Max) {var Nb2=(Math.floor(Math.random()*99))+1;}
28 février 2025 à 15:58 #75529michel c.
ParticipantJ’ai repris un script de BB pour générer 2 nombres aléatoires compris entre une valeur min et une valeur max.
Ce sont les valeurs qui apparaissent dans les champs Var.1.3 et Var.2.3
J’aimerais maintenant que ces valeurs générées aléatoirement le soient uniquement si elles ont un facteur commun….
Merci
-
Cette réponse a été modifiée le il y a 1 mois par
michel c..
3 mars 2025 à 14:10 #75536bebarth
Maître des clésbonjour,
En fait je n’arrive pas bien à comprendre comment ça fonctionne (Comment on génère les nombres aléatoires). Quand on clique sur “CLIQUE ICI” on a toujours un message… de plus il me semble qu’il y a une inversion quelque part entre le numérateur et le dénominateur (cf. copie d’écran).Sinon dans le principe il faudrait calculer le PGCD et faire une boucle (while) tant qu’il est égal à 1.
Si tu m’éclaire un peu, je te fais ça (je l’ai déjà fait).@+
😎Attachments:
You must be logged in to view attached files.3 mars 2025 à 19:21 #75540michel c.
ParticipantBonjour, j’avais apporté des modifs au document mais je m’étais emmêlé les pinceaux. Voici une autre version avec moins de problèmes…
En gros, lors de la génération du numérateur et du dénominateur de façon aléatoire (script de document : hasard)
- j’aimerais ne pas avoir le dénominateur = au numérateur
- j’aimerais avoir une fraction qui est simplifiable, car trop souvent il n’y a rien à faire d’autre que de recopier la fraction.
Merci
3 mars 2025 à 19:27 #75543Merlin
Maître des clésLe PGCD et le PPCM, mes cauchemars de collégien !
😉
3 mars 2025 à 20:20 #75544bebarth
Maître des clésLe PGCD et le PPCM, mes cauchemars de collégien !
Je crois même qu’on apprend ça en fin de primaire…
@+
😎3 mars 2025 à 20:21 #75545bebarth
Maître des clésVoici une autre version avec moins de problèmes…
Elle est où cette version ???
@+
😎3 mars 2025 à 22:15 #755474 mars 2025 à 00:01 #75550bebarth
Maître des clésVoici pour ton script de document “hasard”. La première fonction “function aleatoire (indice)” ne change pas, puis :
function aleatoire (indice) {
function getRandomIntInclusive(min,max,dec) {
return Math.round((Math.random()*(max-min)+min)*Math.pow(10,dec))/Math.pow(10,dec);
}
if (this.getField("Var."+indice+".0").value !="" || this.getField("Var."+indice+".1").value !="" || this.getField("Var."+indice+".2").value !="") {
this.getField("Var."+indice+".3").value=getRandomIntInclusive(this.getField("Var."+indice+".1").value,this.getField("Var."+indice+".2").value,this.getField("Dec."+i).value);
}
eval(this.getField("Var."+indice+".0").value+"="+this.getField("Var."+indice+".3").value);
}
function PGCD(a,b) {
if (b) return PGCD(b,a%b);
else return Math.abs(a);
}
function hasard () {
for (i=1; i<=2; i++) {
try {
aleatoire (i);
} catch(e) {
this.getField("Var."+i+".3").value="";
}
}
a=Math.abs(this.getField("Var.1.3").value);
b=Math.abs(this.getField("Var.2.3").value);
while (PGCD(a,b)==1) hasard();
}
@+
😎PS : Bon, le fichier ne passe pas, je te laisse donc faire la modification.
-
Cette réponse a été modifiée le il y a 4 semaines et 1 jour par
bebarth.
4 mars 2025 à 00:30 #75554Merlin
Maître des clés“Je crois même qu’on apprend ça en fin de primaire…”
C’est te dire pendant combien de temps j’en ai cauchemardé…
🙂
4 mars 2025 à 08:22 #75555michel c.
Participant4 mars 2025 à 08:46 #75557bebarth
Maître des clésbonjour,
il y a par contre parfois le numérateur = au dénominateur
Du coup, il faut écrire :
...
while (a==b || PGCD(a,b)==1) hasard();
...
Mon script va au plus simple en reprenant les valeurs des champs “Var.1.3” et “Var.2.3”. Je pense qu’on pourrait faire la même chose avant d’attribuer une valeur à ces champs, mais il faudrait revoir le script en entier ! Ça fonctionne comme ça…
@+
😎4 mars 2025 à 10:51 #75558michel c.
ParticipantÇa fonctionne à merveille, merci beaucoup !
Il ne me reste plus qu’à corriger les bugs, notamment revoir les modes de calculs des meilleurs scores.
Pour ceux que ça intéresse, le dernier fichier : LIEN
4 mars 2025 à 16:12 #75561michel c.
ParticipantRe-bonjour, toujours dans ce même script, pour gagner du temps, je voudrais que les élèves puissent valider par la touche entrée pour ne pas avoir à cliquer sur le bouton alors qu’ils ont les mains sur le clavier.
J’ai donc tenté de mettre en script sur le champ Result le code suivant :
if (event.commitKey = 13) Verif();
Mais ça fout vraiment le bazar
Je pense que c’est dû au fait qu’au moment ou j’appuie sur la touche entrée, la valeur ne ce champ est considérée comme non remplie…
Merci
5 mars 2025 à 23:23 #75574bebarth
Maître des clésbonjour,
J’ai donc tenté de mettre en script sur le champ Result le code suivant : if (event.commitKey = 13) Verif();
Pourquoi 13 ??? Si tu penses au caractère ASCII du retour ligne, ce n’est pas comme cela que fonctionne “event.commitKey”.
https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/JS_API_AcroJS.html#commitkey
Du coup, en script de format personnalisé tu écris :
if (event.commitKey==2) Verif();
Il faut également changer 2 lignes de la fonction Verif() carthis.getField("Result").value = "";
provoque une erreur. Il faut donc remplacer (2 fois) cette ligne parthis.resetForm(["Result"]);
.Dans mon exemple, j’ai également ajouté un script de touches personnalisé pour ne pouvoir taper que les caractères utilisés pour écrire une fraction (ou juste un nombre).
if (!event.willCommit) {
var aTester=event.value.split("");
aTester.splice(event.selStart, event.selEnd-event.selStart, event.change);
var testeChaine=aTester.join("");
var fractionRegEx=/^([1-9]\d*(\/([1-9]\d*)?)?)?$/;
event.rc=fractionRegEx.test(testeChaine);
} else {
var fractionRegEx=/^[1-9]\d*(\/[1-9]\d*)?$/;
event.rc=event.value=="" || fractionRegEx.test(event.value);
}
Demande si tu souhaites que je commente !Voici un lien pour télécharger ton fichier modifié : https://we.tl/t-RlWyRLbGyD
@+
😎-
Cette réponse a été modifiée le il y a 3 semaines et 6 jours par
bebarth.
Attachments:
You must be logged in to view attached files.6 mars 2025 à 08:44 #75581michel c.
ParticipantMerci beaucoup, ça fonctionne parfaitement avec adobe reader DC mais pas avec pdf XChange editor…
J’aimerais biens des commentaires pour les lignes 3 ; 4 ; 5 ; 8 et 9
Merci
6 mars 2025 à 09:21 #75582bebarth
Maître des clésbonjour,
Je commente plus tard !
Qu’est-ce qui ne fonctionne pas avec pdf XChange editor ? La validation avec la touche Enter ou l’expression régulière ?@+
😎6 mars 2025 à 10:13 #75583michel c.
ParticipantLa touche entrée ne marche pas. L’expression régulière marche nickel.
Je n’ai pas d’erreur à la console.
6 mars 2025 à 10:22 #75584Merlin
Maître des clésBonjour
Tu pourrais utiliser commitKey pour détecter l’usage de cette touche, mais :
- Il faut utiliser “2”, pas “13”.
- Çe ne détecte que la touche Entrée, pas la touche Retour.
- Il faudrait l’utiliser en fonction dans tous les champs de saisie car cet évènement est détecté lors de la perte du focus (onBlur) par un champ, et non pas seulement quand on utilise ladite touche.
Attachments:
You must be logged in to view attached files.6 mars 2025 à 10:56 #75586michel c.
ParticipantCe n’est pas ce qu’a fait BB dans sa proposition ?
if (event.commitKey==2) Verif();
6 mars 2025 à 11:46 #75587Merlin
Maître des clésOui, il faut absolument que je prenne l’habitude de rafraichir ma page avant de répondre, surtout quand elle est affichée depuis la veille.
😉
6 mars 2025 à 14:19 #75588bebarth
Maître des clésVoici le script de touches personnalisé commenté :
// Si aucun évènement ne sera exécuté, c’est à dire en cours de frappe
if(!event.willCommit) {
// La valeur du champ en table ou chaque élément est un caractère
var aTester=event.value.split(“”);
// Dans cette table, avec “splice”, on place le caractère frappé
// entre la position de départ du curseur : event.selStart
// et le nombre de caractères sélectionnés : event.selEnd-event.selStart
// Si aucun caractère n’est sélectionné event.selEnd-event.selStart==0, on ajoute donc un caractère
aTester.splice(event.selStart, event.selEnd-event.selStart, event.change);
// testeChaine est la chaine de caractère à tester de la valeur du champ avec modification du caractère frappé
var testeChaine=aTester.join(“”);
// Expression régulière pour valider la frappe en cours
// Chaque nouveau caractère doit être validé sans tenir compte des caractères à venir
// D’où l’ajout de “?” qui signifie 0 ou 1
// cf. explication de l’expression régulière ci-dessous
var fractionRegEx=/^([1-9]\d*(\/([1-9]\d*)?)?)?$/;
// La frappe est validée si le teste de la chaine avec l’expression régulière est vrai
event.rc=fractionRegEx.test(testeChaine);
// Sinon “if(event.willCommit)” : Si un évènement sera exécuté
// Si on colle une valeur ou si on quitte le champ de quelque façon que ce soit
} else {
// Expression régulière pour valider l’entrée globale
var fractionRegEx=/^[1-9]\d*(\/[1-9]\d*)?$/;
// /^…$/ Teste la chaine de catactères du début jusqu’à la fin
// [1-9] Le premier caractère doit être un chiffre de 1 à 9
// \d* 0 ou plusieurs caractères numériques
// (\/…)? Une barre de fraction et la suite, le tout facultatif
// [1-9] Si il y a une barre de fraction, le premier caractère doit être un chiffre de 1 à 9
// \d* suivi de 0 ou plusieurs caractères numériques
// L’entrée est validée si le teste de la chaine avec l’expression régulière est vrai ou si le champ est vide
event.rc=event.value==”” || fractionRegEx.test(event.value);
}
J’espère que c’est un peu plus clair pour toi !
Ça ne fonctionne effectivement pas avec PDF-XChange Editor, mais je ne sais pas où trouver les scripts du champ…@+
😎Attachments:
You must be logged in to view attached files.6 mars 2025 à 15:14 #75590michel c.
ParticipantMerci beaucoup, je vais me pencher là dessus.
Concernant les scripts de documents, ils se trouvent dans l’onglet formulaires puis Document
Les scripts des différents champs et boutons se trouvent sur le volet de droite après avoir fait un clic droit puis propriété sur le champ voulu.
Il y a plusieurs rubriques pour ces scripts : Action ; valeur de format ; validation de la valeur et calcul de la valeur.
Avec la version gratuite du logiciel, je ne sais pas s’il est possible de modifier ces scripts par contre
Attachments:
You must be logged in to view attached files.6 mars 2025 à 15:20 #75592bebarth
Maître des clés… j’ai trouvé, mais j’ai fait quelques tests et apparemment PDF-XChange Editor ne connait pas “event.commitKey” !!!
@+
😎Attachments:
You must be logged in to view attached files.6 mars 2025 à 15:53 #75594michel c.
ParticipantPourtant avec ce fichier, ça fonctionne (il vient d’un ancien fil de discussion, d’ou mon
event.commitKey = 13
)Par contre si je met en action de format la ligne : if (event.commitKey = 13) Verif(); dans le champ Result pour le fichier sur les réductions de fractions, si la réponse saisie est bonne et que j’appuie sur la touche entrée, le message Bravo apparait dans la boite de dialogue, mais ça enchaine ensuite sur l’apparition de la boite de dialogue indiquant que la réponse saisie est incorrecte…
Attachments:
You must be logged in to view attached files.7 mars 2025 à 00:25 #75598Merlin
Maître des clésChez moi ce fichier fonctionne correctement.
Par contre tu devrais gérer le paramètre nIcon dans les alertes, car “OK” s’affiche à côté de l’icône d’erreur (icône par défaut), ce qui est un peu perturbant.
L’icône Status conviendrait mieux.
Attachments:
You must be logged in to view attached files.7 mars 2025 à 10:25 #75603bebarth
Maître des clésbonjour,
Du coup, si PDF-XChange Editor comprend “event.commitKey”, je ne comprends pas pourquoi ça ne fonctionne pas avec ton fichier, et surtout pourquoi ça fonctionne avec l’autre ! Il ne l’interprète peut-être pas correctement. Il faut dire que “commitKey” est assez mal documenté.@+
😎7 mars 2025 à 11:56 #75604michel c.
ParticipantJe vais faire avec …
@Merlin : Pour le paramètre nIcon, je vais m’en occuper, c’est le genre de truc que je vois à la fin.Merci pour tout !
7 mars 2025 à 13:55 #75605Merlin
Maître des clés“Il faut utiliser “2”, pas “13”.”
Je mange mon chapeau, la réponse de ChatGPT (qui, comme Googol, ne considère le JavaScript que par rapport aux navigateurs web, d’où le point n°2 qui n’est pas vrai dans ce qui nous intéresse) :
En JavaScript, l’instruction :
event.commitKey = 13;
semble vouloir assigner la valeur 13 à une propriété commitKey de l’objet event.
Explication :
- event : Généralement, c’est un objet représentant un événement (ex : keydown, click, etc.).
- commitKey : Ce n’est pas une propriété standard des objets event. Cela signifie qu’elle a été ajoutée dynamiquement.
- Valeur 13 : Ce nombre correspond au code ASCII/Unicode de la touche Entrée (Enter).
7 mars 2025 à 14:09 #75606bebarth
Maître des clésValeur 13 : Ce nombre correspond au code ASCII/Unicode de la touche Entrée (Enter).
C’est bien ce que j’avais cru comprendre, mais pourquoi un simple signe “=” ? Si on en met 2 “==” ça ne fonctionne plus !
Et ça n’a l’air de fonctionner qu’avecevent.commitKey = 13;
.@+
😎7 mars 2025 à 15:04 #75607Merlin
Maître des clés“Pourtant avec ce fichier, ça fonctionne (il vient d’un ancien fil de discussion, d’ou mon event.commitKey = 13)”
En fait, si on va voir dans le sujet mentionné par Michel, on s’aperçoit que c’est lui qui a proposé ce bout de script.
Nous avons été deux à lui demander pourquoi “13”, mais il n’a pas répondu.
😉
7 mars 2025 à 15:14 #75608bebarth
Maître des clésJe fais évoquer le sujet sur le forum Adobe (plus tard) on verra si on a une réponse…
@+
😎7 mars 2025 à 15:48 #75609michel c.
ParticipantEffectivement, je n’avais pas répondu …
J’avais certainement cherché l’explication sans trouver de réponse. D’ailleurs je n’en trouve toujours pas….
Concernant ce code j’ai du le trouver sur un forum anglophone certainement.
7 mars 2025 à 22:32 #75626bebarth
Maître des clésJe fais évoquer le sujet sur le forum Adobe (plus tard) on verra si on a une réponse…
Si vous voulez suivre la discussion :
https://community.adobe.com/t5/acrobat-discussions/event-commitkey-values/m-p/15197726#M499460@+
😎10 mars 2025 à 14:08 #75641bebarth
Maître des clésLa discussion a été très rapide !
@+
😎10 mars 2025 à 14:24 #75642michel c.
ParticipantOui, je ne suis pas trop familier avec l’anglais, mais si je comprend bien, le mystère n’est pas éclairci…
Y-a-t-il un code qui permettrait d’afficher dans un champ la valeur correspondant à la touche qui a été pressée ?
-
Cette réponse a été modifiée le il y a 3 semaines et 1 jour par
michel c..
10 mars 2025 à 14:32 #75644michel c.
ParticipantJ’ai essayé ceci en action de frappe :
this.event.value = event.commitKey;
, mais les valeurs renvoyées sont 2 pour les touches enter et return et 1 pour les clics de souris…-
Cette réponse a été modifiée le il y a 3 semaines et 1 jour par
michel c..
-
Cette réponse a été modifiée le il y a 3 semaines et 1 jour par
michel c..
Attachments:
You must be logged in to view attached files.10 mars 2025 à 16:11 #75649Merlin
Maître des clés“je ne suis pas trop familier avec l’anglais”
Dans les forums d’Adobe il y a un bouton “Traduire” sous chaque message 😉
10 mars 2025 à 19:00 #75650bebarth
Maître des clésbonjour,
Les valeurs retournées sont de 0 à 2 :
0 — La valeur n’a pas été validée (par exemple, la touche Échap a été enfoncée).
1 — La valeur a été validée en raison d’un clic en dehors du champ à l’aide de la souris.
2 — La valeur a été validée en raison d’un appui sur la touche Entrée.
3 — La valeur a été validée en appuyant sur la touche Tab pour accéder à un nouveau champ.@+
😎10 mars 2025 à 19:05 #75651bebarth
Maître des clésAvec event.change (en script de touches personnalisé) on peut détecter la plupart des touches appuyées sauf pour les tabulations, les flèches, …
@+
😎 -
Cette réponse a été modifiée le il y a 1 mois par
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.