Algorithme d'euclide ou divisions succèssives : calcule du pgcd en bonne forme !

0/5 (5 avis)

Vue 16 771 fois - Téléchargée 326 fois

Description

Salutations ! Je vous présente ce code (qui est ma première contribution pour phpcs).

je l'ai codé suite à un cours sur le PGCD (Plus Grand Commun Diviseur) en classe de 3ème.

J'ai regardé les sources sur la question et je me suis aperçu qu'aucune ne rédigeait comme notre professeur nous l'a demandée...

Voici donc ma source basée sur mes connaissances !

Source / Exemple :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Algorithme d'Euclide</title>
</head>
<body>
<fieldset>
<legend><b>Données</b></legend>
<form method="get"> <!--début du formulaire méthode get On affiche les nombres déjà entrés au cas ou il y a une faute de frappe que l'utilisateur veille modifier! -->
  Nombre n°1 :
  <input type="text" name="nbr1" id="nbr1" value="<?php if(isset($_GET['nbr1'])) echo $_GET['nbr1']; ?>" />
  <br />
  Nombre n°2 :
  <input type="text" name="nbr2" id="nbr2" value="<?php if(isset($_GET['nbr2'])) echo $_GET['nbr2']; ?>" />
  <br />
  <input type="submit" value="Calculer !" />
</form>
</fieldset>
<?php
##Euclide nous dit qu'il faut diviser le nombre le plus grand par le plus petit donc c'est chose faite !##
if(isset($_GET['nbr1']) && isset($_GET['nbr2'])) //pour ne pas exécuter le script pour rien ;)
{
	if($_GET['nbr1'] >= $_GET['nbr2'])
	{
	$nbr1 = $_GET['nbr1'];
	$nbr2 = $_GET['nbr2'];
	}
	else
	{
	$nbr1 = $_GET['nbr2'];
	$nbr2 = $_GET['nbr1'];
	}
?>
<fieldset>
<legend><b>Résultat</b></legend>
<!--Affichage de la rédaction-->
PGCD(
<?=$nbr1?>
;
<?=$nbr2?>
)<br />
   On utilise l'algorithme d'Euclide<br />
       Et on regroupe les résultats dans un tableau.
<center>
  <table>
    <thead>
      <!-- En-tête du tableau -->
      <tr>
        <th>Dividende</th>
        <th>Diviseur</th>
        <th>Reste</th>
      </tr>
    </thead>
    <tfoot>
      <!-- Pied de tableau -->
      <tr>
        <th>Dividende</th>
        <th>Diviseur</th>
        <th>Reste</th>
      </tr>
    </tfoot>
    <tbody>
      <!-- Corps du tableau -->
      <?php
   $dividende = $nbr1; // le dividende est le premier nombre (nbr1/nbr2 = résultat entier +reste)
   $diviseur = $nbr2; //le diviseur est donc le second nombre
   $reste = $nbr1%$nbr2; //Opération de modulo pour obtenir le reste !
   echo "<tr>
   			<td>$dividende</td>
			<td>$diviseur</td>
			<td>$reste</td>
		</tr>"; //Affichage
   while($reste != 0) // On fait l'opération qui suit dans une boucle
   {
   /*On décale : le reste devient le diviseur et le diviseur devient le dividende */
   $dividende = $diviseur;
   $diviseur = $reste;
   echo "<tr>
   			<td>$dividende</td>
			<td>$diviseur</td>"; //affichage
   $reste = $dividende%$diviseur; //Modulo
   echo "<td>$reste</td>
	</tr>"; //affichage
   }
   ?>
    </tbody>
  </table>
</center>
<!--Fin de la rédaction-->
Or, dans l'algorithme d'Euclide le PGCD est le dernier reste non nul.<br />
PGCD(
<?=$nbr1?>
;
<?=$nbr2?>
)
= <?=$diviseur?>
</fieldset>
<?
}
?>
</body>
</html>

Conclusion :


Ce script n'est pas optimisé mais le sera bientôt (?)
L'exemple en ligne ici : http://phenix-aventure.fr/euclide.php

Interceptor alias Canibale

Codes Sources

A voir également

Ajouter un commentaire Commentaires
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
10 févr. 2007 à 11:37
Oui peut être ici dans le cas ou tu ouvre une balise Php pour afficher chaque variable. Ca a beau être plus rapide si TheSin dit que c'est pas conseillé alors je pense que tu devrais oublier ça.
Le plus rapide pour afficher des chaines dynamiques c'est avec echo et les virgules sinon.
cs_canibale Messages postés 33 Date d'inscription mardi 23 mai 2006 Statut Membre Dernière intervention 28 février 2009
8 févr. 2007 à 17:47
Ok merci (pourtant dans mon livre ou j'ai appris php ils disaient que <?=$variable?> était plus rapide que <?php echo $variable; ?>
TheSin Messages postés 331 Date d'inscription mardi 12 novembre 2002 Statut Membre Dernière intervention 10 février 2009
8 févr. 2007 à 10:35
sympa le code, ça faisait longtemps que j'avais plus vu de PGCD lol
optimisation:
<?=$nbr1?> => Déconseillé
<?php echo $nbr1; ?> => Mieux ;)

idem pour tous tes <? à remplacer par <?php , car c'est aussi la balise ouvrante XML, voire d'autres encore
revoit aussi un peu xhtml, je suis certain qu'il ne passe pas à la validation (manque d'attributs principallement).
A par ça j'ai rien remarqué d'autres, j'ai juste regardé en vitesse. ;-)
cs_canibale Messages postés 33 Date d'inscription mardi 23 mai 2006 Statut Membre Dernière intervention 28 février 2009
7 févr. 2007 à 16:18
Surement les profs qui ne font pas faire la rédaction pareil...

Je pense que la récursivité monte un peu le niveau de la source voir la rend plus complexe pour les débutants... Une boucle étant plus simple !

Merci pour ton commentaire ;)
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
7 févr. 2007 à 16:06
Salut,

Il existe pas mal de source traitant du PGCD, j'en avais moi même posté une ( conforme au recomandation de mon prof )
C'est dommage que ta source ne fasse pas intervenir la recursivité.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.