IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Григорианский календарь, Поиск дня недели...
Relrin
сообщение 16.12.2010 17:05
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 64
Пол: Мужской

Репутация: -  0  +


Условие задачи: Необходимо ввести день, число и год. Определить день недели, приходящийся на этот день, месяц, год. При решении задачи использовать типы.
Начал решать задачу и возник следующий вопрос: как можно введя только нужную дату, определить день недели, приходящийся на этот день месяца и год?


Начало пока такое: (по мере понимания задачи, буду сюда скидывать более полностью решение):

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.


Я правильно указал типы? Заранее спасибо yes2.gif

Сообщение отредактировано: Relrin - 16.12.2010 17:05
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 17.12.2010 19:13
Сообщение #2


Гость






Цитата
Как введи скажем число 10 - и обратившись к типу, получить октябрь?

var
  m: integer;

// ...
readln(m);
TMon := Month(Pred(m)); { <--- Pred - потому что перечисление в типах начинается с 0 }

, но я бы еще проверял, не ввел ли пользователь число меньше 1 или больше 12, иначе будет ошибка.

Остальные вопросы по приведению типов решаются аналогично.

Цитата
Как обходиться с количеством дней в месяцах?
Создать массив:
Const
  DayOfMonth: array[Month] of NumbDays = (31, 28, 31, 30, 31, 30, 30, 31, 30, 31, 30, 31);
А вот с февралем у тебя проблемы. Без формул определить, в каком феврале 28 а в каком 29 дней - вряд ли получится...

Цитата
Как проходится по месяцам и дням в обе стороны? Через Succ и Pred?
Да. Но не забывать проверять граничные значения, иначе при Succ(December) у тебя будут проблемы, равно как и при Pred(January). Кстати, циклы
var M: Month;
begin
  for M := low(Month) to high(Month) do { ... }
end.
Работают безо всяких Pred/Succ ...
Цитата
Возможно ли преобразовать тип строк (Month, DayOfWeek)?
Аналогично:
const
  StrMonth: array[Month] of string = ('January','February','March','April','May',
         'June','July','August','September','October','November','December');
...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 8.08.2025 10:07
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"