Valid XHTML     Valid CSS2    

Listing du fichier lagrange3rec.php

 

00001     <?php
00002     
00003     
######################################################################################
00004     
00005     
function ds4c($nombre) { # décomposition en somme de 4 carrés
00006     
00007     ######################################################################################
00008     
00009     
$dbg
= 0 ; # 0 en standard, 1 pour debug
00010     
00011      # valeur limite : la racine carrée du nombre
00012     
00013     
$racine
= round(sqrt($nombre)) ;
00014     
00015     
$n1
= $racine ;
00016     
00017     
# on boucle sur n1, n2 et n3 seulement,
00018      # n4 s'en déduira
00019      # comme il peut y avoir plusieurs solutions,
00020      # on renvoie ce qu'on a trouvé le plus tot possible
00021     
00022     
while (
$n1>=0) {
00023     
$cn1
= $n1*$n1 ;
00024     
$n2
= $racine ;
00025      while (
$n2
>=0) {
00026     
$cn2
= $n2*$n2 ;
00027     
$n3
= $racine ;
00028      while (
$n3
>=0) {
00029     
$cn3
= $n3*$n3 ;
00030     
$cn4
= $nombre - ($cn1+$cn2+$cn3) ;
00031      if (
$dbg
==1) {
00032      echo
" n1
$n1 n2 $n2 n3 $n3 cn4 $cn4 \n" ;
00033      }
# fin si
00034     
if (
$cn4>=0) {
00035     
$n4
= sqrt($cn4) ;
00036      if (
$dbg
==1) {
00037      echo
" n4 possible
$n4 \n" ;
00038      }
# fin si
00039     
if (
round($n4)==$n4) {
00040      return( array(
$n1
,$n2,$n3,$n4) ) ;
00041      } ;
# fin si
00042     
} ; # fin si
00043     
$n3-- ;
00044      }
# fin tant que sur n3
00045     
$n2-- ;
00046      }
# fin tant que sur n2
00047     
$n1-- ;
00048      }
# fin tant que sur n1
00049     
00050     
return( array(
"?","?","?","?") ) ;
00051     
00052     }
# fin fonction ds4c
00053     
00054     /**
00055      * @param $x noeud en cours de traitement
00056      * @param $labels chaine permettant le renommage des noeud
00057      * @param $arcs chaine permettant la définition des arcs
00058      * @param $cnt suffixe servant à différencier chaque noeud
00059      * @param $no préfixe servant à différencier chaque noeud
00060      * @param $noeudPere Noeud père
00061      */
00062     
function
putInDot($x, &$labels, &$arcs, &$cnt, $no, $noeudPere) {
00063      foreach (
ds4c
($x) as $fin) {
00064     
$noeud
= $no . ($cnt++);
00065     
$labels
.= " $noeud [label = $fin] \n";
00066     
$arcs
.= " $noeudPere -> $noeud\n";
00067     
// Si le nombre trouvé n'est ni un 0 ni un 1 alors on réitère la procédure
00068     
if (!(
$fin == 0 || $fin == 1)){
00069     
putInDot
($fin, $labels, $arcs, $cnt, $no, $noeud);
00070      }
00071      }
00072     }
00073     
00074     
$n
= 635;
00075     
00076     echo
"Decomposition de lagrange de
$n\n";
00077     
print_r
(ds4c($n));
00078     
00079     echo
"code dot associé : \n";
00080     
## 1. Début du fichier
00081     
00082     
$varDot
= "digraph g$n { \n";
00083     
00084     
# Initialisation des variables nécessaires à la fonction putInDot
00085     
$no
= "no_"; // préfixe servant à différencier chaque noeud
00086     
$cnt
= 0; // suffixe servant à différencier chaque noeud
00087     
$arcs
= ""; // Lignes qui permettent de remplacer le nom des noeuds (Ex : no_1) par leur vraie valeur (Ex : 12)
00088     
00089     # Appel de la fonction putInDot sur la racine
00090     
putInDot
($n, $labels, $arcs, $cnt, $no, $n);
00091     
00092     
# ajout du contenu de la définition du graphe
00093     
$varDot
.= $labels; // renommage des noeuds
00094     
$varDot
.= $arcs; // définition des arcs
00095     
00096     
00097     ## 2. Fin du fichier
00098     
00099     
$varDot
.= "} \n";
00100     
00101     echo
$varDot;
00102     
00103     
$fileDot
= "pourDot.txt";
00104     
file_put_contents
($fileDot, $varDot);
00105     echo
"\n vous pouvez consulter le fichier
$fileDot \n";
00106     
00107     
## 3. Exec de la cmd Dot
00108     
00109     
$filePng
= "lagrange.png";
00110     
shell_exec
("dot -T png $fileDot -o $filePng");
00111     
00112     
## 4. Visualisation
00113     
echo
"\n vous pouvez consulter le fichier $filePng \n";
00114     
00115     
system
("eog $filePng");
00116     
00117     
?>

Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.

 

 

retour gH    Retour à la page principale de   (gH)