1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Условие задачи: Необходимо ввести день, число и год. Определить день недели, приходящийся на этот день, месяц, год. При решении задачи использовать типы. Начал решать задачу и возник следующий вопрос: как можно введя только нужную дату, определить день недели, приходящийся на этот день месяца и год?
Начало пока такое: (по мере понимания задачи, буду сюда скидывать более полностью решение):
Uses crt;
Type NumbDays=1..31; Month=(January,February,March,April,May, June,July,August,September,October, November,December); DayOfWeek=(Monday,Tuesday,Wednesday, Thursday,Friday,Saturday,Sunday);
Var Day: NumbDays; Mon: Month; Year: integer; i,j,k: integer;
Begin clrscr; writeln('Enter Day of Month(from 1 to 31): '); readln(Day); writeln('Enter Month(from 1 to 12): '); readln(Mon); writeln('Enter Year: '); readln(Year); {тут будет вычисление происходить нужного дня, но алгоритма решения пока не знаю} readln; End.
И всетаки решил вернутся к тому, чему хотел. Помогите сделать случай с уменьшением даты, до искомой даты, с учетом того, что с каждым сдвигом меняется день недели! Например. Пускай сейчас... скажем какая-нибудь среда 2.1.1989 и искомое - 01.01.0001 года. Первый сдвиг: 1.1.1989, вторник Второй сдвиг: 31.12.1988, понедельник Третий сдвиг: 30.12.1988, воскресенье и так далее...
Uses Crt;
Const DayOfMonth: array[1..12] of integer=(31,28,31,30,31,30,30,31,30,31,30,31); {для обычных лет} DayOfMonth2: array[1..12] of integer=(31,29,31,30,31,30,30,31,30,31,30,31); {для высокосных}
Type NumbDay=:1..31; Month=(January,February,March,April,May,June,July,August, September,October,November,December); DayOfWeek=(Monday,Tuesday,Wednesday, Thursday,Friday,Saturday,Sunday);
Begin clrscr; {Ввод данных} writeln('What day is it today?(dd mm yyyy)'); readln(TDay,a,TYear); TMon:=Month(pred(a)); writeln; writeln('1 - Monday, 2 - Tuesday, 3 - Wednesday '); writeln('4 - Thursday, 5 - Friday, 6 - Saturday, 7 - Sunday'); writeln('Day of week(1 to 7): '); readln(a); DoW:=DayOfWeek(pred(a)); writeln; writeln('Enter date, which you find: dd mm yyyy'); readln(Day,Mon,Year); Mon:=Month(pred(a)); writeln; {Поиск дня недели} {Идея алгоритма - сдвигать дни, месяцы, года, до искомой даты, учитывая также дни недели, на которые приходятся датой} {Сначала случай, когда указанный год больше искомого} if TYear>Year then begin for i:=TYear downto Year do begin {Для высокосного года} if (i mod 4=0) and (i mod 100<>0) and (i mod 400<>0) then begin // как тут дальше идти, т.к. нужно как-то ассоциировать, что в январе - 31 число, феврале 28/29 и т.д. // + ко всему учитывать, что мы уменьшаем дату изначальную до искомой end; {для невысокосного года…} else end; end; writeln('Calendar day of the week ',Day,'.',a,'.',Year,' will 2'); readln; End.