Foros del Web » Programando para Internet » PHP »

Amigos necesito de toda su ayuda porfavor, con mantener 100% Algoritmo PHP

Estas en el tema de Amigos necesito de toda su ayuda porfavor, con mantener 100% Algoritmo PHP en el foro de PHP en Foros del Web. Ya ahora sí amigos. Posteo el código con todos los /* Comentarios */. Si leen los Comentarios me podrán entender. En resumido, quiero que los ...
  #1 (permalink)  
Antiguo 22/01/2010, 14:23
 
Fecha de Ingreso: octubre-2009
Mensajes: 74
Antigüedad: 12 años, 9 meses
Puntos: 0
Amigos necesito de toda su ayuda porfavor, con mantener 100% Algoritmo PHP

Ya ahora sí amigos.

Posteo el código con todos los /* Comentarios */.

Si leen los Comentarios me podrán entender.
En resumido, quiero que los valores:
34, 22,40,4 (Estos están guardados en campo llamado, valor_porcentual en MySQL)
Siempre me sumen 100. Aunque yo modifique el 34 por el 80.
Pero como requisito no me deben dar valores negativos.

Mejor dejo el código para que me entiendan que quiero hacer:
Código PHP:
Ver original
  1. <?php
  2. require_once '../../../config/mysql.php';
  3. $dbCon = Conectarse();
  4.  
  5.  
  6.  
  7. /*
  8.  * Por ejemplo los valores sin modificación seran:
  9.  * 34 + 22 + 40 + 4 = 100.
  10.  * Y el valor que modificare será 34 por 80, entonces me quedarian:
  11.  * 80 + 22 + 40 + 4 = 146. (Se paso del 100%)
  12. */
  13.  
  14. // Capturamos los valores con $_GET[]
  15. // No se preocupen de estos valores.
  16. $productor              = $_GET['productor'];           //Ej. : Agricola Saenz
  17. $especie                = $_GET['especie'];             //Ej. : Ciruela
  18. $variedad               = $_GET['variedad'];            //Ej. : Angeleno
  19. $etapa                  = $_GET['etapa'];               //Ej. : 1
  20. $calibre                = $_GET['calibre'];             //Ej. : 32
  21.  
  22. //Aquí si, empiecen a leer :)
  23. $porcentualReal         = $_GET['porcentualReal'];      //esta variable guarda : 34
  24. $porcentual             = $_GET['campoPorcentual'];     //Aquí es donde se guardara el cambio. Está variable guarda : 80.
  25. $cero                   = 0;
  26.  
  27. // Actualizamos el valor porcentual con el valor que el usuario a ingresado. ($porcentual = 80).
  28. mysql_query("UPDATE criterio_calibres SET valor_porcentual = $porcentual WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND `criterio_calibres`.`id_calibre` = $calibre LIMIT 1", $dbCon)or die(mysql_error());
  29.  
  30. // Recuperamos la cantidad total de columnas, menos la columna que ha hecho el cambio del valor porcentual y las que tienen valor cero.
  31. // Entonces: $quantyColumnas guardara : 3 - (Sin contar la columna con el valor modificado, osea el 80).
  32. $resultado              = mysql_query("SELECT COUNT(valor_porcentual) AS Cantidad FROM criterio_calibres WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND `criterio_calibres`.`id_calibre` != $calibre AND `criterio_calibres`.`valor_porcentual` != $porcentual AND `criterio_calibres`.`valor_porcentual` != $cero", $dbCon)or die(mysql_error());
  33. $columnas               = mysql_fetch_array($resultado);
  34. $quantyColumnas         = $columnas['Cantidad'];
  35.  
  36.  
  37. // Recuperamos la Suma total de los valores porcentuales.
  38.  
  39. $queryCriterioCalibre = mysql_query("SELECT SUM(valor_porcentual) as suma FROM criterio_calibres WHERE id_productor = '$productor' AND id_especie = '$especie' AND id_variedad = '$variedad' AND etapa = $etapa", $dbCon);
  40. $resultadoPorcentual = mysql_fetch_array($queryCriterioCalibre);
  41. // Entonces si aplique el 80, la suma total seria : 146 (80 + 22 + 40 + 4 = 146).
  42. // $Suma = 146.
  43. $Suma = round($resultadoPorcentual['suma'],0);
  44.  
  45.  
  46. /* Aqui es donde tengo el problema, lo que necesito es que se mantenga el 100, aunque modifique los valores porcentuales
  47.  * Por ejemplo si antes era esto: 34 + 22 + 40 + 4 = 100.
  48.  * Y ahora es esto 80 + 22 + 40 + 4 = 146).
  49.  * Este algoritmo en PHP debe dejarlo en 100.
  50.  * Pero resulta que no puedo encontrar una lógica correcta.
  51.  * Un gran requisito es que no quede ningún valor porcentual en negativo.
  52.  */
  53.  
  54. if($Suma > 100){
  55.     $Numerador = ($Suma - 100);
  56.  
  57.     $Consultamos = mysql_query("SELECT id_calibre, valor_porcentual FROM `criterio_calibres` WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa", $dbCon)or die(mysql_error());
  58.     while($columnasValores = mysql_fetch_array($Consultamos)){ 
  59.         $valor_porcentual = $columnasValores['valor_porcentual'];
  60.                
  61.         if($valor_porcentual >= $Numerador){
  62.             $Denominador = $Denominador + 1;
  63.         }
  64.     }
  65.    
  66.     $Consultamos = mysql_query("SELECT id_calibre, valor_porcentual FROM `criterio_calibres` WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND `criterio_calibres`.`id_calibre` != $calibre AND `criterio_calibres`.`valor_porcentual` != $porcentual", $dbCon)or die(mysql_error());
  67.     while($columnasValores = mysql_fetch_array($Consultamos)){ 
  68.         $id_calibre       = $columnasValores['id_calibre'];
  69.         $valor_porcentual = $columnasValores['valor_porcentual'];
  70.  
  71.         if($valor_porcentual >= $Numerador){
  72.                 $Resultado = $valor_porcentual-($Numerador/$Denominador);  
  73.                 mysql_query("UPDATE criterio_calibres SET valor_porcentual = $Resultado WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND CONCAT(`criterio_calibres`.`valor_porcentual`) = $valor_porcentual LIMIT 1", $dbCon)or die(mysql_error());
  74.         }
  75.     }  
  76.    
  77. }
  78. /* En este algoritmo no tengo ningun problema, este esta correcto */
  79. elseif($Suma <= 100){
  80.     $resultadoSumar             =   ($porcentualReal-$porcentual);
  81.     $resultadoDivisionSumar     =   ($resultadoSumar/$quantyColumnas); 
  82.  
  83.     $Consultamos = mysql_query("SELECT id_calibre, valor_porcentual FROM `criterio_calibres` WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND `criterio_calibres`.`id_calibre` != $calibre AND `criterio_calibres`.`valor_porcentual` != $porcentual", $dbCon)or die(mysql_error());
  84.     while($columnasValores = mysql_fetch_array($Consultamos)){
  85.         $id_calibre       = $columnasValores['id_calibre'];
  86.         $valor_porcentual = $columnasValores['valor_porcentual'];
  87.        
  88.         $resultadoSuma = $resultadoDivisionSumar + $valor_porcentual;
  89.         mysql_query("UPDATE criterio_calibres SET valor_porcentual = $resultadoSuma WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND CONCAT(`criterio_calibres`.`valor_porcentual`) = $valor_porcentual LIMIT 1", $dbCon)or die(mysql_error());
  90.        
  91.        
  92.     }
  93. }
  94. /* ++++++++++++++++++++ Fin +++++++++++++++++++++++*/
  95. ?>

