Foros del Web » Programando para Internet » PHP »

como se usa esta clase?

Estas en el tema de como se usa esta clase? en el foro de PHP en Foros del Web. hola amigos me gustaria me explicarais como se usa esta clase: Código PHP: <? /** * CalculadoraEscons.php * Versi—: 1.1 (calcula el quocient sense arrodonir i ordena els partits per vots abans de calcular) * * Data de creaci—: 2007-05-20 * Autor: Manel Zaera ([email protected]) * Descripci—: Classe que permet calcular els vots corresponents a una llista de partits segons la llei d'Hondt * * Llicncia: Aquest programari es distribueix amb llicncia GNU GPL, la qual podeu consultar a http://www.gnu.org/copyleft/gpl.html * * ...
  #1 (permalink)  
Antiguo 30/06/2011, 20:31
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
como se usa esta clase?

hola amigos me gustaria me explicarais como se usa esta clase:

Código PHP:
<?
/**
* CalculadoraEscons.php
* Versi—: 1.1 (calcula el quocient sense arrodonir i ordena els partits per vots abans de calcular)
*
* Data de creaci—: 2007-05-20
* Autor: Manel Zaera ([email protected])
* Descripci—: Classe que permet calcular els vots corresponents a una llista de partits segons la llei d'Hondt
*
* Llicncia: Aquest programari es distribueix amb llicncia GNU GPL, la qual podeu consultar a http://www.gnu.org/copyleft/gpl.html
*
*
* òs:
*
* $aPartits = array('CiU' => 4367,'PSC' => 2252, 'ERC' => 2131,'ICV' => 403,'PP' => 287,'IPE' => 234);
* $aCalc = new CalculadoraEscons(17,array('CiU','PSC','ERC', 'ICV', 'PP', 'IPE'));
* $aEscons = $aCalc->calcula($aPartits);
*
*/
class CalculadoraEscons {
private 
$iNumEscons 0// Numero de escaños
private $aPartits null// Lista de partidos
private $aEsconsPartits null// Lista de partidos, con los cocientes de los votos de los partidos que han proporcionado algún escaño
private $aTaulaTreball null// Mesa de trabajo, donde se van acumulando los cocientes de los votos de los partidos
private $iNumEsconsProcessats 0// Número de escaños procesados ​​en el actual iteración

/**
* Crea el objeto CalculadoraEscons
*/
public function __construct() {
}

/**
* Calcula els escons que toquen a cada partit
* @param $aVotsPartits Llista de vots de cada partit
* amb el format ['A' => XXXXX, 'B' => XXXXX,...]
* @param $iNumEscons Número d'escons per repartir
*
* @return Llista d'escons per partit, amb el format
* ['A' => 5, 'B =>4,...]
*/
public function calcula($aVotsPartits,$iNumEscons) {
$this->iNumEscons $iNumEscons;
$aPartitsVots array_flip($aVotsPartits);
sort($aPartitsVots);
$this->aPartits array_keys(array_flip($aPartitsVots));
for (
$i=0;($i<$this->iNumEscons && $this->iNumEsconsProcessats $this->iNumEscons);$i++) {
$this->actualitzaTaulaTreball($aVotsPartits,$i+1);
$this->calculaPartitEsco();
}
return 
$this->escons();
}

/*
* Actualitza la taula de treball amb una nova iteraci— de quocients
* @param $aVotsPartits Dades dels vots obtinguts per cada partit
* @param $iDen Denominador del quocient que es calcularˆ
*/
private function actualitzaTaulaTreball($aVotsPartits,$iDen) {
$aClaus $this->aPartits;
foreach (
$aClaus as $aPartit) {
$this->aTaulaTreball[$aPartit][$iDen-1] = $aVotsPartits[$aPartit] / $iDen;
}
}

/*
* Cerca quin partit s'enduu l'esc— en aquesta iteraci—
*/
private function calculaPartitEsco() {
$aClaus $this->aPartits;
$aVotsMax = -1;
$aPartitMax '';
foreach (
$aClaus as $aPartit) {
$aDadesPartit $this->aTaulaTreball[$aPartit];
foreach (
$aDadesPartit as $aQuocientVots) {
if (
$aQuocientVots $aVotsMax) {
$aVotsMax $aQuocientVots;
$aPartitMax $aPartit;
}
}
}
$this->eliminaQuocientPartit($aVotsMax,$aPartitMax);
$this->aEsconsPartits[$aPartitMax][] = $aVotsMax;
}

/*
* Actualitza el valor del quocient de vots d'un partit posant-hi
* el valor -1 per tal que en properes iteracions no sigui tingut
* en consideraci—
* @param $aQuocient Valor dels quocients d'un partit que es vol eliminar
* @param $aPartit Partit al qual pertany el valor del quocient
*/
private function eliminaQuocientPartit($aQuocient,$aPartit) {
$zTrobat false;
$i 0;
while (
$i count($this->aTaulaTreball[$aPartit]) && !$zTrobat) {
$zTrobat $this->aTaulaTreball[$aPartit][$i] ==$aQuocient;
if (
$zTrobat) {
$this->aTaulaTreball[$aPartit][$i] = -1;
}
$i++;
}
}

/*
* Calcula la taula que conté la relaci— de partits i escons
*
* @return Taula amb els escons de cada partit (['A'=>5, 'B'=>4,...])
*/
private function escons() {
$aClaus array_keys($this->aEsconsPartits);
$aEscons = array();
foreach (
$aClaus as $aPartit) {
$aEscons[$aPartit] = count($this->aEsconsPartits[$aPartit]);
}
return 
$aEscons;
}
}
?>
es que intento hacer lo que pone en los comentarios pero da error.. :(
  #2 (permalink)  
Antiguo 01/07/2011, 00:38
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: como se usa esta clase?

Te recomiendo que contactes con Manel Zaera ([email protected]). Salu2
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 01/07/2011, 05:39
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: como se usa esta clase?

acabo de escribirle haber si responde, de todas formas si alguien me ayuda se lo agradezco :P
  #4 (permalink)  
Antiguo 01/07/2011, 05:49
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: como se usa esta clase?

prueba algo así:

Código PHP:
$aPartits = array('CiU' => 4367,'PSC' => 2252'ERC' => 2131,'ICV' => 403,'PP' => 287,'IPE' => 234);
$aCalc = new CalculadoraEscons(17,array('CiU','PSC','ERC''ICV''PP''IPE'));
$aEscons $aCalc->calcula($aPartits);

echo 
'<pre>';
print_r($aEscons);
echo 
'</pre>'
  #5 (permalink)  
Antiguo 01/07/2011, 05:56
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: como se usa esta clase?

da errores, mira:

Código PHP:
WarningMissing argument 2 for CalculadoraEscons::calcula(), called in D:....CalculadoraEscons.php on line 122 and defined in D:.....CalculadoraEscons.php on line 42

Warning
array_keys() [function.array-keys]: The first argument should be an array in D:....CalculadoraEscons.php on line 111

Warning
Invalid argument supplied for foreach() in D:....CalculadoraEscons.php on line 113

Array
(

Las lineas que nombran son estas:

122: $aEscons = $aCalc->calcula($aPartits);
42: public function calcula($aVotsPartits,$iNumEscons) {

111: $aClaus = array_keys($this->aEsconsPartits);

y 113: foreach ($aClaus as $aPartit) {
  #6 (permalink)  
Antiguo 01/07/2011, 06:35
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: como se usa esta clase?

Prueba así:
Código PHP:
$aEscons $aCalc->calcula($aPartits,356); 
  #7 (permalink)  
Antiguo 01/07/2011, 06:37
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: como se usa esta clase?

@rompeguesos, de donde has sacado la clase ?, no tiene documentación(fuera del escueto docblock) ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #8 (permalink)  
Antiguo 01/07/2011, 06:39
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: como se usa esta clase?

:D vale va perfecto, pero una dudilla... que es ese numero que se ha metido? el numero de escaños que hay que ocupar?
  #9 (permalink)  
Antiguo 01/07/2011, 06:40
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: como se usa esta clase?

masterpuppet, de google: CalculadoraEscons.php :D
  #10 (permalink)  
Antiguo 01/07/2011, 09:35
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: como se usa esta clase?

Sí, en teoria es el número de escaños xD

Etiquetas: clase
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 09:09.