Valid XHTML     Valid CSS2    

Listing du fichier ds4c_inc.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     
00056     function 
ads4c($nombre) { # arbre de décomposition en somme de 4 carrés
00057     
00058     ######################################################################################
00059     
00060     $dbg 
# 0 en standard, 1 pour debug ou affichage détaillé en cours
00061     
00062     $decomp 
= array() ;
00063     $noeuds 
= array() ;
00064     $labels 
= array() ;
00065     $arcs   
= array() ;
00066     
00067     $nbe    
;
00068     $noeud  
"n".$nombre."_".$nbe ;
00069     $noeuds
[$nbe] = $noeud ;
00070     $labels
[$nbe] = $nombre ;
00071     array_push
($decomp,$noeud) ;
00072     
00073     $txt 
" digraph decomp { \n\n";
00074     
00075     if ($dbg
==1) { pre("cadre") ;
00076     
00077       print(
$nombre : ") ;
00078       print_r
(ds4c($nombre)) ;
00079     
00080     } ; # fin si
00081     
00082       while ((
count($decomp)>0) and ($nbe<100)) {
00083     
00084         $noeud 
array_pop($decomp) ;
00085         if ($dbg
==1) { echo " noeud  $noeud : " ; } ;
00086         $n    
substr($noeud,1,strpos($noeud,"_")-1) ;
00087         $decc 
ds4c($n) ;
00088         if ($dbg
==1) { echo " n ==> $n \n" ; } ;
00089     
00090         list($a
,$b,$c,$d) = $decc ;
00091     
00092         $nbe
++ ;
00093         $nnoeud  
"n".$a."_".$nbe ;
00094         $noeuds
[$nbe] = $nnoeud ;
00095         $labels
[$nbe] = $a ;
00096         $arcs
[$nbe] = $noeud -> $nnoeud ; " ;
00097         if ($a
>1) {
00098            array_push
($decomp,$nnoeud) ;
00099         } # fin si
00100     
00101         $nbe
++ ;
00102         $nnoeud  
"n".$b."_".$nbe ;
00103         $noeuds
[$nbe] = $nnoeud ;
00104         $labels
[$nbe] = $b ;
00105         $arcs
[$nbe] = $noeud -> $nnoeud ; " ;
00106         if ($b
>1) {
00107            array_push
($decomp,$nnoeud) ;
00108         } # fin si
00109     
00110         $nbe
++ ;
00111         $nnoeud  
"n".$c."_".$nbe ;
00112         $noeuds
[$nbe] = $nnoeud ;
00113         $labels
[$nbe] = $c ;
00114         $arcs
[$nbe] = $noeud -> $nnoeud ; " ;
00115         if ($c
>1) {
00116            array_push
($decomp,$nnoeud) ;
00117         } # fin si
00118     
00119         $nbe
++ ;
00120         $nnoeud  
"n".$d."_".$nbe ;
00121         $noeuds
[$nbe] = $nnoeud ;
00122         $labels
[$nbe] = $d ;
00123         $arcs
[$nbe] = $noeud -> $nnoeud ; " ;
00124         if ($d
>1) {
00125            array_push
($decomp,$nnoeud) ;
00126         } # fin si
00127       
# fin tant que
00128     
00129     
00130     if (
$dbg==1) {
00131     
00132        echo " Noeuds " 
;
00133        print_r
($noeuds) ;
00134     
00135        echo " Labels " 
;
00136        print_r
($labels) ;
00137     
00138        echo " Arcs " 
;
00139        print_r
($arcs) ;
00140     
00141        echo " texte de l'arbre : \n\n" 
;
00142     
00143     } ; # fin si
00144     
00145     for (
$ide=1;$ide<=$nbe;$ide++) {
00146       $txt 
.= "   ".$noeuds[$ide].' [label="'.$labels[$ide].'"] '."\n" ;
00147     } # fin pour ide
00148     
00149       $txt 
.= "\n" ;
00150     
00151     for ($ide
=2;$ide<=$nbe;$ide++) {
00152       $txt 
.= "   ".$arcs[$ide]."\n" ;
00153     } # fin pour ide
00154     
00155     $txt 
.= "\n }\n\n" ;
00156     
00157     if ($dbg
==1) { echo $txt ; } ;
00158     
00159     if ($dbg
==1) { finpre() ; } ;
00160     
00161     $ftmp  
tempnam("../wtmp","ads4c") ;
00162     $ftmp1 
$ftmp.".dot" ;
00163     $ftmp2 
$ftmp.".png" ;
00164     file_put_contents
($ftmp1,$txt) ;
00165     
00166     $cmd1 
" dot -T png $ftmp1 -o $ftmp2 " ;
00167     system
($cmd1) ;
00168     $cmd2 
" chmod 644 $ftmp2;
00169     system
($cmd2) ;
00170     
00171     if ($dbg
==1) {
00172      pre_fichier
($ftmp,"cadre") ;
00173     
00174      p
() ;
00175       echo b
("Exécution de ").$cmd1 ;
00176      finp
() ;
00177     
00178     } # fin si
00179     
00180     p
() ;
00181      $img 
"../".substr($ftmp2,strpos($ftmp2,"wtmp")) ;
00182      echo href
($img,img($img,"",800)) ;
00183     finp
() ;
00184     
00185     } # fin fonction ads4c
00186     
00187     ?>

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)