Pascal/Turbo Pascal - fecha

 
Vista:

fecha

Publicado por iker (2 intervenciones) el 30/10/2006 16:16:20
hola compis, necesito un poco de ayuda, muas gracias
Escribid un programa que suministrandole un d´a, mes y a˜no calcule el siguiente d´a, mes
y a˜ no. Tened en cuenta que un a˜no es bisiesto si es divisible por 4 pero no por 100, con la excepci´on de los a˜nos
divisibles por 400, que son todos bisiestos.
Entrada: El formato de entrada ser´a: dd mm aaaa.
Salida: El formato de salida ser´a: dd mm aaaa.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:fecha

Publicado por Carlos Guimaraenz (265 intervenciones) el 01/11/2006 18:18:01
Hola Iker! Aquí tienes la solución:

program EjercicioFecha;

uses crt;

type
str2 = string[2];
str4 = string[4];
str10 = string[10];

{esta función pasa el valor numérico a string y de ser necesario le agrega un 0 delante}
function NumeroAString(num : integer) : str2;
var
aux : str2;
begin
Str(num,aux);
if Length(aux) < 2 then
aux:='0' + aux;
NumeroAString:=aux;
end;

{función que aumenta en 1 el dia, el mes y el año}
function CambiarFecha(fecha : str10) : str10;
var
maxdias,dia,mes,ano,codigo : integer;
StrDia,StrMes : str2;
StrAno : str4;
i : byte;
biciesto : boolean;
begin
{convierto el dia a número (codigo sirve para Val solamente)}
Val(fecha[1]+fecha[2],dia,codigo);
Val(fecha[4]+fecha[5],mes,codigo);
Val(fecha[7]+fecha[8]+fecha[9]+fecha[10],ano,codigo);
{es biciesto si es divisible por 400, o bien divisible por 4 pero no por 100}
biciesto:=(ano mod 400 = 0) or ((ano mod 4 = 0) and (ano mod 100 <> 0));
{obtengo el dia maximo del mes dado}
case mes of
1,3,5,7,8,10,12 : maxdias:=31;
4,6,9,11 : maxdias:=30;
2 : begin
if biciesto then
maxdias:=29
else
maxdias:=28;
end;
end;
{aumento el dia y lo convierto a string}
if dia < maxdias then
dia:=dia + 1
else
dia:=1;
StrDia:=NumeroAString(dia);
{aumento el mes y lo convierto a string}
if mes < 12 then
mes:=mes + 1
else
mes:=1;
StrMes:=NumeroAString(mes);
{aumento el año y lo convierto a string}
ano:=ano + 1;
Str(ano,StrAno);
CambiarFecha:=StrDia + ' ' + StrMes + ' ' + StrAno;
end;

{CODIGO PRINCIPAL}
var
fecha : str10;
begin
ClrScr;
Write('Fecha: '); ReadLn(fecha);
Write('La fecha modificada es: ',CambiarFecha(fecha));
ReadLn;
end.

Un abrazo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:fecha

Publicado por Alberto Alonso (2 intervenciones) el 04/11/2006 19:05:22
Hola buenas he probado el programa y falla, introduces una fecha y te da el dia siguiente, el mes siguiente y el año siguiente...; estoy intentandolo arreglar pero si alguien puede ayudar se agradece.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:fecha

Publicado por Carlos Guimaraenz (265 intervenciones) el 04/11/2006 23:03:19
Hola... el programa NO FALLA, en todo caso no te expresaste bien:

"Escribid un programa que suministrandole un d´a, mes y a˜no calcule el siguiente d´a, mes y a˜ no."

El programa muestra el día, el mes y el año siguiente. Si lo que querías hacer era que devuelve el día siguiente ( y si se da el caso que cambie de mes y de año) bastaba con decir "... un programa que suministrándole un dia, mes y año calcule el día siguiente...", ya que no creo que a nadie se le ocurra poner el 32 de enero, por ejemplo.

Hasta luego.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:fecha

Publicado por Alberto Alonso (2 intervenciones) el 05/11/2006 12:32:52
Si me expresé mal, lo siento, el programa no falla, para lo que está programado funciona, pero el que comenzó la nta se equivocó lo que se quiere es un programa "calendario", por llamarlo así, teniendo en cuenta años bisiestos, y todo lo que se tenía en cuenta antes. Si puedes ayudar en eso lo agradecería mucho, si no gracias por el anterior programa.

Adios gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:fecha

Publicado por Diego Romero (996 intervenciones) el 05/11/2006 15:50:41
Amigo Alberto, yo entendí lo mismo que Carlos. Es decir que dado 04/11/2006 obtener 05/12/2007 y no 05/11/2006. Lo que tú quieres es que dada una FECHA sumarle UN DÍA y no dada una FECHA obtener la FECHA del día siguiente del més siguiente del año siguiente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:fecha

Publicado por alberto alosno (2 intervenciones) el 05/11/2006 18:49:14
si eso es jeje. Aver si me podriais echar un cable. Muchisimas gracias!!

BYTES!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:fecha

Publicado por Diego Romero (996 intervenciones) el 05/11/2006 19:04:44
Va en pseudocódigo.

- Tomas la fecha separada por día, mes y año.
- Preguntas si el mes es dos.
- Si lo es, verifica que el año sea bisiesto.
- Si lo es, pon el tope del mes dos a 29.
- Suma uno al día.
- Si el día es mayor al tope del mes, pon el día en 1 y suma uno al mes.
- Si el mes es mayor a 12, pon el mes en 1 y suma uno al año.

Previamente necesitas cargar un array de 12 posiciones con los topes de días por cada mes (asume 28 para el mes dos).

Algo así:

type
TTopesMes=Array[1..12] of byte;

const
CTopesMes: TTopesMes=(31,28,31,30,31,30,31,31,30,31,30,31);
var
TopesMes: TTopesMes;

begin
TopesMes:=CTopesMes;
...
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar