Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Frameworks y PHP orientado a objetos (http://www.forosdelweb.com/f68/)
-   -   Ayuda con esta clase (http://www.forosdelweb.com/f68/ayuda-con-esta-clase-269510/)

fabricioeche 10/02/2005 06:13

Ayuda con esta clase
 
Hola amigos:
Si alguien me puede ayudar. Mi problema es que quiero hacer un clase que contenga, por un lado un arreglo de elementos, de los cuales no sé cuántos son, y por el otro la cantidad de esos elementos.
es decir que la clase sería de la forma:

Código:

class Cola{
        var $elem;
        var $cant;

        function crear(){
        $this->$cant=0;
        }
        function vacia(){
        if ($this->$cant==0)
                return true;
                else return false;
        }
        function insertar($x){
        $this->$cant=$this->$cant+1;
        $num=$this->$cant;
        $this->$elem[$num]=$x;
        }
        function mostrar(){
        if ($this->vacia())
                echo "No existen elementos para mostrar<br>";
                else
                {
                for ($i=1;$i<$this->$cant;$i++)
                {
                        echo $this->$elem[$i]."<br>";
                }//fin del for
                }
        }
}//fin del class

Luego creo la función crear() para incializar la cantidad de elementos. La función vacia() es para saber si está vacio el arreglo. Por último la función insertar no me está andando y cuando quiero mostrar los elementos lo hago de este modo:

Código:

$num=2;
$cola= new Cola;
$cola->crear();
for ($ii=0;$ii<3;$ii++)
{
$cola->insertar($num);
$num++;
}
echo "LISTO<br>";
$cola->mostrar();

Pero me muestra lo siguiente:

LISTO
4
4
4

Y debería mostrar
LISTO
2
3
4

¿Qué es lo que está mal? AYUDA por favor...

josemi 10/02/2005 06:20

Hola,

No es $this->$cant, sino $this->cant, sin la segunda $. Lo mismo para el resto de accesos a las propiedades.

Luego tambien hay otras cosas de la logica de la clase que yo las haria de otra forma, como usar foreach, usar [] para insertar al final de la cola, etc.

Salduos.

fabricioeche 10/02/2005 14:14

Gracias por tu ayuda. Me gustaría que me dijeras cómo hacerlo mejor ya que soy nuevo en esto y no entiendo cómo hacerlo bien.

Appletalk 10/02/2005 15:30

Si es una cola, por que no usar un array y shift/unshift?

fabricioeche 10/02/2005 15:50

Ya lo arreglé
 
Ya lo pude arreglar. Usé lo siguiente y quedó de primera:

Código:

class Cola{
        var $elem=array();
        var $cant;

        function crear(){
        $this->cant=0;
        }
        function vacia(){
        if ($this->cant==0)
                return true;
                else return false;
        }
        function insertar($x){
        $this->cant=$this->cant+1;
        /*$num=$this->cant;
        $this->elem[$num]=$x;
        */
        array_push($this->elem,$x);

        }
        function suprimir(&$x){
        if ($this->vacia())
                echo "No existen elementos para suprimir<br>";
                else {$x=array_shift ($this->elem);
                $this->cant--;
                }
               
        }
        function mostrar(){
        //echo "Total:".array_count_values($this->elem);
        if ($this->vacia())
                echo "No existen elementos para mostrar<br>";
                else
                {
                for ($i=0;$i<$this->cant;$i++)
                {
                        //echo $this->elem[$i]."<br>";
                        foreach( $this->elem[$i] as $valor )
                          echo "Valor: $valor<br>\n";

                }//fin del for
                }
        }
}//fin del class
//$num=2;
$num=array(55,20,10);
$cola= new Cola;
$cola->crear();
for ($ii=0;$ii<3;$ii++)
{
$cola->insertar($num);
$num++;
}
echo "LISTO<br>";
$cola->mostrar();
echo "SUPRIMIR <BR>";
$cola->suprimir($m);
echo "Elem. Suprimido: $m <br>";
echo "MOSTRAR<br>";
$cola->mostrar();

Y me quedó como yo quería.
Gracias a todos por colaborar.

fabricioeche 10/02/2005 15:52

Lo que estoy haciendo es una simulación de una estación de servicio y por eso necesitaba una cola.

jmaribau 12/02/2005 16:35

Yo lo haria de esta manera.

Código:

<?php
class Cola{
    var $elem=array();

    // Devuleve el numero de elementos de la cola
    function vacia(){
      return (count($this->element)==0);
    }

    funcion elementos(){
        return (count($this->element));
    }

    // Inserta elemento al final de la cola y devuelve
    // el numero de elementos actuales en la cola
    function insertar($x){
        return (array_push($this->elem,$x));
    }

    // Quita elemento del principio de la cola y devuelve
    // dicho elemento.
    function suprimir(){
        return (array_shift ($this->elem));
    }

    // Lista el contenido de la cola, pasandole un string
    // y un separador
    function mostrar($str,$sep){
        $out = NULL;         
        foreach ($this->elem as $val) {
            $out .= $str.$val.$sep;
        }
        return ($out);
    }
}


$num  = array(55, 20, 10);
$cola = new Cola();

foreach ($num as $val) {
    echo ('Insertado elemento núm '.$cola->insertar($val).' : '.$val.'<br />');
}
echo 'LISTO<br/>';
echo $cola->mostrar('Valor:',"<br />\n");

echo "SUPRIMIR <br />";
echo 'Elem. Suprimido: '.$cola->suprimir().'<br />';
echo "MOSTRAR<br />";
echo $cola->mostrar('Valor:',"<br/>\n");

?>

Y me quedó como tu lo neccesitas.


La zona horaria es GMT -6. Ahora son las 05:08.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.