Foros del Web » Programando para Internet » PHP »

Dificil Logica de programacion como hago?

Estas en el tema de Dificil Logica de programacion como hago? en el foro de PHP en Foros del Web. Hola.. Buenos dias a todos los participantes de este excelente foro, tenia tiempo que no visitaba. Este problema es para la clase de programadores que ...
  #1 (permalink)  
Antiguo 21/11/2015, 10:05
Avatar de JoseGMariani  
Fecha de Ingreso: diciembre-2008
Ubicación: Edo Lara
Mensajes: 251
Antigüedad: 16 años
Puntos: 8
Dificil Logica de programacion como hago?

Hola.. Buenos dias a todos los participantes de este excelente foro, tenia tiempo que no visitaba. Este problema es para la clase de programadores que le gusten los retos ciertamente..

El tema es que estoy trancado en la logica o por lo menos no se como hacerlo de forma sencilla.

Se trata de las jerarquias...(Si esos problemas jerarquicos son un conflicto siempre.).

En mi problema de logica existen 5 conceptos y una condicion. Y listo! Capas es mas sencillo de lo que creo, pero estoy tan trancado que no me da el cerebro. El problema es asi:

Conceptos:

-Padre
-Hijo
-Puntos Personales (PP): Puntos propios asignados al usuario.
-Puntos grupales (PG): La suma de todos los PP de sus hijos hasta su tatara-tatara nieto. (5 nivel descendiente).

-Puntos Totales (PT): PT=PP+PA

Condicion: Los puntos grupales solo pueden ser dados a sus antecesores, si y solo si, el PT de este usuario es < 0.

Parece muy facil, pero el problema esta en que cuando voy a calcular los puntos grupales para asi obtener los puntos totales, para aplicar la condicion y ver si ese usuario da o no da puntos a sus ancestros...

Entonces tengo que hacerme la pregunta para cada hijo del usuario 1 para ver quienes le dan o no, y por ende, tengo que hacer la pregunta a cada hijo y asi sucecivam,ente e sun ciclo..=/ hasta llegar al final.. si entienden el problema,? si no diganme y se los aclaro.. =)
__________________
"Nunca seas arrogante con los humildes, ni humilde con los arrogantes." Paulo Coelho..
  #2 (permalink)  
Antiguo 21/11/2015, 10:58
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Dificil Logica de programacion como hago?

Saludo.
Imagino que al tratarse de un multinivel, ya se tiene el modo de relacionar a la familia,
es decir, entre tatara-tatara-abuelo, tatara-abuelo, abuelo, padre e hijo.

Por otra parte, la formula de los PT (puntos totales) según se lee son los PP (puntos personales)
sumados con los PA (puntos del antecesor)

Sin embargo, la condiciòn dice que los puntos grupales solo se darán sí los PT del usuario es MENOR a 0, es decir, que NO debe tener puntos ní por sì mismos, ni por sus antecesores.

Sin embargo la formula suma los puntos sí mismo y de los antecesores, osea que según esto,
¿los puntos grupales solo se dará cuando todos tengan puntuación negativa?

O tal vez está planteado de una forma no muy clara el tema.

Te invito a que pongas un ejemplo con datos reales, y redactes con calma
el requerimiento.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 21/11/2015, 21:26
Avatar de JoseGMariani  
Fecha de Ingreso: diciembre-2008
Ubicación: Edo Lara
Mensajes: 251
Antigüedad: 16 años
Puntos: 8
Respuesta: Dificil Logica de programacion como hago?

Hola, gracias por responderme, entiendo que es un tema dificil de explicar por texto y de entender pues mucho mas... puntuacion negativa? no no tiene nada que ver en ningun momento nombro puntuacion negativa.. Sin querer y por error de tipeo, quise decir <1000.

Aqui te agrego un ejemplo bieb bien elaborado a ver si me puedes ayudar. =) de verdad es que es muy sencillo pero bastante dificil de entender y de explicar.

Supongamos que cada usuario es una Letra, y los numeros que entan al lado son los PP.

A-> 70
B -> 10
C -> 70
D -> 50
E -> 20
F -> 10 | ---------------------Hasta aqui es el 5to nivel.
G -> 20
H -> 80
I -> 40
J -> 30

Vamos a supones que en este preciso momento calculamos los PG de los usuarios A y B.

