Réduction fraction  (Lu 346 fois) Partager ce sujet Imprimer

1 B


michel c.  22 juin 2021 : 19:58

Bonjour, je suis en train d'essayer de créer un document qui me permettrait de réduire une fraction.
J'ai trouvé un script qui était destiné au web et non à des formulaires pdf.
Je tente de l'adapter pour qu'il fonctionne mais je n'arrive pas à trouver l'erreur....

function simplify(str) {
    var result = '', data = str.split('/'),
    numOne = Number(data[0]),
    numTwo = Number(data[1]);
    for (var i = Math.max(numOne, numTwo); i > 1; i--) {
    if ((numOne % i == 0) && (numTwo % i == 0)) {
        numOne /= i;
        numTwo /= i;
    }
    }
    if (numTwo === 1) {
    result = numOne.toString()
    } else {
    result = numOne.toString() + '/' + numTwo.toString()
    }
    return result
}
this.getField("Text1") = (simplify("4/6") + "<br>");
 
this.getField("Text2") = (simplify(84810,985612));

IP archivée


bebarth  22 juin 2021 : 21:06

bonjour,
Voici une adaptation du script pour Acrobat :
function simplify(str) {
    var result="";
    var data=str.split("/");
    var numOne=Number(data[0]);
    var numTwo=Number(data[1]);
    for (var i=Math.max(numOne,numTwo); i>1; i--) {
        if (numOne%i==0 && numTwo%i==0) {
            numOne/=i;
            numTwo/=i;
        }
    }
    if (numTwo===1)  result=numOne.toString();
    else result=numOne.toString()+"/"+numTwo.toString();
    return result;
}
this.getField("Text1").value=simplify("4/6");
this.getField("Text2").value=simplify("84810/985612");
Je te laisse étudier ça !!!
@+
 :bonjour:

IP archivée


michel c.  22 juin 2021 : 23:28

Merci pour ta réponse, le javascript est nouveau pour moi et j'essaye de me dépatouiller avec votre aide et les différents sites qui traitent du sujet. J'ai l'impression d'avancer mais aussi peut être d'avancer sans maitriser les fondamentaux...J'ai également commandé un ouvrage mais il tarde un peu à arriver...


Bref, tout ça pour dire que j'ai un peu étudié le script modifié et j'ai quelques incertitudes ; voici ce que j'ai compris :




// on déclare la fonction que l'on nomme simplify. pour str je suppose que c'est l'argument à passer à la fonction
function simplify(str) {
// on déclare la variable result et on lui donne une valeur nulle   
    var result="";
// supposition : on déclare la variable data qui sera séparée par un/   
    var data=str.split("/");
// on déclare la variable numOne qui aura comme valeur ...là je sèche   
    var numOne=Number(data[0]);
    var numTwo=Number(data[1]);
//boucle pour chaque valeur de i égal au maximum entre numOne et numTwo et i>1 ...la suite je sèche
    for (var i=Math.max(numOne,numTwo); i>1; i--) {
        if (numOne%i==0 && numTwo%i==0) {
            numOne/=i;
            numTwo/=i;
        }
    }
// si numTwo égal à 1 alors on donne à la variable result la valeur de numOne je suppose
    if (numTwo===1)  result=numOne.toString();
// sinon on donne à la variable result la valeur de numOne puis / puis la valeur de numTwo
    else result=numOne.toString()+"/"+numTwo.toString();
// on met fin à la fonction et on renvoie la valeur result à la fonction simplify
    return result;
}
// on affecte au champ Text1 la valeur 4/6 traitée par la fonction simplify
this.getField("Text1").value=simplify("4/6");
// on affecte au champ Text2 la valeur 84810/985612 traitée par la fonction simplify
this.getField("Text2").value=simplify("84810/985612");


Sinon, j'ai également essayé de déclarer 2 variables avant la déclaration de la fonction pour pouvoir saisir la fraction à simplifier sans avoir à modifier le script (j'ai également crée 2 champs : nombre1 et nombre2 sur ma page)

