Donnez vie à vos documents numériques !
 

Générer des nombres se trouvant dans une table commune

abracadabraPDF Forums PDF – Général Générer des nombres se trouvant dans une table commune

  • Créateur
    Sujet
  • #75523
    michel c.
    Participant

    Bonjour, 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

     

Affichage de 40 réponses de 1 à 40 (sur un total de 40)
  • Auteur
    Réponses
  • #75524
    Merlin
    Maître des clés

    Bonjour

     

    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;}

    #75529
    michel c.
    Participant

    J’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

    LIEN

    • Cette réponse a été modifiée le il y a 1 mois par michel c..
    #75536
    bebarth
    Maître des clés

    bonjour,
    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.
    #75540
    michel c.
    Participant

    Bonjour, 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

    #75543
    Merlin
    Maître des clés

    Le PGCD et le PPCM, mes cauchemars de collégien !

    😉

    #75544
    bebarth
    Maître des clés

    Le PGCD et le PPCM, mes cauchemars de collégien !

    Je crois même qu’on apprend ça en fin de primaire…

    @+
    😎

    #75545
    bebarth
    Maître des clés

    Voici une autre version avec moins de problèmes…

    Elle est où cette version ???

    @+
    😎

    #75547
    michel c.
    Participant

    Oups, j’ai oublié le lien…

     

    LIEN

    #75550
    bebarth
    Maître des clés

    Voici 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.
    #75554
    Merlin
    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é…

    🙂

    #75555
    michel c.
    Participant

    Merci beaucoup, ça fonctionne bien pour avoir des fractions simplifiables, il y a par contre parfois le numérateur = au dénominateur

     

    LIEN

    • Cette réponse a été modifiée le il y a 4 semaines par michel c..
    #75557
    bebarth
    Maître des clés

    bonjour,

    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…

    @+
    😎

    #75558
    michel 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

    #75561
    michel c.
    Participant

    Re-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…

    LIEN

    Merci

    #75574
    bebarth
    Maître des clés

    bonjour,

    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() car this.getField("Result").value = ""; provoque une erreur. Il faut donc remplacer (2 fois) cette ligne par this.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.
    #75581
    michel c.
    Participant

    Merci 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

    #75582
    bebarth
    Maître des clés

    bonjour,
    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 ?

    @+
    😎

    #75583
    michel c.
    Participant

    La touche entrée ne marche pas. L’expression régulière marche nickel.

    Je n’ai pas d’erreur à la console.

    #75584
    Merlin
    Maître des clés

    Bonjour

     

    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.
    #75586
    michel c.
    Participant

    Ce n’est pas ce qu’a fait BB dans sa proposition ?

    if (event.commitKey==2) Verif();

    #75587
    Merlin
    Maître des clés

    Oui, 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.

    😉

    #75588
    bebarth
    Maître des clés

    Voici 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.
    #75590
    michel c.
    Participant

    Merci 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.
    #75592
    bebarth
    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.
    #75594
    michel c.
    Participant

    Pourtant 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.
    #75598
    Merlin
    Maître des clés

    Chez 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.
    #75603
    bebarth
    Maître des clés

    bonjour,
    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é.

    @+
    😎

    #75604
    michel c.
    Participant

    Je 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 !

    #75605
    Merlin
    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 :

    1. event : Généralement, c’est un objet représentant un événement (ex : keydown, click, etc.).
    2. commitKey : Ce n’est pas une propriété standard des objets event. Cela signifie qu’elle a été ajoutée dynamiquement.
    3. Valeur 13 : Ce nombre correspond au code ASCII/Unicode de la touche Entrée (Enter).
    #75606
    bebarth
    Maître des clés

    Valeur 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’avec event.commitKey = 13;.

    @+
    😎

    #75607
    Merlin
    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.

    😉

    #75608
    bebarth
    Maître des clés

    Je fais évoquer le sujet sur le forum Adobe (plus tard) on verra si on a une réponse…

    @+
    😎

    #75609
    michel c.
    Participant

    Effectivement, 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.

    #75626
    bebarth
    Maître des clés

    Je 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

    @+
    😎

    #75641
    bebarth
    Maître des clés

    La discussion a été très rapide !

    @+
    😎

    #75642
    michel c.
    Participant

    Oui, 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..
    #75644
    michel c.
    Participant

    J’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.
    #75649
    Merlin
    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 😉

    #75650
    bebarth
    Maître des clés

    bonjour,
    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.

    @+
    😎

    #75651
    bebarth
    Maître des clés

    Avec event.change (en script de touches personnalisé) on peut détecter la plupart des touches appuyées sauf pour les tabulations, les flèches, …

    @+
    😎

Affichage de 40 réponses de 1 à 40 (sur un total de 40)
  • Vous devez être connecté pour répondre à ce sujet.