Ayuda sobre Pascal

Mi nombre es Juan y soy de Jaén. Tengo 44 años y ahora me he puesto a estudiar un poco de informática. Dentro del cúmulo de asignaturas, tenemos PASCAL. Llevo todo el verano leyendo un manual pero cuando me pongo a resolver problemas no me salen. Tengo que entregar un trabajo con dos ejercicios. Voy a plantear uno de ellos para ver si alguien me echa un cable.
Ejercicio 1.-
Escribir un programa que sabiendo que el 1 de enero de 1900 era lunes, calcule el día de la semana de cualquier día de este siglo.
Solicito toda la ayuda posible.
Respuesta
1
El programa varía bastante sei tienes que tener en cuenta años bisiestos o no. Te voy a comentar como lo haría yo suponiendo que no se tienen en cuenta.
Ese problema se reduce a calcular el número de días que han transcurrido desde el 1 de enero de 1900 hasta la fecha que quieras controlar, y luego utilizar el operador mod si no recuerdo mal(que devuelve el resto de una división, comprueba que sea este operador) para ver si el día es l unes, martes etc. Así, si el resto de dividir el numero de días transcurridos entre 7 es 0, el día sería lunes, si es 1, martes ... si es 6 domingo.
Sobre el cálculo del numero de días:
Voy a almacenar el numero de días en una variable llamada NumDias
Supongo que tienes la fecha en formato xx xx xxxx (con por entero), y tienes el día, mes y año almacenados cada uno en su variable (que llamare día, mes, ano). Esto tienes que hacerlo en el momento de pedir los datos.
En primer lugarm calculamos los años enteros:
numAnos:= ano - 1900;
numDiasAnos:= numAnos * 365;
{si tuvieses en cuenta años bisiestos tendrias qeu hacerlo aqui, sumando los dias correspondientes, si necesitas ayuda con esto coméntamelo}
Siguiente paso, dentro del año que no hemos contado, el que no es entero, vamos a ver el numero de días correspondientes a los meses enteros, teniendo en cuenta que los meses 1, 3, 5, 6, 8, 10, 12 son de 31 días y el resto de 30 excepto febrero):
NumDiasMes:=0;
for i:=1 to (mes-1) do
begin
if i=2 then
NumDiasMes:=NumDiasMes + 28
else
begin
if i in [1,3,5,6,8,10,12] then
NumDiasMes:=NumDiasMes + 31
else NumDiasMes:=NumDiasMes + 30;
end;
end;
De nuevo aqui tendrias qeu controlar si el año es bisiesto, si lo necesitas, y en su caso sumar 1 al numero de dias (si es el 1 de marzo o posterior).
Bien, ya casi está. Ahora ya solo tenemos qeu sumar todos los dias:
NumDias:= NumDiasAnos + NumDiasMes + dias;
Y calcular el resto:
resto:= NumDias MOD 7;
Y por ultimo decir que dia es:
case resto of
0: writeln ('El ',dia,' de ',mes,' de ',ano,' es lunes');
1: writeln ('El ',dia,' de ',mes,' de ',ano,' es martes');
..
6: writeln ('El ',dia,' de ',mes,' de ',ano,' es domingo');
Esto es comoyo lo haría. Sobre esto puede haber variantes. Si quieres algo más, ya sabes.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas