Retroceder   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

Respuesta
 
Herramientas Desplegado
Antiguo 10-feb-2005, 05:13   #1 (permalink)
fabricioeche está en el buen camino
 
Avatar de fabricioeche
 
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 119
Enviar un mensaje por MSN a fabricioeche
Pregunta 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...
__________________
Fabro

Última edición por fabricioeche; 10-feb-2005 a las 05:18.
fabricioeche está desconectado   Responder Citando
Antiguo 10-feb-2005, 05:20   #2 (permalink)
Colaborador
josemi ha deshabilitado el karma
 
Fecha de Ingreso: noviembre-2002
Mensajes: 9.107
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.
__________________
Josemi

Aprendiz de mucho, maestro de poco.

Localizacion de errores para principiantes en PHP (v 0.4 - 7/4/2003)
Proyecto: Telendro , motor y sistema de bitacoras.
Blog sobre el concurso de posicionamiento: Operación Telendro
josemi está desconectado   Responder Citando
Antiguo 10-feb-2005, 13:14   #3 (permalink)
fabricioeche está en el buen camino
 
Avatar de fabricioeche
 
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 119
Enviar un mensaje por MSN a fabricioeche
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.
__________________
Fabro
fabricioeche está desconectado   Responder Citando
Antiguo 10-feb-2005, 14:30   #4 (permalink)
Appletalk está en el buen camino
 
Fecha de Ingreso: febrero-2004
Mensajes: 221
Si es una cola, por que no usar un array y shift/unshift?
Appletalk está desconectado   Responder Citando
Antiguo 10-feb-2005, 14:50   #5 (permalink)
fabricioeche está en el buen camino
 
Avatar de fabricioeche
 
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 119
Enviar un mensaje por MSN a fabricioeche
Alegría 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.
__________________
Fabro
fabricioeche está desconectado   Responder Citando
Antiguo 10-feb-2005, 14:52   #6 (permalink)
fabricioeche está en el buen camino
 
Avatar de fabricioeche
 
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 119
Enviar un mensaje por MSN a fabricioeche
Lo que estoy haciendo es una simulación de una estación de servicio y por eso necesitaba una cola.
__________________
Fabro
fabricioeche está desconectado   Responder Citando
Antiguo 12-feb-2005, 15:35   #7 (permalink)
jmaribau está en el buen camino
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Alegría

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.

Última edición por jmaribau; 12-feb-2005 a las 15:39.
jmaribau está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 04:32.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93