Última edición por lennhix; 22/01/2010 a las 14:29
  #2 (permalink)  
Antiguo 22/01/2010, 14:46
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 14 años
Puntos: 1532
Respuesta: Amigos necesito de toda su ayuda porfavor, con mantener 100% Algoritmo PHP

eso se resuelve con ecuaciones, matrices o generalmente con métodos como simplex http://www.phpsimplex.com/index.htm
  #3 (permalink)  
Antiguo 22/01/2010, 14:55
 
Fecha de Ingreso: octubre-2009
Mensajes: 74
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Amigos necesito de toda su ayuda porfavor, con mantener 100% Algoritmo PHP

Muchas gracias!, voy a investigar de esa herramienta :D.
De todas formas espero cualquier ayuda mas !
  #4 (permalink)  
Antiguo 22/01/2010, 14:57
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 14 años
Puntos: 1532
Respuesta: Amigos necesito de toda su ayuda porfavor, con mantener 100% Algoritmo PHP

Cita:
Iniciado por lennhix Ver Mensaje
Muchas gracias!, voy a investigar de esa herramienta :D.
De todas formas espero cualquier ayuda mas !
quisas el simplex no te sirva, pero las bases de la tabla sirven para resolver ecuaciones de N grados
  #5 (permalink)  
Antiguo 25/01/2010, 15:41
 
Fecha de Ingreso: octubre-2009
Mensajes: 74
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Amigos necesito de toda su ayuda porfavor, con mantener 100% Algoritmo PHP

Holas, he creado un algoritmo pero todavía no se porqué no me da resultado.

Código PHP:
Ver original
  1. <?php
  2. require_once '../../../config/mysql.php';
  3. $dbCon = Conectarse();
  4.  
  5. // Capturamos los valores con $_GET[]
  6. $productor              = $_GET['productor'];           //Ej. : Agricola Saenz
  7. $especie                = $_GET['especie'];             //Ej. : Ciruela
  8. $variedad               = $_GET['variedad'];            //Ej. : Angeleno
  9. $etapa                  = $_GET['etapa'];               //Ej. : 2
  10. $calibre                = $_GET['calibre'];             //Ej. : 36
  11.  
  12. $porcentualReal         = $_GET['porcentualReal'];      //El Porcentaje de este calibre 36 es 1.9, esta variable guarda : 1.12
  13. $porcentual             = $_GET['campoPorcentual'];     //Lo que el usuario a ingresado en la casilla porcentual, Ej: 70.
  14.                            
  15.  
  16. // Actualizamos el valor porcentual con el valor que el usuario a ingresado.
  17. mysql_query("UPDATE criterio_calibres SET valor_porcentual = $porcentual WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND `criterio_calibres`.`id_calibre` = $calibre LIMIT 1", $dbCon)or die(mysql_error());
  18.  
  19. // Sumamos la cantidad de valores porcentuales en total.
  20. $queryCriterioCalibre = mysql_query("SELECT SUM(valor_porcentual) as suma FROM criterio_calibres WHERE id_productor = '$productor' AND id_especie = '$especie' AND id_variedad = '$variedad' AND etapa = $etapa", $dbCon);
  21. $resultadoPorcentual = mysql_fetch_array($queryCriterioCalibre);
  22. $Suma = round($resultadoPorcentual['suma'],0);
  23. //Ej: $Suma = 162
  24.  
  25. if($Suma > 100){
  26.     $Salir          = 0;
  27.     $Numerador      = ($Suma - 100);
  28.     $Delta          = 0;
  29.     $Cero           = 0;            //Consultamos en MySQL sobre un porcentual mayor a cero.
  30.    
  31.     // Recuperamos la cantidad total de columnas, menos el valor porcentual que se ha modificado y las que tienen valor cero.
  32.     $Resultado              = mysql_query("SELECT COUNT(valor_porcentual) AS Cantidad FROM criterio_calibres WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND `criterio_calibres`.`id_calibre` != $calibre AND `criterio_calibres`.`valor_porcentual` != $porcentual AND `criterio_calibres`.`valor_porcentual` > $Cero", $dbCon)or die(mysql_error());
  33.     $Columnas               = mysql_fetch_array($Resultado);
  34.     $Denominador            = $Columnas['Cantidad'];
  35.     //Ej: $Denominador = 15 (Me ha contado 15 columnas, menos la que se ha modificado)
  36.    
  37. while($Salir == 0){
  38.  
  39.     $Consultamos = mysql_query("SELECT id_calibre, valor_porcentual FROM `criterio_calibres` WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND `criterio_calibres`.`id_calibre` != $calibre AND `criterio_calibres`.`valor_porcentual` != $porcentual", $dbCon)or die(mysql_error());
  40.     while($columnasValores = mysql_fetch_array($Consultamos)){ 
  41.         $valor_porcentual = $columnasValores['valor_porcentual'];  
  42.        
  43.         if($valor_porcentual > ($Numerador/$Denominador)){
  44.             $Porcentaje = $valor_porcentual-($Numerador/$Denominador);
  45.             mysql_query("UPDATE criterio_calibres SET valor_porcentual = $Porcentaje WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND CONCAT(`criterio_calibres`.`valor_porcentual`) = $valor_porcentual LIMIT 1", $dbCon)or die(mysql_error());
  46.         }else{
  47.             $Delta = $Delta + (($Numerador/$Denominador)-$valor_porcentual);
  48.             $Porcentaje = 0;           
  49.         }
  50.     }
  51.    
  52.     if($Delta == 0){
  53.         $Salir = 1;
  54.     }else{
  55.         $Numerador  = $Delta;
  56.         $Delta      = 0;
  57.     }
  58. }
  59. // Esto esta bien, está funcionando ok
  60. }elseif($Suma <= 100){
  61.     $resultadoSumar             =   ($porcentualReal-$porcentual);
  62.     $resultadoDivisionSumar     =   ($resultadoSumar/$quantyColumnas); 
  63.  
  64.     $Consultamos = mysql_query("SELECT id_calibre, valor_porcentual FROM `criterio_calibres` WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND `criterio_calibres`.`id_calibre` != $calibre AND `criterio_calibres`.`valor_porcentual` != $porcentual", $dbCon)or die(mysql_error());
  65.     while($columnasValores = mysql_fetch_array($Consultamos)){
  66.         $id_calibre       = $columnasValores['id_calibre'];
  67.         $valor_porcentual = $columnasValores['valor_porcentual'];
  68.        
  69.         $resultadoSuma = $resultadoDivisionSumar + $valor_porcentual;
  70.         mysql_query("UPDATE criterio_calibres SET valor_porcentual = $resultadoSuma WHERE CONVERT(`criterio_calibres`.`id_especie` USING utf8) = '$especie' AND CONVERT(`criterio_calibres`.`id_productor` USING utf8) = '$productor' AND CONVERT(`criterio_calibres`.`id_variedad` USING utf8) = '$variedad' AND `criterio_calibres`.`etapa` = $etapa AND CONCAT(`criterio_calibres`.`valor_porcentual`) = $valor_porcentual LIMIT 1", $dbCon)or die(mysql_error());
  71.     }
  72. }
  73. /* ++++++++++++++++++++ Fin +++++++++++++++++++++++*/

Última edición por lennhix; 25/01/2010 a las 15:47

Etiquetas: mantener, algoritmos
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 17:25.