Lio con el "IF ELSE"

varuk

Buenas.

Es que estoy haciendo una cosilla y tengo los ojos que ya no veo nada. Bueno, estaba con unos IF ELSE que lo que hacen es que si tu le das una hora así: 23:59:59 te la ponga: 0:0:0 ó 21:45:56 entonces sería 22:45:57 (que le suma un segundo vamos).

Me sale todo bien salvo para el caso del 23.59.59, donde el 59 de los minutos (M) y los segundos (S) no avanza. A ver si alguien puede echar un cable.

-> http://pastebin.com/m54285c04

Muchas gracias.

Amazon

Dios gracias por lo del pastebin, me estabas dejando ciego a mi XD

Segun veo, en

ELSE IF (H=23) AND (M=59) AND (S=59) THEN H:=0 (segunda linea), que es tu caso, solo modificas H xD

A mi me mandaron este ejercicio y lo que hacia era, S=S+1, dentro de eso, un IF S=60, then S=0 y M=M+1, dentro, otro IF M=60, then M=0 y H=H+1, y al final un IF H=24, then H=0, lo que ahí no hay "else"s.. xD

No se si en lo que lo estas haciendo te dejará hacerlo así..

varuk

#2 Pero en las líneas de abajo ya modifico las demás, abarco todos los casos posibles en las siguientes líneas ¿no?

atom

#1 21:45:56 entonces sería 22:45:57 (que le suma un segundo vamos).

Le sumas una hora y un segundo.

Amazon

#3 me refiero no a que falle compilando, sino que no modificas tú el S ni el M, solo la hora

PD: modifiqué #2, echale un ojo xD

varuk

#5 Voy a probar pero es que eso que me dices no es un analisis de casos. Bueno , voy a ver.

Amazon

#6 no lo hagas asi entonces, pero creo que no pillas lo que digo xD

Cuando coje y comprueba que H es 23, que M es 59 y que S es 59, lo que deberia de hacer es poner H a 0, M a 0 y S a 0 tambien, pero lo unico que hace tu codigo es poner H a 0, M y S no lo toca

varuk

#7 Ok gracias, voy cambiar esto. Gracias ^.

atom

#1 En el momento que encuentras el IF o un ELSE IF que cumple las condiciones ya no se ejecutan los siguientes, por eso no te modifica más que uno de los valores.

varuk

#9 Am vale, ahora si lo he pillado. xD Gracias : *

JuAn4k4

if (S=59) { S=0; (H,M) = actualizaMinutos(H,M);}
else {S++; }
}

actualizaMinutos(H,M){

if (M=59){ M=0; H = ActualizaHora(H);}
else {M=0;}

return (H,M);
}

actualizaHora(H){

if (H=23){H=0;}
else { H++; }
}

Todo pegado (en una funcion ) seria meter cada trozo donde se le llama.

if (S=59) { S=0; 
     if (M=59){ M=0; 
         if (H=23){H=0;}
         else { H++; } 
      }
     else {M++;}  
} else {S++; } }
varuk

Era una gilipollez. Los tiros iban por donde me dijo Amazon, lo que pasa es que no caí que podria poner varias variables actualizadas tras el "THEN" (estoy en Pascal).

Al final hice esto y ya va bien:

http://pastebin.com/m8cdac02

Muchas gracias pareja ^^

Amazon

Nadatio (:

COSMOS

socio pero q jaleo, pon un case o switch o como sea en pacal(no recuerdo), q te va a kedar mas cuco xD te lo digo yo q en el labo de pascal solo ponia q if else y era un cacao , tu profesor te lo agradecera

JuAn4k4

#14 Entonces serian 3 switch / case, date cuenta que son 3 variables.

Lo que puse yo es lo más claro de entender y no el jaleo que montaste xD

if (S=59) { S=0; 
     if (M=59){ M=0; 
         if (H=23){H=0;}
         else { H++; } 
      }
     else {M++;}  
} else {S++; } }

Si segundos = 59 -> segundos = 0 y +1 a los minutos.

(+1 Minutos) : Si minutos = 59 -> minutos = 0 y +1 a las horas.

(+1 Horas) : Si horas = 23 -> horas = 0

COSMOS

espera q lo releo mas despacio, q vi todo el tocho de if else y no lei mas xDDDDDDDDDDDDDD

edit: pos si hay q liarla anidando y tal. mañana con mas ganas lo miro q seguro q se puede apurar un poco(asi a ojo :

#
ELSE IF (H>=0) AND (H<24) AND (M>=0) AND (M<59) AND (S=59) THEN begin M:=M+1; S:=0 end
#
ELSE IF (H>=0) AND (H<24) AND (M=59) AND (S=59) THEN begin M:=0; S:=0 end
#
ELSE IF (H>=0) AND (H<24) AND (M>=0) AND (M<60) AND (S>=0) AND (S<59) THEN S:=S+1
#
ELSE IF (H>=0) AND (H<24) AND (M>=0) AND (M<60) AND (S=59) THEN S:=0;

los puedes meter en un solo if con h>=0 y h<24, luego distinguir los casos q m<59 y m=59 (no se van a dar otros) y luego ya s=59 y s<59, seguro q algun caso se puede ahorrar y probablemente el tocho q acabo de poner tenga algun sinsentido, pero si rebuscas nuevas opciones te va a venir bastante bien #1. mañana con mas calma, lo dicho, nas noches ;)

edit2: es bueno mirar los posts antes de postear, veo q ya lo has puesto tu, xDD

WoodElf

Hace eones que no uso pascal, desde la uni ^, pero no habra alguna función que te devuelva el formato de una fecha u hora en formato timestamp, y entonces solo tendrias que sumarle 1 a ese valor para hacer lo que quieres? en otros lenguajes de programacion existen y simplifican mucho estas cosas.

Usuarios habituales

  • WoodElf
  • COSMOS
  • JuAn4k4
  • Amazon
  • varuk
  • atom