Si calcularamos en este momento los Puntos Grupales (PG) de A serian:
10 + 70 + 50 + 20 + 10 = 160.
Los puntos totales serian: 70+160=230

Si calcularamos los (PG) de B serian:
70 + 50 + 20 + 10 + 20 (usuario G) = 170.
Por lo que puntos totales serian: 10(PP)+170(PG)=180

Hasta ese momento no se ha aplicado o activado la condicion...
Ahora a partir de aqui viene la accion que llama a la condicion imaginemos que ahora el usuario B se le asignan 30 puntos (ES DECIR PP para el.)

Los puntos totales de B ahora serian: 10+30(PP)+180(PG) serian entonces= 210.

Como 210>100 entonces B, no le suma a A en sus puntos grupales, por lo que ahora los puntos grupales de A serian:

PG=70 + 50+20+10 = 150.

Es cecir si un usuario llega a PT>1000 no le suma sus PP a sus 5 ancestros.
__________________
"Nunca seas arrogante con los humildes, ni humilde con los arrogantes." Paulo Coelho..
  #4 (permalink)  
Antiguo 22/11/2015, 08:15
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Dificil Logica de programacion como hago?

Saludo.
Según esto entonces, lo que se debe hacer es calcular en orden
del menor al mayor usuario (En cuanto a su nivel se refiere).

Es decir, volviendo al ejemplo dado, primero se tienen que calcular
los puntos de B, para luego calcular los de A, y a medida que
se calculen estos, se implante la condición de revisar los puntos
actuales de sus relativos, y como en el último caso, B no le suma puntos a A
pues llegó a una sumatoria mayor a 100, entonces este (B) no sería
tenido en cuenta para A.

Sin embargo, en ninguno de los dos casos le suma pues en ambos
ejemplos, la sumatoria de B es mayor a 100.

¿Es correcto?

Esto pensado para codificar, sería tener el arreglo inicial que es
los usuarios y sus puntos, y luego recorrer este arreglo desde el
último elemento hasta el primero (es decir, empezando por el final),
y en otro arreglo guardar la sumatoria de puntos de cada usuario, obviamente
ese mismo arreglo de la sumatoria sirve para comparar sí los predecesores
pasan el límite de 100, para sumar o no los puntos. (Y claro, se tiene que tener una variable para el límite de los niveles, en este caso 5)

Es decir, algo así

Código HTML:
Ver original
  1. PP de J son 30
  2. Sus PG suman 0 y los PT son 30
  3. ******************************************
  4.  
  5. PP de I son 40
  6. Predecesores (J) con PT 30
  7. Sus PG suman 30 y los PT son 70
  8. ******************************************
  9.  
  10. PP de H son 80
  11. Predecesores (I) con PT 70
  12. Predecesores (J) con PT 30
  13. Sus PG suman 100 y los PT son 180
  14. ******************************************
  15.  
  16. PP de G son 20
  17. Predecesores (H) con PT 180
  18. Predecesores (I) con PT 70
  19. Predecesores (J) con PT 30
  20. Sus PG suman 100 y los PT son 120
  21. ******************************************
  22.  
  23. PP de F son 10
  24. Predecesores (G) con PT 120
  25. Predecesores (H) con PT 180
  26. Predecesores (I) con PT 70
  27. Predecesores (J) con PT 30
  28. Sus PG suman 100 y los PT son 110
  29. ******************************************
  30.  
  31. PP de E son 20
  32. Predecesores (F) con PT 110
  33. Predecesores (G) con PT 120
  34. Predecesores (H) con PT 180
  35. Predecesores (I) con PT 70
  36. Predecesores (J) con PT 30
  37. Sus PG suman 100 y los PT son 120
  38. ******************************************
  39.  
  40. PP de D son 50
  41. Predecesores (E) con PT 120
  42. Predecesores (F) con PT 110
  43. Predecesores (G) con PT 120
  44. Predecesores (H) con PT 180
  45. Predecesores (I) con PT 70
  46. Sus PG suman 70 y los PT son 120
  47. ******************************************
  48.  
  49. PP de C son 70
  50. Predecesores (D) con PT 120
  51. Predecesores (E) con PT 120
  52. Predecesores (F) con PT 110
  53. Predecesores (G) con PT 120
  54. Predecesores (H) con PT 180
  55. Sus PG suman 0 y los PT son 70
  56. ******************************************
  57.  
  58. PP de B son 10
  59. Predecesores (C) con PT 70
  60. Predecesores (D) con PT 120
  61. Predecesores (E) con PT 120
  62. Predecesores (F) con PT 110
  63. Predecesores (G) con PT 120
  64. Sus PG suman 70 y los PT son 80
  65. ******************************************
  66.  
  67. PP de A son 70
  68. Predecesores (B) con PT 80
  69. Predecesores (C) con PT 70
  70. Predecesores (D) con PT 120
  71. Predecesores (E) con PT 120
  72. Predecesores (F) con PT 110
  73. Sus PG suman 150 y los PT son 220
  74. ******************************************

