Exemple 4-1-3 «Input d'un entier entre 2 et 99'999'999» - Script PHP

Initiation à la programmation avec le langage PHP, §4 Formulaire HTML

Décomposition en facteurs premiers

Input

L'entrée des données se fait généralement par un formulaire HTML. Il faut créer deux fichiers:

  1. Le questionnaire HTML qui permet de saisir les données et de les envoyer au serveur.
  2. Le traitement PHP qui recueille les données, effectue les calculs et retourne les résultats au navigateur.

1. Le formulaire HTML

Pour accéder à l'exemple de formulaire, cliquer sur le lien donné ci-dessous. C'est dans le formulaire que se trouve le bouton d'envoi qui lance l'exécution du script PHP. Lorsque le formulaire est affiché dans votre navigateur, pour voir son code HTML, appelez "Afficher le code source de la page" dans votre navigateur, ce qui, selon l'environnement, peut s'obtenir avec le menu contextuel (bouton droit de la souris).

Dans le code HTML, remarquer que <form method="POST" action="xxx.php"> contient le nom xxx du fichier PHP chargé du dépouillement.

Formulaire de l'exemple 4-1-3

2. Le traitement PHP

Le code PHP est donné ci-dessous.

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name="viewport"
	content="width=device-width, initial-scale=1.0">
<meta name="robots" content="NoIndex,NoFollow">
<title>Traitement de l'exemple 4-1-3</title>
</head>
<body>
<h1>Traitement de l'exemple 4-1-3</h1>
<h2>Input d'un entier entre 2 et 99'999'999</h2>
<h3>Décomposition en facteurs premiers</h3>

<?php
/*
	Acquisition des données
*/
$n = filter_input(INPUT_POST, 'n',
	FILTER_VALIDATE_INT);

/*
	Validation des données et
	traitement des erreurs d'input
*/
if(!is_numeric($n)){
	echo "<h2>Erreur d'input</h2>";
	echo "<p><b>Nombre à décomposer en facteurs 
		premiers</b>: <i>un nombre entier entre 2
		et 99999999 (jusqu'à 8 chiffres) est
		attendu.</i></p>";
	echo '</body></html>';
	exit;
}

/*
	Affichage des données
*/
echo "<p>Nombre entier donné: "
	.$n
	."</p>";

/*
	Calculs et affichage du résultat
*/
$n0 = $n;
$p = 2;
$suivant = false;
echo '<p>Forme factorisée: ';
while ($n > 1) {
	$e = 0;
	while ($n % $p == 0) {
		$n = $n / $p;
		$e++;
	}
	if ($e >= 1) {
		if ($suivant) {
			echo ' * ';
		} else {
			$suivant = true;
		}
		echo $p;
		if ($e > 1) {
			echo '^'.$e;
		} elseif ($p==$n0){
			echo " est premier.";
		}
	}
	$p++;
}
echo '</p>';
?>
</body>
</html>

Explications

  • Le nombre n donné est divisé par p=2 autant de fois que cela est possible; durant cette activité, on compte le nombre e de fois que le facteur p est contenu dans n; on affiche 2^e.
  • Le nombre n donné est divisé par p=3 autant de fois que cela est possible; durant cette activité, on compte le nombre e de fois que le facteur p est contenu dans n; on affiche 3^e.
  • Puisque maintenant n n'est divisible ni par 2, ni par 3, le reste de la division de n par 4 est nul; ainsi seuls des diviseurs p premiers peuvent apparaître.
  • Poursuivre avec p=5, etc, tant que n>1. Le processus s'arrête nécessairement, car la plus grande valeur possible de p est n.
  • Si e==0, le facteur p^0 n'est pas affiché;
    si e == 1, affiche p au lieu de p^1;
    si e >= 2, affiche p^e.
  • Au premier facteur p^e affiché, la variable «suivant» a la valeur booléenne «faux»; l'expression p^e est affichée sans être précédée d'une étoile.
  • Pour le deuxième facteur p^e et les suivants, la variable «suivant» a la valeur logique «vrai»; alors une étoile est écrite avant d'afficher p^e.
  • Il est préférable d'écrire «if ($suivant)» plutôt que «if ($suivant == true)».
Contact |  Accueil   >   PHP   >   Initiation