Foros del Web » Programando para Internet » PHP »

Matemáticas (número sucesivo)

Estas en el tema de Matemáticas (número sucesivo) en el foro de PHP en Foros del Web. Hola! Código PHP: function  escribeRank ( $exp ){ // explico abajo $maxima_exp_hasta_ahora  =  700 ; $z  =  ceil (( $exp / $maxima_exp_hasta_ahora )* 13 );  //  13 Niveles return  ...
  #1 (permalink)  
Antiguo 27/03/2009, 12:35
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 4 meses
Puntos: 56
Matemáticas (número sucesivo)

Hola!

Código PHP:
function escribeRank($exp){
// explico abajo
$maxima_exp_hasta_ahora 700;
$z ceil(($exp/$maxima_exp_hasta_ahora)*13); //  13 Niveles
return $z;
}
// Funcion Rank(Experiencia) //
echo rank(12); // Imprime Nivel 1(Soldado)
echo Rank(300); // Imprime 6 aprox.
echo Rank(469); // Imprime 12(Jefe) aprox.
echo Rank(570); // Imprime 12(Jefe) aprox.
echo Rank(659); // Imprime 12(Jefe) aprox.
echo Rank(650); // Imprime 13 (Jefe Mayor)
echo Rank(670); // Imprime 13 (Jefe Mayor)
echo Rank(700); // Imprime 13 (Jefe Mayor) 
Bien la función ahora devuelve los mismos resultados por cada exp (del 650.0 al 700.0 siempre devolvera 13(Jefe Mayor)) del 450.0 al 650.0 devolvera Jefe y asi , pero lo que quiero hacer es que solo me devuelva 1 jefe mayor, 3 jefes y asi sube la cantidad de usuarios por nivel, Ejm: si la exp es 20.0 o 200.0 serán soldados, Al final quiero tener 20 soldados 10 blabla 5 blabla 3 jefes y 1 jefe mayor, el resto se va para los soldados. Me servirá la cantidad de usuarios nop? aqui serían por Ejm: 50 personas, haber si me dan una idea de como hacerlo Gracias...
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
  #2 (permalink)  
Antiguo 27/03/2009, 14:01
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 1 mes
Puntos: 20
me parece que tu problema no es de programacion sino que es un problema matematico...

si me explicas la parte matematica de eso podemos transformar la programacion...

mirando detenidamente la parte de 1 solo jefe mayor es facil de implementar

Código PHP:
function escribeRank($exp){
// explico abajo
$maxima_exp_hasta_ahora 700;
if(
$maxima_exp_hasta_ahora != $exp){
$z ceil(($exp/$maxima_exp_hasta_ahora)*13); //  13 Niveles
}else{
$z 14;
}

return 
$z;

__________________
Firma:
Es mas dificil para el mono entender que el hombre desciende de el....

PD: Siempre doy karma al que me da una buena respuesta... ;0)

Última edición por GatorV; 27/03/2009 a las 15:55
  #3 (permalink)  
Antiguo 27/03/2009, 14:06
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Matemáticas (número sucesivo)

Es que tu funcion no tiene forma de saber si ya hay OTRO Jefe Mayor. Probablemente sea mejor controlar eso usando base de datos.

Cita:
mirando detenidamente la parte de 1 solo jefe mayor es facil de implementar
Farra, eso no resuelve el problema. Ya que si hay 2 usuarios con el maximo de exp, aun asi habrian 2 Jefes Mayores.
  #4 (permalink)  
Antiguo 27/03/2009, 14:08
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 1 mes
Puntos: 20
Respuesta: Matemáticas (número sucesivo)

el problema seria si es que hay varios usuarios con la misma puntuacion en $maxima_exp_hasta_ahora
__________________
Firma:
Es mas dificil para el mono entender que el hombre desciende de el....

PD: Siempre doy karma al que me da una buena respuesta... ;0)
  #5 (permalink)  
Antiguo 27/03/2009, 16:16
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 4 meses
Puntos: 56
Respuesta: Matemáticas (número sucesivo)

Bueno si hay 2 jefes mayores con la misma exp no hay problema.

