На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Дата следующего дня
    Обнаружил ошибку. Раньше времени не было написать.

    Ввод: 28 2 2010
    Вывод: 29 2 2010

    Но 2010 - не высококлассный год.

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




    При попытке внесения таких изменений в код:

    ExpandedWrap disabled
             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

    Не знаю как исправить. :wall:
      Цитата Yagami @
      Не знаю как исправить.
      Все просто: ты проверяешь, високосный ли год, и если да - то 28-му февраля присваиваешь статус НЕпоследнего дня, да? Но ведь у тебя и в самом начале Last := false. Сделай так:

      ExpandedWrap disabled
               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...
      ExpandedWrap disabled
              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);
        volvo877
        Спасибо!
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0248 ]   [ 15 queries used ]   [ Generated: 13.11.25, 19:09 GMT ]