var numerateur = this.getField(nombre1).value;var denominateur = this.getField(nombre2).value;


J'ai ensuite essayé de modifier la fin du script en mettant :


this.getField("Text1").value=simplify("numerateur/denominateur");


Mais ça ne donne rien...

IP archivée


Rakesh Kumar  23 juin 2021 : 04:55

michel c.

Use this:

var t1 = this.getField ("Number1"). valueAsString;
var t2 = this.getField ("Number2"). valueAsString;

var t3 = t1 + "/" + t2;
this.getField ("Text1"). value = simplify (t3);   

IP archivée


bebarth  23 juin 2021 : 07:50

Hi,
var t1 = this.getField ("Number1"). valueAsString;
var t2 = this.getField ("Number2"). valueAsString;
var t3 = t1 + "/" + t2;
this.getField ("Text1"). value = simplify (t3);
This is one of possibilities, but you can directly write:
this.getField ("Text1"). value = simplify (t1+"/"+t2); // without the t3 variable
or more directly:
this.getField ("Text1"). value = simplify (this.getField ("Number1"). value+"/"+this.getField ("Number1"). value); // without any variable
No need to use valueAsString.

I will be back a bit later to give both of you other ways and to explain the script.
@michel.c: do you quite well speak English ?

@+
 :bonjour:

IP archivée


michel c.  23 juin 2021 : 08:26

It's working. Thank you.
I understand english but i don't speak very well.
I would have liked to find books in French on javascript for pdf forms but this kind of book does not exist, so I have no other choice to learn javascript for pdf than to do it in English ...

IP archivée


bebarth  23 juin 2021 : 09:22

bonjour,
Voici le premier script commenté où tu avais déjà compris certaines choses :
// Déclaration de la fonction "simplify" avec l'argumet "str"
function simplify(str) {
    // Déclaration de la variable "result" vide
    var result="";
    // On découpe la chaine de caractères "str" à chaque "/" pour en faire une table
    // Ici, comme il n'y a qu'un "/" la table comporte 2 éléments (avant et après le "/")
    var data=str.split("/");
    // La variable "numOne" est le premier élément de la table "data" (basé sur 0)
    var numOne=Number(data[0]);
    // La variable "numTwo" est le deuxième élément de la table "data" (basé sur 0)
    var numTwo=Number(data[1]);
    // Boucle à partir de la valeur maxi entre numOne et numTwo jusqu'à 1 avec incrément de -1
    for (var i=Math.max(numOne,numTwo); i>1; i--) {
        // Si le reste de la division numOne÷i ET le reste de la division numTwo÷i sont égal à 0
        // i est un diviseur commun des 2 nombres
        if (numOne%i==0 && numTwo%i==0) {
            // donc on divise numOne par i (-> nouveau nombre numOne pour la boucle)
            numOne/=i;
            // et on divise numTwo par i (-> nouveau nombre numTwo pour la boucle)
            numTwo/=i;
        }
    }
    // Si numTwo = 1 (dénominateur ou diviseur = 1) result = numOne (numérateur ou dividende)
    if (numTwo===1) result=numOne.toString();
    // Sinon return = chaine de caractères numOne+"/"+numTwo
    else result=numOne.toString()+"/"+numTwo.toString();
    // Renvoi de la variable "result"
    return result;
}
// Et on applique la fonction à la chaine de caractères "4/6"
this.getField("Text1").value=simplify("4/6");
// Puis à la chaine de caractères "84810/985612"
this.getField("Text2").value=simplify("84810/985612");

On peut aussi définir une fonction avec plusieurs arguments :
// Fonction avec 2 arguments à placer en script de document
function simplify(numerateur,denominateur) {
    for (var i=Math.max(numerateur,denominateur); i>1; i--) {
        if (numerateur%i==0 && denominateur%i==0) {
            numerateur/=i;
            denominateur/=i;
        }
    }
    if (denominateur===1) result=numerateur.toString();
    else result=numerateur.toString()+"/"+denominateur.toString();
    return result;
}