__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 22/11/2015 a las 08:54
  #5 (permalink)  
Antiguo 22/11/2015, 09:39
Avatar de JoseGMariani  
Fecha de Ingreso: diciembre-2008
Ubicación: Edo Lara
Mensajes: 251
Antigüedad: 16 años
Puntos: 8
Respuesta: Dificil Logica de programacion como hago?

Esta bien como dices, excepto por una cosa:

Es el PP lo que el HIJO le regala al padre... No el PT. en todo lo demas estas en lo correcto.

es decir quedaria asi en una primera instancia:

PP de J son 30
Sus PG suman 0 y los PT son 30
******************************************

PP de I son 40

Predecesores (J) con PP 30
Sus PG suman 30 => los PT de I son 70
******************************************

PP de H son 80

Predecesores (I) con PP 40

Predecesores (J) con PP 30

Los PG de H suman 70 y los PT de H son: 80(PP)+70(PG)=150(PT)
************************************************** *****

PP de G son 20

*Predecesores:

Predecesor (H) con PP 80 (No suma para sus hijos ya que PT-H=150>=100.

Predecesor (I) con PP 40
Predecesor (J) con PP 30

Los PG suman 40+30=70 =>PT de G son 20(PP)+70(PG)=90.


*******************Calculando PG de F********************
PP de F son 10

Predecesores:

Predecesor (G) con PP 20
Predecesor (H) con PP 80 (No suma para sus hijos por que tiene PT=150>=100.)
Predecesor (I) con PP 40
Predecesor (J) con PT 30

PG suman 20+40+30=90 y los PT son 90+10=100.
******************************************

PP de E son 20

Predecesor (F) con PP 10 (No suma para sus hijos por que tiene PT=100>=100.)

Predecesor (G) con PP 20

Predecesor (H) con PP 80 (No suma para sus hijos por que tiene PT=150>=100.)

Predecesor (I) con PP 40

Sus PG suman 40+20=60 => PT son 60(PG)+20(PP)=80

Nota este usuario no tiene a J ya que a pesar de que es un Hijo, para los calculos de PG solo se toman en cuenta hasta el 5to nivel.

************************************************

PP de D son 50

Predecesor (E) con PP 20

Predecesor (F) con PP 10 (No suma para sus hijos por que tiene PT=150>=100.)

Predecesor (G) con PP 20

Predecesor (H) con PP 80 (No suma para sus hijos por que tiene PT=150>=100.)

Predecesor (I) con PP 40

Sus PG suman: 80 y los PT son 130
******************************************

PP de C son 70

Predecesor (D) con PP 50 (No suma para sus hijos por que tiene PT=130>=100.)

Predecesor (E) con PP 20

Predecesor (F) con PP 10 (No suma para sus hijos por que tiene PT=100>=100.)

Predecesor (G) con PP 20

Predecesor (H) con PP 80 (No suma para sus hijos por que tiene PT=150>=100.)

Sus PG suman 40 y los PT son 40+70(PP)=110(PT)

******************************************

PP de B son 10

Predecesor (C) con PP 70 (No suma para sus hijos por que tiene PT=110>=100.)

Predecesor (D) con PP 50 (No suma para sus hijos por que tiene PT=130>=100.)

Predecesor (E) con PP 20

Predecesor (F) con PP 10 (No suma para sus hijos por que tiene PT=100>=100.)

Predecesor (G) con PP 20

Sus PG suman 40 entonces los PT son 40+10(PP)=50
************************************************** ************************************

PP de A son 70

Predecesor (B) con PP 10

Predecesor (C) con PP 70 (No suma para sus hijos por que tiene PT=110>=100.)

Predecesor (D) con PP 50 (No suma para sus hijos por que tiene PT=130>=100.)

Predecesor (E) con PP 20

Predecesor (F) con PP 10 (No suma para sus hijos por que tiene PT=100>=100.)

Sus PG suman 30 entonces los PT son 30+70(PP)=100PT
************************************************** *************************************

Exactamente asi es.. pero si estas entendiendo espero que con el este mismo ejemplo y modificado pues lo entiendas aun mas, pero te digo, has sido uno de los pocos programadores que lo ha entendido.

En pocas palabras= El PG de un padre va a ser igual a la suma de los PP de sus hijos (de hasta el 5to nivel) que tengan PT<100.

El dilema es calcular que hijos se agregan a la sumatoria ("suman sus pp al pg de su padre") y cuales no, lo de recorrer desde el ultimo hacia arriba es correcto!


El problema de eso es que si por ejemplo en estos momentos y tomando en cuenta la corrida que acabamos de escribir, todo esta en calma, ya se le calculo los PG (por ende los PT) a todos.

EJEMPLO:
Pero derrepente al usuario E se le colocan 20 Puntos... Ya su PP cambiaria de 20 a 40, el PG se mantiene igual, y ahora cuando le re-calculamos el PT nos da 40PP+60PG=100.

Eso quiere decir que en ese momento ya el usuario E no entrega sus PP a ninguno de sus 5 ascendentes. (D, C , B , A).
Por lo que a cada uno de esos ascendentes ahi que recalcularle los PG.

=) ! En otras palabras cada ves que se le asignen puntos a un usuario eso puede generar dos reacciones:
1ra-Que esos puntos hagan que el usuario llege a PT>=100 y no le de los PP a sus padres (como el ejemplo que acabo de hacer con el caso de E.)
2da- Que por consecuencia de la 1ra, los PG de un usuario disminuya, haciendo que este usuario llege a PG<100, Y por consiguiente entregandole sus PP a padres donde antes NO.

