Activités JavaScript

Somme diviseurs / Nombres parfaits / Nombres amis

Progression dans le TP

Fichier HTML

<form>
  <div>
    <label>
      <input type="radio" id="som-div" name="choix" value="1" checked> Somme diviseurs
    </label>
    <label>
      <input type="radio" id="nbr-par" name="choix" value="2"> Nombres parfaits
    </label>
    <label>
      <input type="radio" id="nbr-amis" name="choix" value="3"> Nombres amis
    </label>
  </div>
  <div>
    <label for="a">A</label>
    <input type="number" id="a" name="a" min="1" max="99999" placeholder="Nombre entre 1 et 99999">
  </div>
  <div>
    <label for="b">B</label>
    <input type="number" id="b" name="b" min="1" max="99999" placeholder="Nombre entre 1 et 99999">
  </div>
  <div>
    <button type="button" id="calc">Calculer</button>
  </div>
  <div>
    <label for="res">Résultat</label>
    <textarea id="res" name="res" readonly></textarea>
  </div>
</form>

Fichier CSS

* {
  box-sizing: border-box;
}

body {
  background-color: #FFD6C0;
  font-family: sans-serif;
  font-size: 12pt;
}

form {
  width: 400px;
  margin: 50px auto;
  padding: 30px;
  background-color: #FFA5A5;
  border-radius: 10px;
}

form > div {
  margin: 10px 0;
}

label {
  display: block;
}

input[type="number"],
textarea {
  width: 100%;
  padding: 10px;
  border-radius: 8px;
  background-color: #EC368D;
  border: none;
  color: #FFD6C0;
  font-size: 12pt;
}

button {
  padding: 10px 30px;
  border: none;
  border-radius: 8px;
  background-color: #440381;
  color: #FFD6C0;
  font-size: 12pt;
  font-weight: bold;
}

Code JavaScript (groupe 8h)

const radSomDiv = document.getElementById("som-div");
const radNbrPar = document.getElementById("nbr-par");
const radNbrAmis = document.getElementById("nbr-amis");
const inpA = document.getElementById("a");
const inpB = document.getElementById("b");
const btnCalc = document.getElementById("calc");
const inpRes = document.getElementById("res");

// fonction appelée lorsqu'on clique sur le bouton Calculer
function btnCalcClicked(e) {
  const choix = radSomDiv.checked * 1 + radNbrPar.checked * 2 + radNbrAmis.checked * 3;
  if (choix == 1) {
    calcSommeDiv();
  }
  //
  // à compléter
  //
}

btnCalc.addEventListener("click", btnCalcClicked);

// fonction qui calcule la somme de diviseur d'un nombre
// sauf lui même
function somdiv(n) {
  let s = 0;
  for (let i = 1; i <= n / 2; i++) {
    if (n % i == 0) {
      s += i;
    }
  }
  return s;
}

// Récupère les données du formulaire 
// Calcule la somme des diviseurs de A et de B
// Puis les affiche
function calcSommeDiv() {
  const a = Number(inpA.value);
  const b = Number(inpB.value);
  const sda = somdiv(a);
  const sdb = somdiv(b);
  inpRes.value = "somdiv(" + a + ") = " + sda + "\nsomdiv(" + b + ") = " + sdb;
}

// Compléter le code précédent, ajouter les fonctions nécessaires pour :
// - Calculer les nombres parfaits situés dans l'intervalle [a, b]
// - Calculer les nombres amis situés dans l'intervalle [a, b]

// NB : si somdiv(n) = n alors n est un nombre parfait
// Exemple : somdiv(6) = 1+2+3 = 6 => 6 est un nombre parfait

// NB : si somdiv(a) = b et somdiv(b) = a alors a, b sont deux nombres amis
// Exemple : somdiv(220) = 284 et somdiv(284) = 220 => 220 et 284 sont deux nombres amis

Code JavaScript (groupe 10h)

// fonction appelée lorsqu'on clique sur le bouton Calculer
function btnCalcClicked(e) {
  const choix = Number(document.f.choix.value);
  if (choix == 1) {
    calcSommeDiv();
  }
  //
  // à compléter
  //
}

document.f.calc.addEventListener("click", btnCalcClicked);

// fonction qui calcule la somme de diviseur d'un nombre
// sauf lui même
function somdiv(n) {
  let s = 0;
  for (let i = 1; i <= n / 2; i++) {
    if (n % i == 0) {
      s += i;
    }
  }
  return s;
}

// Récupère les données du formulaire 
// Calcule la somme des diviseurs de A et de B
// Puis les affiche
function calcSommeDiv() {
  const a = Number(document.f.a.value);
  const b = Number(document.f.b.value);
  const sda = somdiv(a);
  const sdb = somdiv(b);
  document.f.res.value = "somdiv(" + a + ") = " + sda + "\nsomdiv(" + b + ") = " + sdb;
}

// Compléter le code précédent, ajouter les fonctions nécessaires pour :
// - Calculer les nombres parfaits situés dans l'intervalle [a, b]
// - Calculer les nombres amis situés dans l'intervalle [a, b]

// NB : si somdiv(n) = n alors n est un nombre parfait
// Exemple : somdiv(6) = 1+2+3 = 6 => 6 est un nombre parfait

// NB : si somdiv(a) = b et somdiv(b) = a alors a, b sont deux nombres amis
// Exemple : somdiv(220) = 284 et somdiv(284) = 220 => 220 et 284 sont deux nombres amis