Дата следующего дня
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.9] |
|
|
| Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Дата следующего дня
|
Сообщ.
#16
,
|
|
|
|
Обнаружил ошибку. Раньше времени не было написать.
Ввод: 28 2 2010 Вывод: 29 2 2010 Но 2010 - не высококлассный год. ![]() ![]() program NextDay; uses crt; var y, y1, r: integer; d, d1: 1..31; m, m1: 1..12; last: boolean; BEGIN Write('Введите день, месяц, год, разделяя пробелами: '); {$I-} {Проверка коррекности введенных данных} read(d, m, y); {$I+} if IOResult <> 0 then begin writeln('Вы не ввели три числа. Повторите ввод.'); reset(input); readln; exit; end; if (d<1) or (d>31) then begin writeln('Ошибка ввода. Введите день (1-31)'); reset(input); readln; exit; end; if (m<1) or (m>12) then begin writeln('Ошибка ввода. Введите месяц (1-12)'); readln; exit; end; if y<1 then begin writeln('Ошибка ввода. Год не долшен быть меньше 1.'); reset(input); readln; exit; end; last:=false; d1:=d; m1:=m; y1:=y; case m of 4, 6, 9, 11: if d=30 then last:=true; 2: if d=28 then begin if ((y mod 4) = 0) and not (((y mod 100) = 0) and ((y mod 400) <> 0)) then last:=true; end; else if d=31 then last:=true; end; if last then begin d:=1; if m=12 then begin m:=1; y1:=y+1; end else m1:=m+1; end else d1:=d+1; writeln('Следующий день: ', d1, '-', m1, '-', y1); END. При попытке внесения таких изменений в код: ![]() ![]() last:=true; d1:=d; m1:=m; y1:=y; case m of 4, 6, 9, 11: if d=30 then last:=true; 2: if d=28 then begin if ((y mod 4) = 0) and not (((y mod 100) = 0) and ((y mod 400) <> 0)) then last:=false; end; else if d=31 then last:=true; end; Ввод: 28 2 2010 Вывод: 1 3 2010 Ввод: 27 2 2010 Вывод: 1 3 2010 Не знаю как исправить. |
|
Сообщ.
#17
,
|
|
|
|
Цитата Yagami @ Все просто: ты проверяешь, високосный ли год, и если да - то 28-му февраля присваиваешь статус НЕпоследнего дня, да? Но ведь у тебя и в самом начале Last := false. Сделай так:Не знаю как исправить. ![]() ![]() 2: if d=28 then begin last := true; if ((y mod 4) = 0) and not (((y mod 100) = 0) and ((y mod 400) <> 0)) then last:=false; // Если год - високосный, то 28 февраля - не последний день месяца !!! end; Ну, и ниже по тексту. Ты ж выводишь d1, m1, y1? вот и работай ТОЛЬКО с ними. D, M, Y оставь в покое! Они уже не нужны тебе... Все изменения - только с d1, m1, y1... ![]() ![]() if last then begin d1:=1; if m1=12 then begin m1:=1; y1:=y+1; end else m1:=m1+1; end else d1:=d1+1; writeln('Следующий день: ', d1, '-', m1, '-', y1); |
|
Сообщ.
#18
,
|
|
|
|
volvo877
Спасибо! |