En nuestro ejemplo casualmente pasan ambas:

Usuario D: Ya no recibe los puntos de E y su PT es 110. (sigue siendo >110. NO PASA NADA. )

Usuario C: Su PG era 40 pero como ahora no recibiria los 20 puntos de D, su PG=20 por lo que al calcular los PT dan 90 quedan PT<100.
Este usuario cae en lo que es la 2da reaccion.
Ya que entregara ahora sus puntos PP a los ancestros que antes no les entregaba.

Usuario B: El se tenia 40 PG pero ahora no tendra los de E, pero si tendra los de C. por lo que recalculando su PG nos daria: 70+20=90.

Usuario A: No recibe los de E pero si recibe los de C (Le pasa lo mismo que le paso a B) por lo que su PG ahora es: 80 y su PT es: 150.
__________________
"Nunca seas arrogante con los humildes, ni humilde con los arrogantes." Paulo Coelho..

Última edición por JoseGMariani; 22/11/2015 a las 09:55
  #6 (permalink)  
Antiguo 22/11/2015, 17:02
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Dificil Logica de programacion como hago?

Saludo.
Pues sí, ya con la explicación sobre este me quedó más claro.

En cuanto al ejemplo ya modificado por tu parte, hasta el F quedé bien,
pero en E dices

Cita:
Iniciado por JoseGMariani Ver Mensaje
PP de E son 20

Predecesor (F) con PP 10 (No suma para sus hijos por que tiene PT=100>=100.)
Predecesor (G) con PP 20
Predecesor (H) con PP 80 (No suma para sus hijos por que tiene PT=150>=100.)
Predecesor (I) con PP 40

Sus PG suman 40+20=60 => PT son 60(PG)+20(PP)=80

Nota este usuario no tiene a J ya que a pesar de que es un Hijo,
para los calculos de PG solo se toman en cuenta hasta el 5to nivel.



¿Por qué no entra J, no sería este el 5 nivel? Sí se omite J, serían solo 4 niveles.

Obviamente de aquí para abajo cambia precisamente por omitir a J para E
respecto al ejercicio inicial.

Pero con lo que explicas (Exceptuando la pregunta que hago),
entonces yo lo vería así:

PP de J son 30
Sus PG suman 0 y los PT son 30
******************************************

