1011^arrondir1140titrecréer un texte avecFormule de Machin<br>"   "pi/4 = 4*arctan(1/5)-arctan(1/239)code mathtitretaille-caractère24pxentreeNombre de chiffres 100entreeapproximerPiboutonCalcul de πboutonapproximerPicréer une liste avecDécimalescréer une liste avecπ = 3.tableaucréer une liste aveccolonne1colonne264050018créer un texte avecPour une version plus rapide, utilisez la versio…dans une page web.texte engrashttp://profmath.uqam.ca/~boileau/Nouvelles/Fichi…vrailien de texteet d'adressedans une autre pageInsérer un saut de ligneCréer un paragraphecontenantCréer un tableaupour afficher plusieurs listesavec largeurpixelshauteurinactivéeet taille de policeInsérer un saut de ligneInsérer un saut de lignefixercolonne2àfixercolonne1àsi clic surfaireCréer un boutonaffichantsi on tape 'retour' dansfaireCréer une entréede nomet de contenu initialPour l'objetstylevaleurFinaliser les expressions mathématiquesCréer un titrecontenantMarge gauchepixelsfixerexposantBaseàfixerbaseàpouractions initiales pouractions en boucle pourcreerVecteuravec : n, vecteurNombre, valeurInitialei1vecteurNombrelongueur de1-1ivecteurNombrevaleurNULLEDonner à l'élémentde la listela valeur0vecteurNombrevaleurInitialeDonner à l'élémentde la listela valeurboucleide minà maxavec pasfairevariable localepourestVideavec : vecteurNombreretouri0vecteurNombrelongueur de1-1ivecteurNombreélément numérode la listefauxquitter la fonction (en retournant)sifaireboucleide minà maxavec pasfairevariable localevraipourAjouteravec : n, vecteurNombre, vecteurNombre2i0n1-0-1ivecteurNombreivecteurNombreélément numérode la listeivecteurNombre2élément numérode la liste+retenue+sifairesinonivecteurNombreélément numérode la listebase<0fixerretenueà1ivecteurNombreivecteurNombreélément numérode la listebase-Donner à l'élémentde la listela valeurfixerretenueàDonner à l'élémentde la listela valeurboucleide maxà minavec pasfairefixerretenueàvariable localei5 decSuppentreevaleur devaleur absoluearrondir+nbDec10000decSupp+pas10000decSupp+fixernbDecàentreenbDecdecSupp-nullexpression p5valeurNULLE10créer une liste avec l’élémentrépétéfoisvaleurNULLE10créer une liste avec l’élémentrépétéfois1nbDecexposantBase÷+arrondir par excèsvaleurNULLElongueurVecteurcréer une liste avec l’élémentrépétéfoisvaleurNULLElongueurVecteurcréer une liste avec l’élémentrépétéfoisvaleurNULLElongueurVecteurcréer une liste avec l’élémentrépétéfoisvaleurNULLElongueurVecteurcréer une liste avec l’élémentrépétéfois0coeff41coeff-12coeff00valAngle51valAngle2392valAngle0nvecteurNombrevaleurInitialecreerVecteuravec :longueurVecteurvecteurPI0nvecteurNombrevaleurInitialecreerVecteuravec :longueurVecteurvecteurAngle0nvecteurNombrevaleurInitialecreerVecteuravec :longueurVecteurvecteurAngle200icoeffélément numérode la liste0valAnglenvecteurNombrearctangenteavec :ivalAngleélément numérode la listelongueurVecteurvecteurArctannvecteurNombremultiplicateurMultiplieravec :longueurVecteurvecteurArctanicoeffélément numérode la listevaleur absoluesifairesinonicoeffélément numérode la liste0>nvecteurNombrevecteurNombre2Ajouteravec :longueurVecteurvecteurPIvecteurArctannvecteurNombrevecteurNombre2Soustraireavec :longueurVecteurvecteurPIvecteurArctani1+fixeriànvecteurNombremultiplicateurMultiplieravec :longueurVecteurvecteurPI4  0vecteurPIlongueur de1-1ivecteurPIcréer un texte avecivecteurPIélément numérode la listeivecteurPIélément numérode la listelongueur deexposantBase<i0etivecteurPIélément numérode la listelongueur deexposantBase<ivecteurPIcréer un texte avec0ivecteurPIélément numérode la listeDonner à l'élémentde la listela valeurrépétertant quefairecréer un texte avectempPIivecteurPIélément numérode la listefixertempPIàsifaireDonner à l'élémentde la listela valeurcréer une liste avecDécimalescréer une liste avecπ = 3.0nbDecdecSupp-1sifairesinoni0=sifairesinon sifairesinoni50reste de÷0=créer un texte avecsPItempPIidans le texteobtenir la lettre en positioncréer un texte aveci49- - icolonne1sPIcolonne2 fixersPIàEmpiler la valeurdans la listeEmpiler la valeurdans la listefixersPIài5reste de÷0=créer un texte avecsPItempPIidans le texteobtenir la lettre en position fixersPIàcréer un texte avecsPItempPIidans le texteobtenir la lettre en positionfixersPIàsPIlongueur de0>créer un texte aveci1+i50reste de÷- - i1-colonne1sPIcolonne2Empiler la valeurdans la listeEmpiler la valeurdans la listecréer une liste aveccolonne1colonne2tableauAfficher plusieurs listesdans le tableausifaireboucleide minà maxavec pasfairefixercolonne2àfixercolonne1àboucleide minà maxavec pasfairefixertempPIàfixersPIàrépétertant quefairefixeriàDonner à l'élémentde la listela valeurDonner à l'élémentde la listela valeurDonner à l'élémentde la listela valeurDonner à l'élémentde la listela valeurDonner à l'élémentde la listela valeurDonner à l'élémentde la listela valeurfixervecteurAngle2àfixervecteurAngleàfixervecteurArctanàfixervecteurPIàfixerlongueurVecteuràfixercoeffàfixervalAngleàfixervaleurNULLEàFixe la valeur deàsifairefixernbDecàfixerreponseàfixerdecSuppàvariable localepourapproximerPi retourpourSoustraireavec : n, vecteurNombre, vecteurNombre2in1-0-1ivecteurNombreivecteurNombreélément numérode la listeivecteurNombre2élément numérode la liste-ivecteurNombreélément numérode la liste0<i0>ivecteurNombreivecteurNombreélément numérode la listebase+i1-vecteurNombrei1-vecteurNombreélément numérode la liste1-Donner à l'élémentde la listela valeurDonner à l'élémentde la listela valeursifairesifaireDonner à l'élémentde la listela valeurboucleide maxà minavec pasfairevariable localepourMultiplieravec : n, vecteurNombre, multiplicateuri0n1-0-1ivecteurNombreélément numérode la listemultiplicateur×retenue+sifairesinonprodbaseprodbase÷arrondir par défautprodretenuebase×-fixerprodàfixerretenueà0fixerretenueàivecteurNombreprodDonner à l'élémentde la listela valeurfixerprodàboucleide maxà minavec pasfairefixerretenueàvariable localepourDiviseravec : n, vecteurNombre, diviseur, vecteurNombre2i00n1-1ivecteurNombreélément numérode la listeretenuebase×+valCourantediviseur÷arrondir par défautvalCouranteleQuotientdiviseur×-ivecteurNombre2leQuotientDonner à l'élémentde la listela valeurfixerretenueàfixerleQuotientàfixervalCouranteàboucleide minà maxavec pasfairefixerretenueàvariable localepourarctangenteavec : valAngle, n, vecteurNombreivalAnglevalAngle×30nvecteurNombrevaleurInitialecreerVecteuravec :nvecteurNombre0nvecteurNombrevaleurInitialecreerVecteuravec :nvecteurAngle1BUG : aAngle est videnvecteurNombrediviseurvecteurNombre2Diviseravec :nvecteurAnglevalAnglevecteurAnglenvecteurNombrevecteurNombre2Ajouteravec :nvecteurNombrevecteurAnglevecteurNombreestVideavec :vecteurAnglepasnvecteurNombrediviseurvecteurNombre2Diviseravec :nvecteurAngleangleCarrevecteurAnglenvecteurNombrediviseurvecteurNombre2Diviseravec :nvecteurAnglekvecteurAngle2sifairesinonsigne0nvecteurNombrevecteurNombre2Ajouteravec :nvecteurNombrevecteurAngle2nvecteurNombrevecteurNombre2Soustraireavec :nvecteurNombrevecteurAngle2k2+1signe-fixersigneàfixerkàrépétertant quefaireCommentairefixersigneàfixerkàfixerangleCarreàvariable locale


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;
  }
}
Exécuter