Pascal/Turbo Pascal - programa que lea una fecha con el formato dd mm aaaa y determine si la fecha es correcta

 
Vista:
sin imagen de perfil
Val: 1
Ha aumentado su posición en 17 puestos en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

programa que lea una fecha con el formato dd mm aaaa y determine si la fecha es correcta

Publicado por Lucia (1 intervención) el 18/10/2019 19:11:36
Hola chicos. He estado los ultimos dias con este ejercicio de pascal pero no se que hacer mas para que me funcione.
Trata sobre un programa que lea una fecha con el formato dd mm aaaa y determine si la fecha es correcta. Un año es bisiesto si es divisible por 4 y no termina en dos ceros. Si termina en dos ceros, para que sea bisiesto debe ser divisible por 400. Tambien te pide que se descomponga en subprogramas, tal como:
- Lectura de los datos en el formato especificado.
- Comprobación de si el año es bisiesto. La cabecera puede ser:
function bisiesto (anno:integer):boolean;
- Cálculo de los días del mes según el año sea o no bisiesto.
function Numerodias (anno, mes:integer):integer;

De momento llevo esto. Si alguien me pudiera decir que estoy haciendo mal, lo agradeceria muchisimo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
program fechas;
var dia, mes, anyo: integer;
 
procedure leerdatos(dia, mes, anyo: integer);
begin
writeln('Va a escribir una fecha en formato dd mm aaaa');
writeln('Escriba una fecha en formato dia');
readln(dia);
writeln('Escriba una fecha en formato mes');
readln(mes);
writeln('Escriba una fecha en formato anyo');
readln(anyo);
	IF (dia > 31) or (dia < 1) then
	writeln('Error. Introduzca otra fecha');
	IF (mes > 12) or (mes < 1) then
	writeln('Error. Introduzca otra fecha');
	IF (anyo > 2020) or (anyo < 1) then
	writeln('Error. Introduzca otra fecha');
readln;
end;
 
function bisiesto (anyo:integer):boolean;
begin
	if (((anyo mod 4) = 0) and ((anyo mod 100) <> 0)) and ((anyo mod 400) = 0) then
	bisiesto:= TRUE {es bisiesto}
	else
	bisiesto:= FALSE; {no es bisiesto}
end;
 
function numerodias (mes, anyo:integer):integer;
	begin
		while (mes = 1) or (mes = 3) or (mes = 5) or (mes = 7) or (mes=8) or (mes = 10) or (mes = 12) do
		begin
			if (dia > 31) then
			writeln('Error. Introduzca otra fecha')
			else readln(dia);
			numerodias:= dia
			end;
 
		while (mes = 4) or (mes = 6) or (mes = 9) or (mes = 11) do
		begin
			if (dia > 30) then
			writeln('Error. Introduzca otra fecha')
			else readln(dia);
			numerodias:= dia
		end;
 
		while (mes = 2) do
			if (((anyo mod 4) = 0) and ((anyo mod 100) <> 0)) and ((anyo mod 400) = 0) then
				begin
					if (dia > 29) then
					writeln('Error. Introduzca otra fecha')
					else readln(dia);
					numerodias:= dia
				end
			else
				begin
					if (dia > 28) then
					writeln('Error. Introduzca otra fecha')
					else readln(dia);
					numerodias:= dia
				end;
	end;
 
begin {programa principal}
leerdatos(dia, mes, anyo);
bisiesto(anyo);
Numerodias(mes, anyo);
writeln('La fecha ', dia, mes, anyo, 'es correcta');
readln;
end.
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
sin imagen de perfil
Val: 112
Bronce
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

programa que lea una fecha con el formato dd mm aaaa y determine si la fecha es correcta

Publicado por juanba (40 intervenciones) el 02/06/2020 18:54:20
Supongo que después de seis meses, la autora ya habrá resuelto el problema, pero por si hay alguien más interesado en años bisiestos, el error está en la línea 49 que debería ser:

1
((anyo mod 4) = 0) and (((anyo mod 100) <> 0)  OR ((anyo mod 400) = 0))  then

Y ya puestos, como un poco más arriba hay una función bisiesto, se podría poner en la línea 22:

1
2
3
4
function bisiesto(a: integer);
begin
  bisiesto(a) :=  ((a mod 4) = 0) and (((a mod 100) <> 0)  OR ((a mod 400) = 0));
end;

Y la linea 49 quedaría:
1
if Bisiesto(anyo) then

Saludos.
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