PP de I son 40
Predecesores (J) con PT 30. Hereda al tener solo 30 PT.
Sus PG suman 30 y los PT son 70
******************************************

PP de H son 80
Predecesores (I) con PT 40. Hereda al tener solo 70 PT.
Predecesores (J) con PT 30. Hereda al tener solo 30 PT.
Sus PG suman 70 y los PT son 150
******************************************

PP de G son 20
Predecesores (H) con PT 80. NO hereda al tener 150 PT.
Predecesores (I) con PT 40. Hereda al tener solo 70 PT.
Predecesores (J) con PT 30. Hereda al tener solo 30 PT.
Sus PG suman 70 y los PT son 90
******************************************

PP de F son 10
Predecesores (G) con PT 20. Hereda al tener solo 90 PT.
Predecesores (H) con PT 80. NO hereda al tener 150 PT.
Predecesores (I) con PT 40. Hereda al tener solo 70 PT.
Predecesores (J) con PT 30. Hereda al tener solo 30 PT.
Sus PG suman 90 y los PT son 100
******************************************

PP de E son 20
Predecesores (F) con PT 10. NO hereda al tener 100 PT.
Predecesores (G) con PT 20. Hereda al tener solo 90 PT.
Predecesores (H) con PT 80. NO hereda al tener 150 PT.
Predecesores (I) con PT 40. Hereda al tener solo 70 PT.
Predecesores (J) con PT 30. Hereda al tener solo 30 PT.
Sus PG suman 90 y los PT son 110
******************************************

PP de D son 50
Predecesores (E) con PT 20. NO hereda al tener 110 PT.
Predecesores (F) con PT 10. NO hereda al tener 100 PT.
Predecesores (G) con PT 20. Hereda al tener solo 90 PT.
Predecesores (H) con PT 80. NO hereda al tener 150 PT.
Predecesores (I) con PT 40. Hereda al tener solo 70 PT.
Sus PG suman 60 y los PT son 110
******************************************

PP de C son 70
Predecesores (D) con PT 50. NO hereda al tener 110 PT.
Predecesores (E) con PT 20. NO hereda al tener 110 PT.
Predecesores (F) con PT 10. NO hereda al tener 100 PT.
Predecesores (G) con PT 20. Hereda al tener solo 90 PT.
Predecesores (H) con PT 80. NO hereda al tener 150 PT.
Sus PG suman 20 y los PT son 90
******************************************

PP de B son 10
Predecesores (C) con PT 70. Hereda al tener solo 90 PT.
Predecesores (D) con PT 50. NO hereda al tener 110 PT.
Predecesores (E) con PT 20. NO hereda al tener 110 PT.
Predecesores (F) con PT 10. NO hereda al tener 100 PT.
Predecesores (G) con PT 20. Hereda al tener solo 90 PT.
Sus PG suman 90 y los PT son 100
******************************************

PP de A son 70
Predecesores (B) con PT 10. NO hereda al tener 100 PT.
Predecesores (C) con PT 70. Hereda al tener solo 90 PT.
Predecesores (D) con PT 50. NO hereda al tener 110 PT.
Predecesores (E) con PT 20. NO hereda al tener 110 PT.
Predecesores (F) con PT 10. NO hereda al tener 100 PT.
Sus PG suman 70 y los PT son 140
******************************************

Y sí luego, por ej, el usuario G obtiene otros 20 PP (40 en total) entonces


PP de J son 30
Sus PG suman 0 y los PT son 30
******************************************

PP de I son 40
Predecesores (J) con PT 30. Hereda al tener solo 30 PT.
Sus PG suman 30 y los PT son 70
******************************************

PP de H son 80
Predecesores (I) con PT 40. Hereda al tener solo 70 PT.
Predecesores (J) con PT 30. Hereda al tener solo 30 PT.
Sus PG suman 70 y los PT son 150
******************************************

PP de G son 40
Predecesores (H) con PT 80. NO hereda al tener 150 PT.
Predecesores (I) con PT 40. Hereda al tener solo 70 PT.
Predecesores (J) con PT 30. Hereda al tener solo 30 PT.
Sus PG suman 70 y los PT son 110
******************************************

