Foros del Web » Programando para Internet » PHP »

Problema de logica

Estas en el tema de Problema de logica en el foro de PHP en Foros del Web. Tengo dos fechas con las que trbajar, fecha ini y fecha del servidor. El problema: Necesito mostrar un dato cada dos años, por ejemplo: añoini=2010 ...
  #1 (permalink)  
Antiguo 08/11/2010, 05:38
Avatar de AdrianSeg  
Fecha de Ingreso: enero-2010
Mensajes: 595
Antigüedad: 14 años, 10 meses
Puntos: 14
Exclamación Problema de logica

Tengo dos fechas con las que trbajar, fecha ini y fecha del servidor. El problema:

Necesito mostrar un dato cada dos años, por ejemplo:

añoini=2010
añoservidor=2010

muestro hola1

añoini=2010
añoservidor=2012

muestro hola 1 y hola 2


Como vereis me salto el año 2011 porque seria cada dos años...parece simple pero tanto while y if me estoy volviendo loco, lo probe así pero no hay manera...

Como vereis la lógica es incorrecta...pero os pego el codigo para que veais que lo toy intentado y nada me siento idiota xD.

Código PHP:
$anoini=2010;
$anoacutal=2010;


echo 
"tabla fiija 2010-2011";

if (
$anoini != $anoacutal) {
    
 while (
$anoini!=$anoacutal) {
     
    echo 
hola;
    
     
    
$anoini+2
     
     
 } 
  #2 (permalink)  
Antiguo 08/11/2010, 05:53
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Problema de logica

En tanto el while sea cierto se ejecutará. Como el while nunca es cierto nunca se ejecuta. Necesitas declararlo usando <= o >= para que sea cierto en la medida que anoini sea menor a anoactual o viceversa.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 08/11/2010, 05:55
Avatar de AdrianSeg  
Fecha de Ingreso: enero-2010
Mensajes: 595
Antigüedad: 14 años, 10 meses
Puntos: 14
Respuesta: Problema de logica

Pero está bien planteado? o lo plateariais de otra forma?


lo que me pusiste no va... 2010 2010 ok pero 2010 2011 bucle infinito...


Código PHP:
Ver original
  1. <?php
  2.  
  3. $anoini=2010;
  4. $anoacutal=2011;
  5.  
  6.  
  7. echo "tabla fiija 2010-2011";
  8.  
  9. if ($anoini != $anoacutal) {
  10.    
  11.  while ($anoini<=$anoacutal) {
  12.      
  13.     echo hola;
  14.    
  15.      
  16.     $anoini+2;
  17.      
  18.      
  19.  }  
  20.  
  21. }
  22.  
  23. ?>
  #4 (permalink)  
Antiguo 08/11/2010, 05:59
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Problema de logica

Trata usando mejor <= o >=.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 08/11/2010, 06:10
Avatar de AdrianSeg  
Fecha de Ingreso: enero-2010
Mensajes: 595
Antigüedad: 14 años, 10 meses
Puntos: 14
Respuesta: Problema de logica

Creo que no entendistes el problema...año actual cambia...el unico que se mantiene es añinicio...

asi que deberia funcionar para 2010,2012,2014...eso son los valorespara mostrar los datos...el resto 2011 2011...no deberia mostrar nada del while...
  #6 (permalink)  
Antiguo 08/11/2010, 06:14
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 8 meses
Puntos: 26
Respuesta: Problema de logica

A ver si es esto mas o menos lo que pides:
Código PHP:
<?php
$anoini
=2010;
$anoacutal=2018;

if(
$anoini==$anoacutal){
    echo 
"hola";
}else{
    
$corr=($anoacutal-$anoini)&#37;2; //aqui pone %2, pero no se porque aparece eso tan raro
    
if($corr==0){
        for(
$x=0;$x<(($anoacutal-$anoini)/2);$x++){
            echo 
"hola".($x+1)."<br>";
        }
    }
}
?>
  #7 (permalink)  
Antiguo 08/11/2010, 06:16
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Problema de logica

Código PHP:
Ver original
  1. <?php
  2. $anoini=2010;
  3. $anoacutal=2011;
  4.  
  5. echo "tabla fija 2010-2011";
  6.  
  7. if ($anoini != $anoacutal) {
  8.     while ($anoini<=$anoacutal) {
  9.         echo 'hola';
  10.         $anoini = $anoini+2;
  11.     }  
  12. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 08/11/2010, 06:21
Avatar de AdrianSeg  
Fecha de Ingreso: enero-2010
Mensajes: 595
Antigüedad: 14 años, 10 meses
Puntos: 14
Respuesta: Problema de logica

Vallu gracias, más o menos es eso lo que necesito...pero 2012 muestra datos correcto, 2014 muestra dos veces correctos pero 2013 por ejemplo no muestra nada...y deberia mostrar solo uno, osea como si fuera 2012...vamos que no muestra lo siguiente hasta pasar dos años pero lo anterior si lo deberia mostrar.
  #9 (permalink)  
Antiguo 08/11/2010, 06:24
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 8 meses
Puntos: 26
Respuesta: Problema de logica

Si, no hice los impares. XD, espera un momento y lo implemento, pero a ver si lo consigues hacer antes que yo!!
  #10 (permalink)  
Antiguo 08/11/2010, 06:28
Avatar de AdrianSeg  
Fecha de Ingreso: enero-2010
Mensajes: 595
Antigüedad: 14 años, 10 meses
Puntos: 14
Respuesta: Problema de logica

Si todavia estoy intentado descifrar como funciona tu codigo xD
  #11 (permalink)  
Antiguo 08/11/2010, 06:29
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 8 meses
Puntos: 26
Respuesta: Problema de logica

Todo completo:
Código PHP:
$anoini=2010;
$anoacutal=2018;

$corr=($anoacutal-$anoini)&#37;2;
if($corr==0){
    for(
$x=0;$x<(($anoacutal-$anoini)/2);$x++){
        echo 
"hola".($x+1)."<br>";
    }
}else{
    for(
$x=0;$x<(($anoacutal-$anoini)/2-1);$x++){
        echo 
"hola".($x+1)."<br>";
    }

  #12 (permalink)  
Antiguo 08/11/2010, 06:36
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 8 meses
Puntos: 26
Respuesta: Problema de logica

Explicacion:
Mi codigo se divide en dos partes principales (el if y el else). Para saber en que if hemos de entrar primero hemos de saber si la diferencia de años entre los dos años es par o impar, para hacer eso utilizamos la expresion: $corr=($anoacutal-$anoini)%2;, que nos da como resultado en residuo de la division entre 2. Lo cual significa que si el residuo es 0 es que el numero es par, si no por el contrario es que el numero es impar.

Ya dentro de los if, hacemos un for para recorrer todos los años que han pasado entre las dos datas que has propuesto, dividimos los numeros de esos años entre 2, porque solo te interesa un año de cada 2.

En el segundo if lo mismo, solo que restamos 1 a esa diferencia porque por ejmplo 3.5, recorreria el bucle 4 veces, y solo nos interesa que 3.

Espero haberme explicado correctamente. No soy bueno explicando.

Si no entiendes algo pregunta.
  #13 (permalink)  
Antiguo 08/11/2010, 06:37
Avatar de AdrianSeg  
Fecha de Ingreso: enero-2010
Mensajes: 595
Antigüedad: 14 años, 10 meses
Puntos: 14
Respuesta: Problema de logica

te quiero vallu...todo perfecto xD...te voy a dar 9999 de karma...bueno venga que ya sales de currar...a descansar.

Muchisimas gracias.

Edito: No me deja darte karma...dice que necesito esparcir karma a otros usuarios antes de dartelo a ti....ni idea.

Etiquetas: logica
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 11:14.