На вход программе на паскале вводится дата в виде `3` чисел: день, месяц, год. Вывести какой это день недели.

Dgkdtjclhvkyulvlu Dgkdtjclhvkyulvlu    1   12.09.2021 19:29    51

Ответы
kulvera75 kulvera75  14.01.2024 23:46
Хорошо, давайте решим эту задачу пошагово.

1. Сначала нам нужно получить три числа от пользователя – день, месяц и год. Для этого мы можем использовать встроенную функцию `readln` в Pascal.

```
var
day, month, year: integer;

writeln('Введите день:');
readln(day);
writeln('Введите месяц:');
readln(month);
writeln('Введите год:');
readln(year);
```

2. После получения входных данных мы можем использовать формулу Зеллера для определения дня недели. Здесь важно заметить, что формула Зеллера работает только с определенными значениями месяца и года:

- Если месяц январь или февраль, то мы должны вычесть 1 из года и прибавить 12 к месяцу, чтобы получить правильное значение для формулы.
- Для формулы требуется двузначное представление года, поэтому мы должны взять только последние две цифры года. Например, для года 1987 мы будем использовать 87.
- Обратите внимание, что в формуле январь и февраль считаются 13 и 14 месяцами предыдущего года соответственно.

```
if month = 1 then
begin
month := 13;
year := year - 1;
end
else if month = 2 then
begin
month := 14;
year := year - 1;
end;

var
yearToDisplay: integer;

yearToDisplay := year mod 100;
```

3. Теперь мы можем использовать формулу Зеллера для определения дня недели. Эта формула выглядит следующим образом: `h = (q + (13*(m+1)/5) + K + (K/4) + (J/4) - 2*J) mod 7`, где:

- `h` - число соответствующее дню недели (0 – суббота, 1 – воскресенье, ..., 6 – пятница).
- `q` - день месяца.
- `m` - номер месяца.
- `K` - двузначное представление года (последние две цифры).
- `J` - первые две цифры года деленные на 100 (целая часть).

```
var
J, K, m: integer;

J := year div 100;
K := yearToDisplay;
m := month;
```

4. Выполним расчет с использованием формулы Зеллера:

```
var
h: integer;

h := (day + (13*(m+1)/5) + K + (K/4) + (J/4) - 2*J) mod 7;
```

5. Теперь у нас есть число `h`, соответствующее дню недели, но оно представлено в виде цифры от 0 до 6. Чтобы вывести имя дня недели, мы можем использовать конструкцию `case`, чтобы выбрать соответствующий вариант:

```
writeln('День недели:');
case h of
0: writeln('Суббота');
1: writeln('Воскресенье');
2: writeln('Понедельник');
3: writeln('Вторник');
4: writeln('Среда');
5: writeln('Четверг');
6: writeln('Пятница');
end.
```

Теперь наша программа будет запрашивать дату в формате `день, месяц, год` и выводить соответствующий день недели.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика