Foros del Web » Programando para Internet » PHP »

bcsqrt() no funciona

Estas en el tema de bcsqrt() no funciona en el foro de PHP en Foros del Web. He hecho un scrip el cual depende en gran medida de un calculo de dicha funcion. El hecho es que en local me funciona pero ...
  #1 (permalink)  
Antiguo 08/02/2005, 04:50
Avatar de Durgeoble  
Fecha de Ingreso: marzo-2003
Mensajes: 462
Antigüedad: 21 años, 1 mes
Puntos: 2
bcsqrt() no funciona

He hecho un scrip el cual depende en gran medida de un calculo de dicha funcion.
El hecho es que en local me funciona pero al subirlo me dice que la funcion no esta definida (PHP4).
¿Como podria substituir dicha funcion por otra que me sacara la raiz cuadrada de un numero?
El scrip es este:
Código PHP:
<html>
<head>
<title>prueba</title>
</head>
<style type="text/css">
.normal { color: green;}
.ganador { color: blue; }
.perdedor { color: red; }
div { border: 2; background-color: gray;}
.bracket { height: 100%; top: 0px; margin: auto;}
td { margin-top: 0px; padding: auto;}
table {margin: 0px; padding: 0px; }
</style>
<body>
<?
$clan
=array('Durgeoble','Foxtrot','Santi','Malvado','Neo_the_boss','Amon_ra','Obi','Horvs','Pir@','Uniko','Darky','Gutierrez','Kamikace','Pier','Raziel','relleno','participante','jugador','player','estudiante','aleatorio','freeman','gordon','starcraft','superman','batman','tarzan','pitufo','cantante','moro','maestro','metro');

function 
bracket($clan,$rondaactual=1,$totalrondas=0

    
    
$new="<table bgcolor=\"red\"> \n";
$fin="</table> \n";
$cab="<tr><td> \n";
$pie="</td></tr> \n";
/* Lo primero es averiguar cuantas veces se debe ejecutar la funcionse debe ejecutar un numero igual al numero de rondas y este es la raiz cuadrada del numero de participantes */
if (count($clan)>2){$rondas=bcsqrt(count($clan));}
else {
$rondas=1;}
/* Comprobamos si es la primera vez que se ejecuta la funcion comprobando si el valor de $totalrondas es 0 de lo contrario cerramos la tabla abierta anteriormente y reejecutamos la funcion */
if ($totalrondas==0) { $totalrondas=$rondas;}
else {echo 
"</td></tr> </table> </td>";}
    
/* cada ronda se situa en una nueva columna, asi pues escribimos una nueva columna por cada ronda */
echo " <td> <table class=\"bracket\">  $cab \n";
echo 
"<span>Ronda $rondaactual</span> $pie";


    
/* sabiendo eso le pasamos el numero de iteracciones */
for ($i=0;$i<=$rondas;$i++) {
    
    
/* ahora en cada ronda se debe ejecutar un combate entre cada dos partcipantes eso hace un total de iteracciones de la mitad de participantes */
    
$partidas=(count($clan)/2);

/*nos aseguramos de que el numero no bajara de 1*/
    
if (count($clan)==1) { $partidas=1;}
    
/* igual que antes ejecutamos la accion un numero de veces igual al de encuentros */
    
for ($i=0;$i<$partidas;$i++) { 
        if (
$i==0) {$encuentro=0;}
        else {
$encuentro=($i*2);}
        
/* sacamos dos participantes cada vez */
        
$participantes=array_slice($clan,$encuentro,2);
        
$puntuacion1=rand(1,5);
        
$puntuacion2=rand(1,5);
        
    
    if (
$participantes[0]=="Sin clasificar" or $participantes[1]=="Sin clasificar") { $ganador="Sin clasificar"$estado1="normal"$estado2="normal"$partida="Oponente(s) por decidir"; }
    elseif (
$puntuacion1 == $puntuacion2 ) { $ganador="Sin clasificar"$estado1="normal"$estado2="normal";$partida="Partida por jugar";}
    elseif (
$puntuacion1 $puntuacion2) {$ganador=$participantes[0]; $estado1="ganador"$estado2="perdedor";}
    elseif (
$puntuacion1 $puntuacion2) {$ganador=$participantes[1]; $estado1="perdedor"$estado2="ganador";}
    
$ed=$i+1;
    echo 
"$cab <div>Encuentro $ed <br /> \n";
    echo 
"<span class=\"$estado1\"> {$participantes[0]} </span> vs <span class=\"$estado2\"> {$participantes[1]} </span> <br />\n"
    if (
$partidas==0) {$vencedor=$ganador;}
    else {
$vencedor[]=$ganador;
    if (
$ganador=="Sin clasificar") { echo "$partida</div> $pie \n"; }
    else { if (
$rondaactual<$totalrondas) {echo "Vencedor: <span class=\"ganador\">$ganador </span></div> $pie<br />\n";} }}
    }
        
    
/* indicamos la ronda actual */ 
    
if (!isset($rondaactual)){$rondaactual=1;}
    else {
$rondaactual=$rondaactual +1;}
    
    }
    
/* Se comprueba si el numero de participantes aun permite ejecutar una nueva roda, de ser asi la ejecuta, de lo contrario finaliza el torneo declarando el ganador */
    
if (count($vencedor)>=2){bracket($vencedor,$rondaactual,$totalrondas);}
    
/* Comprueba que la partida se ha jugado, de lo contrario cierra la tabla */
    
elseif ($ganador!="Sin clasificar") {echo "vencedor del torneo <span class=\"ganador\">$ganador</span> </div> $pie $fin </td>\n";}
    else {echo 
"$fin";}

    
}
/* abrimos la tabla */
echo "<table><tr> \n";
    
bracket($clan);    
echo 
"</td></tr></table>";
    
?>
    
    </body>
    </html>
Al cual solo le falta cambiar $puntuacion1 y $puntuacion2 pon una consulta a la base de datos con el nombre del participante (esta asi ahora para poder probar mas rapido)
__________________
Todas mis respuestas funcionaran correctamente en aquellos navegadores que respeten los estandares.
  #2 (permalink)  
Antiguo 08/02/2005, 10:50
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Usa simplemente sqrt()

Por otro lado (segun el manual) la funciones BC estan disponibles desde PHP 4.0.4, en las anteriores debes activar una libreria desde el php.ini.

Saludos
  #3 (permalink)  
Antiguo 08/02/2005, 12:54
Avatar de Durgeoble  
Fecha de Ingreso: marzo-2003
Mensajes: 462
Antigüedad: 21 años, 1 mes
Puntos: 2
Gracias, ignoro si la funcion sqrt funciona en el servidor (no es mio) ya habia dicho que de forma local no tenia problemas, sin embargo despues de hacer unas pruebas me he dado cuenta que la funcion era del todo inutiel e innecesaria, habiendo solucionado el problema de otro modo.
PD: si alguien quiere la funcion solo debe pedirmela (la que hay arriba arreglada y modificada es un bracket o sea un sistema de clasificacion y lo he hecho extremadamente sencillo y dinamico.
__________________
Todas mis respuestas funcionaran correctamente en aquellos navegadores que respeten los estandares.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:41.