PP de F son 10
Predecesores (G) con PT 40. NO hereda al tener 110 PT.
Predecesores (H) con PT 80. NO hereda al tener 150 PT.
Predecesores (I) con PT 40. Hereda al tener solo 70 PT.
Predecesores (J) con PT 30. Hereda al tener solo 30 PT.
Sus PG suman 70 y los PT son 80
******************************************

PP de E son 20
Predecesores (F) con PT 10. Hereda al tener solo 80 PT.
Predecesores (G) con PT 40. NO hereda al tener 110 PT.
Predecesores (H) con PT 80. NO hereda al tener 150 PT.
Predecesores (I) con PT 40. Hereda al tener solo 70 PT.
Predecesores (J) con PT 30. Hereda al tener solo 30 PT.
Sus PG suman 80 y los PT son 100
******************************************

PP de D son 50
Predecesores (E) con PT 20. NO hereda al tener 100 PT.
Predecesores (F) con PT 10. Hereda al tener solo 80 PT.
Predecesores (G) con PT 40. NO hereda al tener 110 PT.
Predecesores (H) con PT 80. NO hereda al tener 150 PT.
Predecesores (I) con PT 40. Hereda al tener solo 70 PT.
Sus PG suman 50 y los PT son 100
******************************************

PP de C son 70
Predecesores (D) con PT 50. NO hereda al tener 100 PT.
Predecesores (E) con PT 20. NO hereda al tener 100 PT.
Predecesores (F) con PT 10. Hereda al tener solo 80 PT.
Predecesores (G) con PT 40. NO hereda al tener 110 PT.
Predecesores (H) con PT 80. NO hereda al tener 150 PT.
Sus PG suman 10 y los PT son 80
******************************************

PP de B son 10
Predecesores (C) con PT 70. Hereda al tener solo 80 PT.
Predecesores (D) con PT 50. NO hereda al tener 100 PT.
Predecesores (E) con PT 20. NO hereda al tener 100 PT.
Predecesores (F) con PT 10. Hereda al tener solo 80 PT.
Predecesores (G) con PT 40. NO hereda al tener 110 PT.
Sus PG suman 80 y los PT son 90
******************************************

PP de A son 70
Predecesores (B) con PT 10. Hereda al tener solo 90 PT.
Predecesores (C) con PT 70. Hereda al tener solo 80 PT.
Predecesores (D) con PT 50. NO hereda al tener 100 PT.
Predecesores (E) con PT 20. NO hereda al tener 100 PT.
Predecesores (F) con PT 10. Hereda al tener solo 80 PT.
Sus PG suman 90 y los PT son 160
******************************************

__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Última edición por mortiprogramador; 22/11/2015 a las 17:27
  #7 (permalink)  
Antiguo 23/11/2015, 22:40
Avatar de JoseGMariani  
Fecha de Ingreso: diciembre-2008
Ubicación: Edo Lara
Mensajes: 251
Antigüedad: 16 años
Puntos: 8
Respuesta: Dificil Logica de programacion como hago?

Si estas en lo correcto, exactamente asi es! y la repuesta a la pregunta es SI yo me equivoque me falto ponerle a J de ancestro...

Pero ya entendistes la idea, en el ultimo ejemplo que distes, asi mismo es..! =D como puedo calcular lo PG que se te ocurre...

Sabiendo que una persona es la que le asigna los puntos al darle aceptar a un boton... y bueno la idea es que se le actualizen los Vg a los que se les tenga que actualizar. =)

Aunque yo creo que aunque uno haga los calculos y los cambios en el momento que le da aceptar, igual hay que corrererlo (el script) una vez todas las noches. No se dime que se te ocurre... como calcularias los PG?
__________________
"Nunca seas arrogante con los humildes, ni humilde con los arrogantes." Paulo Coelho..
  #8 (permalink)  
Antiguo 24/11/2015, 00:07
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Dificil Logica de programacion como hago?

Saludo.
Pues se me ocurre tener un arreglo inicial que serían los usuarios
y sus puntos, y luego recorrer este arreglo desde el
último elemento hasta el primero, a su vez se haría dentro
de este primer recorrido un segundo recorrido para recorrer a los hijos
del que se está recorriendo actualmente, es decir, este segundo recorrido
ya no serìa como el primero que va desde el último hasta el primero,
sino que recorre desde la posición actual del primer recorrido màs uno (para no contarse a sí mismo) hasta el final del arreglo.

