Logique
Boucles
Math
Texte
Listes
Données
Variables
Fonctions
Programmation
p5.js
Objets web
Propriétés
Formes
Tortue
Apparence
GeoGebra
var canevas, base, exposantBase, x, n, vecteurNombre, valeurInitiale, i, entree, bouton, sortie, nbDec, vecteurNombre2, multiplicateur, diviseur, valAngle, titre, retenue, prod, valCourante, leQuotient, angleCarre, k, signe, vecteurAngle, vecteurAngle2, decSupp, reponse, coeff, longueurVecteur, vecteurPI, vecteurArctan, sPI, tempPI, ii, valeurNULLE, text, tableau, colonne1, colonne2; /** * Fonction exécutée une fois, au départ */ function actions_initiales() { base = Math.round(Math.pow(10, 11)); exposantBase = 11; document.body.style.paddingLeft="40px"; titre=createElement("h1",(String('Formule de Machin<br>') + String(codeMath('" "pi/4 = 4*arctan(1/5)-arctan(1/239)')))); refreshMathJax();stylerObjetPrudent("titre",titre,'taille-caractère','24px'); entree=creerEntreeNommee('Nombre de chiffres ','100'); siRetourPrudent("entree",entree,"approximerPi",approximerPi); bouton=createButton('Calcul de π'); siClicPrudent("bouton",bouton,"approximerPi",approximerPi); colonne1 = ['Décimales']; colonne2 = ['π = 3.']; createSpan("<br>"); createSpan("<br>"); tableau=creerAffichageListes([colonne1, colonne2],640,"PIXELS","INACTIVEE",500,18); createP((String('Pour une version plus rapide, utilisez la version sauvée ') + String(retourneLien((("<b>"+'dans une page web.'+"</b>")),'http://profmath.uqam.ca/~boileau/Nouvelles/Fichiers/machin/machin.html',true)))); createSpan("<br>"); } /** * Fonction exécutée périodiquement, de façon répétée */ function actions_en_boucle() { } /** * Décrire cette fonction… */ function creerVecteur(n, vecteurNombre, valeurInitiale) { var i; for (i = 1; i <= vecteurNombre.length - 1; i += abs(1)) { vecteurNombre[i] = valeurNULLE; } vecteurNombre[0] = valeurInitiale; } /** * Décrire cette fonction… */ function estVide(vecteurNombre) { var i; for (i = 0; i <= vecteurNombre.length - 1; i += abs(1)) { if (vecteurNombre[i]) { return false; } } return true; } /** * Décrire cette fonction… */ function Ajouter(n, vecteurNombre, vecteurNombre2) { var i; retenue = 0; for (i = n - 1; i >= 0; i -= abs(-1)) { vecteurNombre[i] = (vecteurNombre[i] + vecteurNombre2[i] + retenue); if (vecteurNombre[i] < base) { retenue = 0; } else { retenue = 1; vecteurNombre[i] = (vecteurNombre[i] - base); } } } function listsRepeat(value, n) { var array = []; for (var i = 0; i < n; i++) { array[i] = value; } return array; } /** * Décrire cette fonction… */ function approximerPi() { var i; decSupp = 5; reponse = ''; nbDec = decSupp + Math.round(Math.abs(valeurPrudent("entree",entree))); if (!(nbDec <= 10000 + decSupp)) { nbDec = 10000 + decSupp; } fixeValeurPrudent("entree",entree,(nbDec - decSupp)); valeurNULLE = eval('null'); valAngle = listsRepeat(valeurNULLE, 10); coeff = listsRepeat(valeurNULLE, 10); longueurVecteur = Math.ceil(1 + nbDec / exposantBase); vecteurPI = listsRepeat(valeurNULLE, longueurVecteur); vecteurArctan = listsRepeat(valeurNULLE, longueurVecteur); vecteurAngle = listsRepeat(valeurNULLE, longueurVecteur); vecteurAngle2 = listsRepeat(valeurNULLE, longueurVecteur); coeff[0] = 4; coeff[1] = -1; coeff[2] = 0; valAngle[0] = 5; valAngle[1] = 239; valAngle[2] = 0; creerVecteur(longueurVecteur, vecteurPI, 0); creerVecteur(longueurVecteur, vecteurAngle, 0); creerVecteur(longueurVecteur, vecteurAngle2, 0); i = 0; while (coeff[i] != 0) { arctangente(valAngle[i], longueurVecteur, vecteurArctan); Multiplier(longueurVecteur, vecteurArctan, Math.abs(coeff[i])); if (coeff[i] > 0) { Ajouter(longueurVecteur, vecteurPI, vecteurArctan); } else { Soustraire(longueurVecteur, vecteurPI, vecteurArctan); } i = i + 1; } Multiplier(longueurVecteur, vecteurPI, 4); sPI = ''; tempPI = ''; for (i = 0; i <= vecteurPI.length - 1; i += abs(1)) { vecteurPI[i] = (String(vecteurPI[i])); if (vecteurPI[i].length < exposantBase && i != 0) { while (vecteurPI[i].length < exposantBase) { vecteurPI[i] = (String('0') + String(vecteurPI[i])); } } tempPI = String(tempPI) + String(vecteurPI[i]); } colonne1 = ['Décimales']; colonne2 = ['π = 3.']; for (i = 0; i <= nbDec - decSupp; i += abs(1)) { if (i == 0) { } else { if (i % 50 == 0) { sPI = String(sPI) + String(lettreDansTexte(tempPI,i)); colonne1.push(([i - 49,' - ',i].join(''))); colonne2.push(sPI); sPI = ''; } else if (i % 5 == 0) { sPI = [sPI,(lettreDansTexte(tempPI,i)),' '].join(''); } else { sPI = String(sPI) + String(lettreDansTexte(tempPI,i)); } } } if (sPI.length > 0) { colonne1.push(([(i + 1) - i % 50,' - ',i - 1].join(''))); colonne2.push(sPI); } afficherListes([colonne1, colonne2],tableau); } /** * Décrire cette fonction… */ function Soustraire(n, vecteurNombre, vecteurNombre2) { var i; for (i = n - 1; i >= 0; i -= abs(-1)) { vecteurNombre[i] = (vecteurNombre[i] - vecteurNombre2[i]); if (vecteurNombre[i] < 0) { if (i > 0) { vecteurNombre[i] = (vecteurNombre[i] + base); vecteurNombre[(i - 1)] = (vecteurNombre[(i - 1)] - 1); } } } } /** * Décrire cette fonction… */ function Multiplier(n, vecteurNombre, multiplicateur) { var i; retenue = 0; for (i = n - 1; i >= 0; i -= abs(-1)) { prod = vecteurNombre[i] * multiplicateur + retenue; if (prod >= base) { retenue = Math.floor(prod / base); prod = prod - retenue * base; } else { retenue = 0; } vecteurNombre[i] = prod; } } /** * Décrire cette fonction… */ function Diviser(n, vecteurNombre, diviseur, vecteurNombre2) { var i; retenue = 0; for (i = 0; i <= n - 1; i += abs(1)) { valCourante = vecteurNombre[i] + retenue * base; leQuotient = Math.floor(valCourante / diviseur); retenue = valCourante - leQuotient * diviseur; vecteurNombre2[i] = leQuotient; } } /** * Décrire cette fonction… */ function arctangente(valAngle, n, vecteurNombre) { var i; angleCarre = valAngle * valAngle; k = 3; signe = 0; creerVecteur(n, vecteurNombre, 0); creerVecteur(n, vecteurAngle, 1); // 'BUG : aAngle est vide' Diviser(n, vecteurAngle, valAngle, vecteurAngle); Ajouter(n, vecteurNombre, vecteurAngle); while (!estVide(vecteurAngle)) { Diviser(n, vecteurAngle, angleCarre, vecteurAngle); Diviser(n, vecteurAngle, k, vecteurAngle2); if (signe != 0) { Ajouter(n, vecteurNombre, vecteurAngle2); } else { Soustraire(n, vecteurNombre, vecteurAngle2); } k = k + 2; signe = 1 - signe; } }