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 à la page principale de (gH)