Es decir, en resumen, podría ser un primer for, y dentro de este otro
en el cual vaya un if para los niveles, y dentro de este, otro if para el límite de PT,
y en este último la variable que haría la sumatoria de los PP de los que cumplen
para heredar, obviamente esta variable tendría que volver a cero cada vez que
se recorra el primer for.

Y pues lo que corra todas las noches o cada cierto tiempo,
ya teniendo el script es cuestión de generar
un cron job o tarea programada para este fin.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #9 (permalink)  
Antiguo 24/11/2015, 05:16
Avatar de JoseGMariani  
Fecha de Ingreso: diciembre-2008
Ubicación: Edo Lara
Mensajes: 251
Antigüedad: 16 años
Puntos: 8
Respuesta: Dificil Logica de programacion como hago?

Si pero si lo hacemos como tu propones, eso quiere decir que tengo que recccorrer a todos los usuarios de la base de datos..

y hay un punto que no hemos mencionado, para efectops de ejemplo es una sola linea descendiente...
pero para efectos del sistema, tambien puedo tener (1 hijo o mas). indiferentemente es desde abajo hacia arriba, pero imaginate una base de datos de 1500 o 3000 user, todaslas noches tengo que reccorrer para cada uno de esos user..?
__________________
"Nunca seas arrogante con los humildes, ni humilde con los arrogantes." Paulo Coelho..
  #10 (permalink)  
Antiguo 24/11/2015, 05:59
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 3 meses
Puntos: 214
Respuesta: Dificil Logica de programacion como hago?

Saludo.
Claro, se tienen que recorrer todos, y seguramente con el tiempo
serán muchos más usuarios.

Lo que se podría hacer es una consulta para obtener el total de usuarios,
y otra para limitar el número de usuarios a recorrer
en un mismo momento, es decir, que se necesitaría un tercer ciclo
que contenga a los anteriores propuestos, y que vaya haciendo
la consulta a la tabla de usuarios y vaya trayendo grupos de
500 usuarios podría ser, o pues unos 100 o 200.

es decir, por ej.

Decimos que tendremos una variable $nusers que obtendrá el resultado
de hacer un count a la tabla de users, la variable $usersi que arranque en 0,
y una $usersf que arranque en 200.

Luego, iría un while con 2 condiciones, la primera sería que sí
$usersi es menor que $usersf, y la segunda que sí $usersf es menor o igual a $nusers, siempre y cuando se cumplan estas condiciones, entre.

Una vez dentro, se haría otro query a users, pero esta vez con un LIMIT
teniendo como límites a $usersi y a $usersf respectivamente,
en este punto entran los for, y al finalizar estos,
se tendría que asignar a $usersi el valor de $usersf, y a $usersf duplicarle
su valor actual.

¿Qué te parece la idea?
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #11 (permalink)  
Antiguo 04/04/2016, 21:34
Avatar de JoseGMariani  
Fecha de Ingreso: diciembre-2008
Ubicación: Edo Lara
Mensajes: 251
Antigüedad: 16 años
Puntos: 8
Respuesta: Dificil Logica de programacion como hago?

Holaa!! me parece excelente tu idea! todos estos meses que me perdi. Fue dandole vueltas a la forma de hacerlo distinto pero creo que no queda de otra, que hacerlo con los 3 ciclos que comentas, en grupos de 200 en 200 de ser necesario.

y hasta se me ocurrio hacer mas bien una columna que almacene que usuarios de la base, se les coloco puntos.. y se guarde esa columna con un 1.

asi el arreglo que se recorrera seria menor, por ejemplo de 3000 usuarios, solo 500 se les colocaron puntos hoy, entonces asi seria un arreglo de 500 solamente.. claro esos 500 reaccionarian en cadena. hehe y se haria todo un caos.. pero al menos no recorro los 3000.. que te parece?

sera q me puedes agregar o aceptar como amigo en forosdelweb? para asi ponernos en contacto.

POD: Gracias por todo tu tiempo y esfuerzo en atender mi duda.. es increible ahora viendo las corridas en frio que hicimos jaja un abrazoo y muchas graciass en verdad, cuando puedas respondeme. =)
__________________
"Nunca seas arrogante con los humildes, ni humilde con los arrogantes." Paulo Coelho..

Etiquetas: dificil, logica, programacion
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 06:31.