// Et tu appelles la fonction en script de calcul du champ "Text1"
event.value=simplify(this.getField(nombre1).value,this.getField(nombre1).value);


Je te re-laisse étudier ça et je reviens plus tard.
N'hésite pas à demander si tu ne comprends pas.

@Rakesh Kumar: Do you want a translation of my comments? let me know.

@+
 :bonjour:

IP archivée


Rakesh Kumar  23 juin 2021 : 09:37

@bebarth no, its fine now i am now on this forum for more than 8 months, i am able to understand atleast the scripts, if i don't i use the translator, so its fine ...


many many thanks.

IP archivée


Merlin  23 juin 2021 : 11:48

Bonjour

I would have liked to find books in French on javascript for pdf forms but this kind of book does not exist, so I have no other choice to learn javascript for pdf than to do it in English ...
You should start here: https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/ressources-pdf-javascript/

IP archivée


bebarth  23 juin 2021 : 12:23

...le javascript est nouveau pour moi et j'essaye de me dépatouiller avec votre aide et les différents sites qui traitent du sujet. J'ai l'impression d'avancer mais aussi peut être d'avancer sans maitriser les fondamentaux...J'ai également commandé un ouvrage mais il tarde un peu à arriver...

Il y a une petite quinzaine d'année j'écrivais mon premier post sur ce forum où je disais que je n'y connaissais pas grand chose en JavaScript. Une manière de dire que je n'y connaissais rien du tout !
Pendant une dizaine d'années je n'ai fait que poser des questions lorsque j'en avais besoin et maintenant je répond aux questions.
Tout ça pour dire qu'il ne faut pas te désespérer ! Peut-être un jour répondras-tu aussi aux questions...

Comme toi, j'ai appris tout seul le JavaScript et son intégration dans Acrobat. Le lien fourni par Merlin te sera très utile. Je te conseille également de lire ses tutos : https://www.abracadabrapdf.net/category/ressources-et-tutos/ et de télécharger et étudier les exemples fournis sur son site.
Tu as raison, pour mieux comprendre il faut acquérir quelques notions de base comme les opérateurs par exemple (en français) : https://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Expressions_and_Operators
Pour le JavaScript, tu as aussi un site en anglais que j'utilise fréquemment : https://www.w3schools.com/jsref/default.asp
Pour la création de formulaires, je te conseille de télécharger la dernière version de l'API Reference https://www.adobe.com/go/acrobatsdk_jsapiref qui va être ta bible...
Sans vouloir te décourager tu vas passer des heures à lire, relire et essayer de comprendre certaines propriétés ou méthodes qui ne sont pas si évidentes.
Et c'est sans compter les heures où tu vas essayer d'appliquer ce que tu croyais avoir compris !  :doute:
Mais si tu es passionné, ça va le faire. Il faut insister un peu...  :geek:

Ensuite n'hésite pas à poser des questions sur le forum !
J'espère ne pas t'avoir découragé... Bonne chance !
@+
 :bonjour:

IP archivée


michel c.  23 juin 2021 : 20:46

Bonjour, je ne suis pas découragé, au contraire.
Je suis enseignant et tout a commencé avec le 1er confinement pendant lequel j'ai commencé à utiliser les formulaires pdf afin de faciliter le travail à distance des élève.
J'ai fait acheter pour notre lycée 25 licences d'un logiciel permettant de créer des formulaires pdf afin que d'autres collègues puissent également en profiter.

Au bout d'un an d'utilisation, j'ai découvert de plus en plus de possibilités et depuis quelques mois j'ai commencé à tenter d’intégrer quelques scripts, pour rendre les documents un peu plus interactifs et attractifs.

Mais avec le javascript, c'est l'engrenage, je découvre qu'il y a énormément de possibilités et étant de nature curieuse, j'ai envie d'en apprendre toujours un peu plus...
En tout cas, je trouve que vous faites un travail admirable sur ce forum et c'est extrêmement agréable de disposer d'une aide aussi précieuse.

IP archivée