Comunidad PHPeros
Lenguajes => PHP => (POO) Programación Orientada a Objetos => Mensaje iniciado por: Marcus en 14 de Abril de 2011, 00:02:24 am
-
Hola chicos!
Viendo éste (http://www.phperos.net/foro/index.php?topic=7435.0) tema me ha entrado interés en hacer algo así, finalmente después de 3 días programando he terminado.
Sin más, el código:
<?php
class Ecuacion{
private $Terminos = array();
public $Resultado;
public $PrimerMiembroA;
public $SegundoMiembroA;
public $PrimerMiembroC;
public $SegundoMiembroC;
public function __construct($PrimerMiembro, $SegundoMiembro){
$PrimerMiembro = str_replace(" ", "", $PrimerMiembro);
$SegundoMiembro = str_replace(" ", "", $SegundoMiembro);
if($PrimerMiembro{0} != "-" && $PrimerMiembro{0} != "+"){
$PrimerMiembro = "+".$PrimerMiembro;
}
if($SegundoMiembro{0} != "-" && $SegundoMiembro{0} != "+"){
$SegundoMiembro = "+".$SegundoMiembro;
}
$this->PrimerMiembroA = $PrimerMiembro;
$this->SegundoMiembroA = $SegundoMiembro;
}
private function ProcesarTerminos($Miembro, $LadoMiembro, $Signo){
switch($Signo){
case "+":
$SignoContrario = "-";
$SignoArray = 1;
break;
case "-":
$SignoContrario = "+";
$SignoArray = 0;
break;
}
$array = explode($Signo, $Miembro);
foreach($array as $explode){
if(strstr($explode, $SignoContrario) == true){
$pos = strpos($explode, $SignoContrario);
$delete = substr($explode, $pos);
$explode = str_replace($delete, "", $explode);
}
if($explode{0} == "x"){
$explode = "1x";
}
if($explode != ""){
if(stristr($explode, "x") == true){
$this->Terminos[] = array("valor" =>intval(str_ireplace("x", "", $explode)), "variable" => 1,"signo" => $SignoArray, "miembro" => $LadoMiembro);
} else {
$this->Terminos[] = array("valor" => intval($explode),"variable" => 0,"signo" => $SignoArray,"miembro" => $LadoMiembro);
}
}
}
// (Valor, Variable, ¿Es positivo?, Miembro)
}
public function AlmacenarTerminos(){
$this->ProcesarTerminos($this->PrimerMiembroA, 1, "+");
$this->ProcesarTerminos($this->PrimerMiembroA, 1, "-");
$this->ProcesarTerminos($this->SegundoMiembroA, 2, "+");
$this->ProcesarTerminos($this->SegundoMiembroA, 2, "-");
for($i = 0; $i <= count($this->Terminos); $i++){
if($this->Terminos[$i]['signo'] == 1){
$SignoContrario = 0;
$Signo = "+";
} else {
$SignoContrario = 1;
$Signo = "-";
}
if($this->Terminos[$i]['variable'] == 1 && $this->Terminos[$i]['miembro'] == 2){
$this->Terminos[$i]['miembro'] = 1;
$this->Terminos[$i]['signo'] = $SignoContrario;
} elseif($this->Terminos[$i]['variable'] == 0 && $this->Terminos[$i]['miembro'] == 1){
$this->Terminos[$i]['miembro'] = 2;
$this->Terminos[$i]['signo'] = $SignoContrario;
}
}
}
public function DeterminarResultado(){
$a = array();
$aa = array();
for($i = 0; $i < count($this->Terminos); $i++){
if($this->Terminos[$i]['variable'] == 1){
if($this->Terminos[$i]['signo'] == 0){
$a[] = intval("-".$this->Terminos[$i]['valor']);
} else {
$a[] = $this->Terminos[$i]['valor'];
}
}
}
for($i = 0; $i < count($this->Terminos); $i++){
if($this->Terminos[$i]['variable'] == 0){
if($this->Terminos[$i]['signo'] == 0){
$aa[] = intval("-".$this->Terminos[$i]['valor']);
} else {
$aa[] = $this->Terminos[$i]['valor'];
}
}
}
$this->PrimerMiembroC = array_sum($a)."x";
$this->SegundoMiembroC = array_sum($aa);
$amm = array_sum($a);
if(is_int($this->SegundoMiembroC/$amm)){
$this->Resultado = "x = ".$this->SegundoMiembroC/$amm;
} else {
$this->Resultado = "x = ".$this->SegundoMiembroC."/".$amm;
}
}
}
$ecu = new Ecuacion("4x-4 - 2", "-3x -8x -3"); //(Primer termino, segundo termino
$ecu->AlmacenarTerminos();
$ecu->DeterminarResultado();
echo $ecu->PrimerMiembroA."=".$ecu->SegundoMiembroA."<br />";
echo $ecu->PrimerMiembroC."=".$ecu->SegundoMiembroC."<br />";
echo $ecu->Resultado;
?>
Que tal?, que les parece?
-
Muy Bien (se nota que trabajastes ;)) Pero Intenta explicar un poco mas tu Codigo un saludo :)
-
Muy Bien (se nota que trabajastes ;)) Pero Intenta explicar un poco mas tu Codigo un saludo :)
Muchas gracias!
Vale, ahora lo explico.
-
Muy bien, te llevas un +1 por el código.
Cuando llegue a mi casa lo pruebo y te digo, pero el uso d elas variables y los objetos es perfecto.
Saludos
-
Por lo poco que probé, he visto que funciona y te felicito por ello, pero no me agrada como manejas los atributos de la clase. Hay muchos atributos innecesarios y que a mí parecer y según lo que he estudiado, rompen el esquema de una programación orientada a objetos pura.
-
Por lo poco que probé, he visto que funciona y te felicito por ello, pero no me agrada como manejas los atributos de la clase. Hay muchos atributos innecesarios y que a mí parecer y según lo que he estudiado, rompen el esquema de una programación orientada a objetos pura.
Muchas gracias :)
Me podrías decir cuales atributos son incorrectos/innecesarios? Es que yo estoy empezando con POO y la verdad es que quiero aprender correctamente