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 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 == || $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)