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