Lo explico detalladamente así:
Hay 35 usuarios, y lo que hago ahora es dividir todos los usuarios con 13 niveles, pongamosle 5 niveles.
Con la función de arriba Me devuelve:
7 jefes mayores
7 jefes
7 blabla
7 blabla
7 soldados Total 35


Quiero la sucesión:

1 jefe mayor
3 jefes
5 blablabla
10 blababla
16 soldados. Total 35


Tengo la cantidad de usuarios que es 35, y la experiencia de cada usuario. La pregunta es como haría la función, estoy muy rallado con esto de las matemáticas :P.
Farra pero si hago ese if solo me lo tomaría para el Jefe mayor, pero quiero la sucesión, Gracias de nuevo!.
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
  #6 (permalink)  
Antiguo 27/03/2009, 22:38
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 1 mes
Puntos: 20
Respuesta: Matemáticas (número sucesivo)

si me explicas que es eso de la sucesion... osea como lo haces a mano...?

por que no soy bueno en matematicas, pero si me lo explicas yo te lo tradusco a programacion php...

veo que haces: 1,3,5,10,16... en cuanto % va aumentando? o como es el aumento?
__________________
Firma:
Es mas dificil para el mono entender que el hombre desciende de el....

PD: Siempre doy karma al que me da una buena respuesta... ;0)
  #7 (permalink)  
Antiguo 28/03/2009, 05:39
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Respuesta: Matemáticas (número sucesivo)

La lógica básica sería:
- Ordenar los puntajes de mayor a menor.
- Tomar el primero y será Jefe mayor.
- Tomar los tres siguientes y serán Jefes.
- etc, etc, etc.

La primera pregunta:
- ¿Dónde están almacenados los usuarios y sus puntajes? ¿En un array? ¿En una BD? ¿En un archivo de texto plano?

La segunda:
- Si hubiera varios usuarios empatados con el máximo puntaje ¿Todos ellos serían "Jefes Mayores"? Y si hubiera más de tres con el segundo puntaje más alto ¿Todos ellos serían "Jefes"? (etc, etc, etc.)

Saludos,
  #8 (permalink)  
Antiguo 28/03/2009, 08:13
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 4 meses
Puntos: 56
Respuesta: Matemáticas (número sucesivo)

Cita:
veo que haces: 1,3,5,10,16... en cuanto % va aumentando? o como es el aumento?
El % aumenta de 1% a 2% > 5% > 12% > 20%(en ese orden) pero en 13 niveles hasta que el 13 sea 50%. Digamos como elegir a 1 General, 2 Comandantes, 4 Coroneles 16 mayores, pero se ordena por el rango en que esta, en este caso tenemos la exp.

Esta es la DB MSSQL

Función 1 (si escribo todos los usuarios)

user_id | exp
User8 - 95,217
User5 - 95,217
User4 - 95,217
User15 - 93,217

User14 - 92,999
User13 - 91,900
User12 - 91,217
User9 - 90,813

User10 - 90,213
User11 - 90,013
User6 - 90,000
User7 - 60,000

User3 - 54,100
User2 - 52,000
User1 - 40,000
User17 - 36,000

User16 - 34,100
User18 - 22,000
User19 - 10,000
User20 - 10,000

User21 - 9,000
User..... - 8,000
User..... - 7,000
User54 - 1,000

(Ordena por grupos pero la misma cantidad de usuarios)

Función 2 (La q desconozco):

user_id | exp
User8 - 95,217
User5 - 95,217
User4 - 95,217

User15 - 93,217
User14 - 92,999
User13 - 91,900

User12 - 91,217
User9 - 90,813
User10 - 90,213
User11 - 90,013
User6 - 90,000

User7 - 60,000
User3 - 54,100
User2 - 52,000
User1 - 40,000
User17 - 36,000
User16 - 34,100
User18 - 22,000
User19 - 10,000
User20 - 10,000
User21 - 9,000
User..... - 8,000
User..... - 7,000
User54 - 1,000


(Ahora ordena por grupos pero en suseción aumentando la cantidad de usuarios)

Quiero q la función me de 1 nivel por cada grupo(color) de usuario (Son 13 grupos)

Ahora la funcion 1 escribeRank(92,999) devuelve el nivel 2 que es el verde, pero tomando la funcion 2 escribeRank(92,999) devuelve nivel 3
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
  #9 (permalink)  
Antiguo 28/03/2009, 12:58
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Respuesta: Matemáticas (número sucesivo)

Si no hubiera posibilidad de empate en exp, sería bastante sencillo hacer una consulta:
Dada la experiencia en la variable $exp_usuario:

SELECT COUNT(*) FROM tabla WHERE exp > $exp_usuario

Eso te devolvería la cantidad de usuarios que tienen más puntaje que el que diste. Con lo cual, te da directamente la posición en la que se encuentra.

Pero, al haber posibilidad de empate, tienes que definir con qué criterio, tomando tu ejemplo, el User8 es Jefe Mayor y no User5 ni User4, si tienen la misma exp. ¿hay algún otro valor que te permita hacer esta distinción? (por ejemplo la fecha de registro u otro campo).

Saludos,
  #10 (permalink)  
Antiguo 28/03/2009, 20:59
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 4 meses
Puntos: 56
Respuesta: Matemáticas (número sucesivo)

Yo estyo seguro que si es posible hacer eso, hacer un for aumentando el nivel de usuario, mejor lo intento hacer, lo del SELECT COUNT lo tengo como ranking, pero si hay 500 usuarios me devolveria 500 rankings y yo quiero 13 rankings, como dije antes da = haya empate de exp talves si hay un empate haga un if y sacar al que se registró último. Ya lo intentaré hacer, no me da tiempo para hacer otro ejemplo, gracias igual.
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
  #11 (permalink)  
Antiguo 28/03/2009, 22:20
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Respuesta: Matemáticas (número sucesivo)

A ver... con calma. Nadie ha dicho que no se pueda hacer.

Primero, con el SELECT COUNT(*) se te devuelve directamente la posición del ránking en la que aparece esa exp. Ése numero es suficiente para pasarlo por un filtro que te diga a qué grupo pertenece. Por hacerlo sencillo, puedes hacer un switch con cases 0, entre 1 y 3, entre 4 y 6, etc.

Ahora, me parece más conveniente, en lugar de preguntar por la posición de una exp, preguntar por la posición de un usuario.

Algo más: ¿Lo que quieres es poder preguntar por un usuario oespecífico o hacer una lista completa indicando el grupo?

Saludos,
  #12 (permalink)  
Antiguo 30/03/2009, 11:42
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 4 meses
Puntos: 56
Respuesta: Matemáticas (número sucesivo)

Solo por un usuario, Aqui hay un ejemplo totalmente igual, bueno aunq lo muestra en lista pero también en otra parte de la página muestra por usuario:

http://gunbound.softnyx-latino.net/0...5_national.asp

Si pide login: forosdelweb pass: forosdelweb ;)

Aqui el porcentaje http://gunbound.softnyx-latino.net/0...evel_award.asp

PD: Ignorar al historial.
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */

Última edición por America|UNK; 30/03/2009 a las 12:10
  #13 (permalink)  
Antiguo 30/03/2009, 15:09
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Respuesta: Matemáticas (número sucesivo)

Bueno, ya te dí una solución. Haz una consulta que cuente la cantidad de usuarios que tienen más exp que el que buscas. De esa manera tendrás la posición que tiene en el ránking. Puedes utilizar el id (si es autonumérico) para resolver los casos de empate.

Algo como (dados $id_user y $exp_user):
SELECT COUNT(*)+1 FROM tabla WHERE exp > $exp_user OR (exp = $exp_user AND id > $id_user)

Luego, buscas a qué grupo pertenece esta posición. Eso puedes hacerlo con otra tabla donde definas los grupos, o mediante programación (usando un Array o un Switch).

Pero esto ya te lo había dicho antes, por lo que me gustaría saber qué es lo que no te queda claro.

Saludos,
  #14 (permalink)  
Antiguo 30/03/2009, 18:26
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 4 meses
Puntos: 56
Respuesta: Matemáticas (número sucesivo)

Ok gracias, crear otra tabla no es buena opción, son 13 niveles en este caso lo haría en un array, el switch para ubicar el grupo de la posición eso es lo q me falta hacer.
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
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 02:30.